1、靜態(tài)嵌套類(lèi) (Static Nested Class) 和內(nèi)部類(lèi)(Inner Class)的不同?
● 靜態(tài)嵌套類(lèi):Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類(lèi),它可以不依賴(lài)于外部類(lèi)實(shí)例被實(shí)例化。
● 內(nèi)部類(lèi):需要在外部類(lèi)實(shí)例化后才能實(shí)例化,其語(yǔ)法看起來(lái)挺詭異的。
class Outer {
class Inner {
}
public static void foo() {
new Inner();
}
public void bar() {
new Inner();
}
public static void main(String[] args) {
new Inner();
}
}
注意:Java中非靜態(tài)內(nèi)部類(lèi)對(duì)象的創(chuàng)建要依賴(lài)其外部類(lèi)對(duì)象,上面的面試題中foo和main方法都是靜態(tài)方法,靜態(tài)方法中沒(méi)有this,也就是說(shuō)沒(méi)有所謂的外部類(lèi)對(duì)象,因此無(wú)法創(chuàng)建內(nèi)部類(lèi)對(duì)象,如果要在靜態(tài)方法中創(chuàng)建內(nèi)部類(lèi)對(duì)象,可以這樣做:
new Outer().new Inner();
● Java中的反射
說(shuō)說(shuō)你對(duì) Java 中反射的理解
Java中的反射首先是能夠獲取到Java中要反射類(lèi)的字節(jié)碼,獲取字節(jié)碼有三種方法,
Class.forName(className)。
類(lèi)名.class。
this.getClass()。然后將字節(jié)碼中的方法,變量,構(gòu)造函數(shù)等映射成相應(yīng)的Method、Filed、Constructor等類(lèi),這些類(lèi)提供了豐富的方法可以被我們所使用。