写一个类用来判断是否静态类和非静态类的能不能访问外部的静态变量和非静态变量,答案是静态内部类可以访问静态变量,而不可以访问类的非静态内部类。
原因是:当一个静态内部类被使用的时候,它的外部类一定已经被加载了(这个可以参考类加载机制),外部类加载了以后它的静态变量才会放到了方法区中,然后才能被静态内部类访问,而一般的成员变量此时还没有被分配内存,因而没法进行访问。
package Main;
import java.util.*;
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main
{
private static int c=0;
private int a=0;
public static class 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 static void main(String[] args){
}
interface Callback{
void test();
}