static class 静态类的实例化 (二)

2014-11-24 11:27:41 · 作者: · 浏览: 10
=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=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;
}
}