1. java外部類怎麼調用內部類的方法
首先,你要搞清楚靜態方法跟非靜態方法的區別:
非靜態方法是跟隨著類的生命周期的,當類實例化時,非靜態方法跟隨著實例化對象產生,實例化對象可以調用類中的非靜態方法,當實例化對象結束時,非靜態方法也跟著結束。就是說,非靜態方法是依附於實例化對象的,它的生命周期就是實例化對象的生命周期。
靜態方法是不受制於類的實例化對象的,即靜態方法從程序開始運行到最後釋放內存結束是一直存在的,它的生命周期就是程序的生命周期。
從以上可知,靜態方法調用非靜態方法會造成一個問題,就是生命周期的不一致,比如說:程序剛剛開始運行時,類的實例化構造函數還沒有執行,這時靜態方法是調用不了非靜態方法的;或者當實例化對象消亡之後,靜態方法也是不能夠去調用非靜態方法的。
靜態方法要想調用非靜態方法,必須要通過實例化對象去調用;當然也可以把非靜態方法變成靜態方法,這樣就不存在任何障礙了。
希望我的回答對你能夠有所幫助。
2. Java里什麼叫內部類什麼叫外部類
在Java中,將一個類定義在另一個類內部,這個內部的類被稱為內部類,而包含內部類的外部類則被稱為外部類。例如:
class A {
class B {}
B b = new B();
A a = new A();
}
外部類調用內部類非常簡單,因為內部類的對象是在外部類中定義的,因此可以直接使用內部類對象的引用。不過需要注意的是,只能訪問public級別的成員。例如:
A a = new A();
A.B b = a.new B();
在內部類中調用外部類也很簡單,直接使用外部類名即可。內部類可以訪問外部類的所有成員,包括private的數據和方法。例如:
class A {
class B {
void method() {
System.out.println("內部類訪問外部類的成員");
}
}
private String data = "外部類私有數據";
void access() {
B b = new B();
b.method();
System.out.println(data);
}
}
值得注意的是,想要創建內部類的對象,必須有一個外部類的實例的引用。例如:
A a = new A();
A.B b = a.new B();
如果嘗試在外部類外部直接創建內部類對象,例如:
B b = new B();
這是不允許的。必須先創建外部類的實例,然後通過外部類實例創建內部類對象。例如:
A a = new A();
A.B b = a.new B();
當然,在外部類內部可以直接創建內部類對象,例如:
class A {
class B {}
B b = new B();
}