java中 main()方法中为什么不能new 内部类

我想问一下,为什么在main()方法中不能直接new内部类,而要先new自己这个类,在.new内部类,而在这个类得其他方法中可以直接new内部类。好像是static的原因,谁能讲详细一点,我刚学

1.首先你的内部类不是静态的对吧(不是static class)。
2.而main方法是静态的。
3.main 方法是个静态方法,而 静态 类不是个静态内部类,所以不能直接初始化。

对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-16
在创建实例内部类的实例时,外部类的实例必须存在。
//访问内部类,完整类名:Outer.InnerTool,
//创建内部类对象时先new一个外部类在new内部类
Outer.InnerTool tool = new Outer().new InnerTool();
或者
Outer outer = new Outer();
Outer.InnerTool tool2 = outer.new InnerTool();
把你代码贴出来!
第2个回答  2011-08-16
关于内部类-------------------
定义:
内部类是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,然后在前面加上外部类的类命和'$'符号;
内部类不能用普通的方式访问,但是内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。
写法:
内部类分为成员内部类(1)、静态嵌套类(2)、方法内部类(3)、匿名内部类(4)。
1.class Out{ class In{...} } 外部class中直接加class
2.class Out{ } class Other{...} 写在一个文件中的独立的两个类,没有实际的内部类的功能
3.class Out{ public void out_a(){ class In{...} } } 在外部class的方法中加class
4.Out out = new Out(public void out_a(){...}); 类似与jquey中的$.each(function (a,v){...}),在声明时建立,类似这种写法的。
访问:
1.能够访问成员内部类的唯一途径就是通过外部类的对象(A)
2.可以像其他静态成员一样,没有外部类对象时,也能够访问它
静态嵌套类不能访问外部类的成员和方法。
3.方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
方法内部类对象不能使用该内部类所在方法的非final局部变量。.
4.建立匿名内部类是重写父类的方法,而不是创建新的方法。
关于问题----------
class Out{
private int flag = 10;
public void getIn(){
In in = new In();
in.setOut();
}
class In{
public void setOut(){
System.out.print(i);
}
}
}
在getIn()方法中虽然没有创建外部类的对象就实例化了内部类对象,仿佛违背了(A),但是如果不创建外部类对象也就不可能使用到getIn(),所以还是会先创建外部类对象。
如果将getIn()变为static public void getIn(),这样不创建外部类就可以实例化外部类了!
但是我们不能在一个静态方法里访问非静态成员和方法。但是我们可以在这个静态方法中实例化一个外部类对象,再用这个对象实例化外部类,这就是使用成员内部类的时候在static main中写的内容了。
static在编译器执行之时,它将是独立的一块空间,可以理解它只是鸠占鹊巢的,所以不能单纯的理解为这个类中的main方法,所以还是需要在main中去创建外部的对象,再创建内部类。
我写了这么多,你才悬赏0分。情何以堪啊
相似回答