java反射(二):獲取Class類的四種方式

NO IMAGE

我們建立了一個類,通過
編譯(javac.exe),生成對應的.class檔案,之後使用java.exe(JVM的類載入器來完成)載入此.class檔案,此.class檔案載入到記憶體以後,就是一個執行時類,存放在快取區,這個執行時類就是一個

Class的例項。

java.lang.class是反射的源頭。

它有如下幾個特點:

1.每一個執行時類只載入一次

2.有了Class的例項之後,我們才可以進行如下的操作:

2.1)建立對應的執行時類的物件

2.2)獲取對應的執行時類的完整結構(屬性、方法、構造器、內部類、父類、所在包、註解、異常…)

2.3)呼叫對應的執行時類的指定的結構(屬性、方法、構造器)

2.4)反射的應用:動態代理。

在正常方式下:我們需要引入需要的“包類”名稱——通過new例項化——取得例項化的物件

反射方式:例項化物件——getClass()方法——得到完整的“包類”名稱。

這相當於是一個倒序的過程。

如何獲取Class例項呢?

Class只有在例項後才能開始進行反射。下面是例項化的四種方式:

1.呼叫執行時類本身的.class屬性

		Class clazz1 =Person.class;
System.out.println(clazz1.getName());
Class clazz2 = String.class;
System.out.println(clazz2.getName);

2.通過執行時類的物件獲取

	Person  p =new Person();
Class clazz3 = p.getClass();
System.out.prinln(clazz3.getName());<strong>
</strong>


3.
通過Class的靜態方法獲取(反射的動態性)

String className ="com.arguigu.java.Person";
Class clazz4 = Class.forName(className);
//clazz4.newInstance();
System.out.prinln(clazz4.getName());


4.通過類的載入器

ClassLoader  classLoader = this.getClass().getClassLoader();
Class  clazz5 = classLoader.loadClass(className);
System.out.println(clazz5.getName());

用途:

1.可以建立對應的執行時類的物件

2.獲取對應的執行時類的完整的類的結構:屬性/方法/構造器/包/父類/泛型/註解/異常/內部類…

3.可以呼叫對應的執行時類中指定的結構(某個指定的屬性/方法/構造器)

以上就是Class例項化的四種方式,下一篇介紹第四種類載入器ClassLoader的使用。