萬物皆對象
class A{ void PRint(){ System.out.println("A"); }}public class ClassDemo1 { public static void main(String[] args) { //A的實例對象 A a1 = new A();}上面 ,我們知道a1是A類的對象,那么,A類本身是不是對象呢,當然也是對象,因為萬物皆對象。那它是哪個類的對象呢?答案是Java.lang.Class類的對象。有一個class是Class類。 既然A類本身也是也是對象,那么它怎么實例對象怎么表示呢?有以下三種:
//第一種,任何一個類都有一個隱含的靜態成員變量 Class c1 = A.class; //第二種 ,已經知道該類的對象,通過getClass方法獲取 Class c2 = a1.getClass(); //c1,c2表示了A類的類 類型 class type; //c1 c2都代表了A類的類類型, System.out.println(c1 == c2);//true //第三種 Class c3 = null; try { c3 = Class.forName("com.wj.demo.A"); System.out.println(c1 == c3);//true } catch (ClassNotFoundException e) { e.printStackTrace(); }上面的c1,c2,c3都是A類的類類型,我們可以通過類的類類型創建該類的實例:
//可以通過類的類類型創建該類的實例 try { A a = (A) c1.newInstance();//需要有無參數的構造方法 a.print();//可以正常調用 } catch (InstantiationException | IllegalaccessException e) { e.printStackTrace(); }而且,需要注意的是Class類的構造方法如下:
/* * Constructor. Only the Java Virtual Machine creates Class * objects. */ private Class() {}所以,我們不可能調用Class的構造方法。
以上就是關于Class類的基本介紹與使用。所有代碼:
public class ClassDemo1 { public static void main(String[] args) { //A的實例對象 A a1 = new A(); //A也是實例對象,是Class類的實例對象 //任何一個類都是Class類的實例對象,都可以有三種表示方式 //第一種,任何一個類都有一個隱含的靜態成員變量 Class c1 = A.class; //第二種 ,已經知道該類的對象,通過getClass方法獲取 Class c2 = a1.getClass(); //c1,c2表示了A類的類 類型 class type; //c1 c2都代表了A類的類類型, System.out.println(c1 == c2); //第三種 Class c3 = null; try { c3 = Class.forName("com.wj.demo.A"); System.out.println(c1 == c3); } catch (ClassNotFoundException e) { e.printStackTrace(); } //可以通過類的類類型創建該類的實例 try { A a = (A) c1.newInstance();//需要有無參數的構造方法 a.print(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } Class b1 = B.class; System.out.println(c1 == b1); } /** * 1、類是對象,是java.lang.Class類的實例對象,Class也是一個class * */}class A{ void print(){ System.out.println("A"); }}新聞熱點
疑難解答