为什么在main里面不能创建内部类的实例?
我有下面一个程序,想要测试一下主类m和子类sub1,sub2的关系,其中sub2是个静态类:public class m
{
String n="n";
static String s="s";
public class sub1
{
public void fn(){System.out.println(n);}
//static public void fs(){System.out.println(s);}
}
static class sub2
{
//public void fn(){System.out.println(n);}
static public void fs(){System.out.println(s);}
}
public void f()
{
sub1 s1=new sub1();//OK, no error
sub2 s2=new sub2();//OK
}
public static void main(String[] args)
{
m obj=new m();
sub1 s1=new sub1();//Error
s1.fn();
//s1.fs();
sub2 s2=new sub2();//OK
//s2.fn();
s2.fs();
}
}linux下用Openjdk编译有错误:
$ javac m.java
m.java:24: 错误: 无法从静态上下文中引用非静态 变量 this
sub1 s1=new sub1();//Error
^
1 个错误
很奇怪的地方是:
1. 在m的成员函数里面,可以sub1 s1=new sub1();但是在main函数里面就不可以,有语法错误。
2. 静态类sub2竟然都可以声明实例,但是非静态类sub1反而不行。
这个是java设计的什么原则导致的?
非static内部类需要外部类的引用才能访问外部类的成员啊,think in java里说的很明白了
main函数是static函数。
页:
[1]