所有的類都是在對其第一次使用時,動態(tài)加載到JVM中。當程序創(chuàng)建第一個對類的靜態(tài)成員的引用時,就會加載這個類。這個證明構(gòu)造器也是類的靜態(tài)方法,即使在構(gòu)造器之前并沒有使用static關(guān)鍵字。因此,使用new操作符創(chuàng)建類的新對象也會被當作對類的靜態(tài)成員的引用。簡而言之,就是當對一個類的靜態(tài)成員持有引用時,這個類就會被加載到JVM。
注:使用newInstance()來創(chuàng)建的類,必須帶有默認的構(gòu)造器(無參構(gòu)造方法)。
為了在使用泛化的Class引用時放松限制,加入了通配符,它是java泛型中的一部分。通配符就是”?“,表示”任何事物“。
Class<?> intClass = int.class;intClass = double.class;//普通的類引用可以被重新賦值為指向任何其他的Class對象為了創(chuàng)建一個Class引用,它被限定為某種類型,或該類型的任何子類型,你需要將通配符與extends關(guān)鍵字相結(jié)合,創(chuàng)建一個范圍。
Class<? extends Number> bounded = int.class;bounded = double.class;bounded = Number.class;當你將泛型語法用于Class對象時,newInstance()將返回該對象的確切類型。
Class<SmallDemo> smallDemoClass = SmallDemo.class;SmallDemo smallDemo = smallDemoClass.newInstance();Class<? super SmallDemo> demo = smallDemoClass.getSuperClass();Object obj = demo.newInstance();進行向下轉(zhuǎn)型前,如果沒有其他信息可以告訴你這個對象是什么類型,那么使用instanceof是非常重要的,否則會得到一個ClassCastException異常。
if(x instanceof Dog) ((Dog)x).bark();
|
新聞熱點
疑難解答