inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
int a;
String b;
}
}
public class Test {
public static void main(String[] args){
MyInnerStaticClass inner=new MyInnerStaticClass();
inner.a=10;
inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
int a;
String b;
}
}
上述代码将静态匿名类用new实例化了,运行后输入10 abc,正确!
再看一个代码:
[java]
public class Test {
public static void main(String[] args){
MyInnerStaticClass inner=null;
inner.a=10;
inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
int a;
String b;
}
}
public class Test {
public static void main(String[] args){
MyInnerStaticClass inner=null;
inner.a=10;
inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
int a;
String b;
}
}
代码中的[java]
MyInnerStaticClass inner=null;
MyInnerStaticClass inner=null;替换为
[java]
MyInnerStaticClass inner;
MyInnerStaticClass inner;后提示没有初始化,然后我就将其附为null,结果eclipse在inner.a=10处提示
Null pointer access: The variable inner can only be null at this location
这充分说明了静态内部类中的变量不是默认是静态的,运行结果是
java.lang.NullPointerException
下面一个代码更能说明问题
[java]
public class Test {
public static void main(String[] args){
MyInnerStaticClass inner=null;
inner.a=10;
inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
static int a;
static String b;
}
}
public class Test {
public static void main(String[] args){
MyInnerStaticClass inner=null;
inner.a=10;
inner.b="abc";
System.out.println(inner.a+" "+inner.b);
}
static class MyInnerStaticClass{
static int a;
static String b;
}
}
这个代码运行就正确了,说明静态内部类其实和定义在外面的单独一个普通类区别不大,但是大家还是需要理解上面引用的那篇文章里说的,毕竟他是内部类,还是有一些和外部类不同的
虽然这个代码运行成功了,但是eclipse提示了一个警告
The static field Test1.MyInnerStaticClass.a should be accessed in a static way
这个大家都懂得,类中的静态方法和变量不属于单独一个实例,所以访问时应该直接classname.var方式访问,当前上面方法也不错,但是不好,改正后代码
[java]
public class Test {
public static void main(String[] args){
MyInnerStaticClass.a=10;
MyInnerStaticClass.b="abc";
System.out.println(MyInnerStaticClass.a+" "+MyInnerStaticClass.b);
}
static class MyInnerStaticClass{
static int a;
static String b;
}
}