靜態內部類訪問外部類靜態變數的原因分析
阿新 • • 發佈:2018-12-26
寫一個類用來判斷是否靜態類和非靜態類的能不能訪問外部的靜態變數和非靜態變數,答案是靜態內部類可以訪問靜態變數,而不可以訪問類的非靜態內部類。
原因是:當一個靜態內部類被使用的時候,它的外部類一定已經被載入了(這個可以參考類載入機制),外部類載入了以後它的靜態變數才會放到了方法區中,然後才能被靜態內部類訪問,而一般的成員變數此時還沒有被分配記憶體,因而沒法進行訪問。
package Main;
import java.util.*;
import java.util.LinkedHashMap;
import java.util.Scanner;
publicclass Main
{
privatestaticint c=0;
privateinta=0;
publicstaticclass InnerStatic
{
void print(){
c+=1;
//a+=1;
System.out.println(c+"");
}
}
private class InnerNotStatic{
void print(){
c+=1;
a+=1;
System.out.println(c+"");
}
}
Callback call=new Callback(){
public void test(){
c=1;
}
};
public
}
interface Callback{
void test();
}