1. 程式人生 > >Java反射專題學習-類的建立及初步認識

Java反射專題學習-類的建立及初步認識

  博主開始學習Java反射基礎系列,用於夯實基礎;今天學習類的建立以及Class Type和類的關係等等,內容比較簡單我就把知識點寫在了程式碼的註釋上,程式僅供參考;

總結一下要點:

1.Java中任何一個類都是Class類的例項物件

2.一個類只可能是一個Class類的一個例項物件,不可能有多個例項物件

3.Class Type(類型別)和Class的例項化物件是一個意思 不要搞混淆

4.不僅僅是可以通過類去得到Class Type,Class Type也可以建立類

程式碼如下:(重點在於類和Class Type的區別以及聯絡)

/**
 * @Description 類的建立
 * @Date 2019/1/2 14:55
 * @Created by FLXH
 */
public class Main {

    public static void main(String[] args) {
        //表明foo是Foo類創建出來的一個例項物件
        Foo foo = new Foo();
        //任何一個類都是Class的例項物件,這個例項物件有三種表示方式,現在以Foo類作為演示

        //1.第一種建立Class的例項物件告訴我們任何一個類都有一個隱含的成員變數c,名為class
        Class c1 = Foo.class;
        //2.第二種建立方式,通過類的物件的getClass方法,可以得到這個類的Class例項物件
        Class c2 = foo.getClass();
        //第三種建立方式:通過Class的forName方法
        Class c3 = null;
        try {
            c3 = Class.forName("Foo");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //下面兩行程式碼的結果輸出都為true,證明一個類只可能是Class類的一個例項物件(這裡c1,c2,c3都是Foo類)
        System.out.println(c1 == c2);
        System.out.println(c2 == c3);
        //這裡給出一個定義"類型別(Class Type)"(Java官網中這樣說的)
        //從這個例子可以給出Class Type的含義:c1,c2,c3都是Foo類的Class Type,而foo則是Foo類的物件,這兩者不要搞混淆

        //上面幾種方法都是通過類去建立Class的例項物件,我們當然可以通過Class例項物件(Class Type)去建立類
        try {
            //這樣就建立了一個Foo類的一個物件(foo1)
            Foo foo1 = (Foo) c1.newInstance();
            //我們可以測試一下
            foo1.print();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }
}

/**
 * 任何類都是一個物件,都是java.lang.Class類的例項物件
 */
class Foo {

    void print(){
        System.out.println("test");
    }
}