java Class对象返回的都是指向同一个java堆地址上的Class引用
??一旦類(lèi)被加載了到了內(nèi)存中,那么不論通過(guò)哪種方式獲得該類(lèi)的Class對(duì)象,它們返回的都是指向同一個(gè)java堆地址上的Class引用。jvm不會(huì)創(chuàng)建兩個(gè)相同類(lèi)型的Class對(duì)象
public class Cat {static {System.out.println("wwwww");} }class T1 {public static void main(String[] args) throws ClassNotFoundException {System.out.println("inside main");Class c1 = Cat.class;Class c2 = Class.forName("com.example.demo.Cat");Class c3 = new Cat().getClass();System.out.println(c1 == c2);System.out.println(c2 == c3);System.out.println("finish main");} }從上面我們可以看出執(zhí)行不同獲取Class引用的方法,返回的其實(shí)都是同一個(gè)Class對(duì)象。
其實(shí)對(duì)于任意一個(gè)Class對(duì)象,都需要由它的類(lèi)加載器和這個(gè)類(lèi)本身一同確定其在就Java虛擬機(jī)中的唯一性,也就是說(shuō),即使兩個(gè)Class對(duì)象來(lái)源于同一個(gè)Class文件,只要加載它們的類(lèi)加載器不同,那這兩個(gè)Class對(duì)象就必定不相等。這里的“相等”包括了代表類(lèi)的Class對(duì)象的equals()、isAssignableFrom()、isInstance()等方法的返回結(jié)果,也包括了使用instanceof關(guān)鍵字對(duì)對(duì)象所屬關(guān)系的判定結(jié)果。所以在java虛擬機(jī)中使用雙親委派模型來(lái)組織類(lèi)加載器之間的關(guān)系,來(lái)保證Class對(duì)象的唯一性。
總結(jié)
以上是生活随笔為你收集整理的java Class对象返回的都是指向同一个java堆地址上的Class引用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python代写CSSE1001/703
- 下一篇: Hadoop学习之pig