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分。情何以堪啊

java中 main()方法中为什么不能new 内部类
1.首先你的内部类不是静态的对吧(不是static class)。2.而main方法是静态的。3.main 方法是个静态方法,而 静态 类不是个静态内部类,所以不能直接初始化。对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见...

Java中为静态内部类不能被new呢?
public class TestStatic {public static void main(String[] args) {\/\/1.静态内部类,静态方法!Test05.StaticClass.show();\/\/new Test05.StaticClass().show();\/\/被注释的这里其实是合法的,只是有点多余,你看完整个在回头看这里,这与调用静态方法有违背!\/\/2.非静态内部类,非静态方法!new Test...

java程序中能否在内部类当中再定义一个内部类?
public class 内部类 {public static void main(String[] args) {System.out.println("\\n\\t\\t===java程序中能否在内部类当中再定义一个内部类?===\\n");init();}\/\/初始化!private static void init(){new A().new B().new C().show();new A().show();}}class A{public class ...

请问在java中,在main以内和以外创建的同样的类有怎样的区别啊。新手,谢...
写在main方法里的类是内部类.这个类的作用范围只在方法里 内部类属于比较高级的知识有点难懂但是很重要.虽然你是这么问 不过我想这应该和你问的东西很不一样 没学内部类之前你就记住 类都是写在最外层的 方法必须写在类里边 main方法也不例外就行了 ...

java在类内部的静态方法中可以new 一个其子类的对象吗?如代码_百度知 ...
java在类内部的静态方法中【可以】new一个其【子类】的对象 但是在类内部的静态方法中【不可以】直接new一个其【内部类】的对象

Java是不是每个类都可以有一个main函数并且可以互相调用?
其他的和普通方法没区别);是可以互相调用的。只是由于main方法是static的,所以你要调用的时候不能用实例化后的对象去调用,直接类名.main(null)即可。但这样调用很容死循环,你调用我,我调用你。实际是不允许这么玩的。由于我这个是多线程的,所以输出是乱序 运行后就是死循环~...

java main类调用其他类不能实现的原因?
在外部类之外不能直接通过内部类实例对象来调用外部类中的内部类的方法和数据,必须通过外部类的方法来间接调用,或者把内部类申明为static,这样内部类成为顶层类之后便可以直接调用,所以楼主可以把类line变为静态类,public static class Line,或者在外部类再加个方法来调用内部类的构造函数即可 ...

java main方法问题
可你现在有两个class 这两个class又单独执行 况且你这是Java书上的,可能为了排版节省空间所以写到了一起,原则上除了内部类外没有两个类在一起的情况;就是用一些工具,那也会自动报错的

Java main方法
也就是main方法,就是你上面的那句public static void mian(Stirng []args),但是在主类中可以有多个方法,就像你上面定义的许多方法,都不是主方法,主方法的位置和普通方法的位置无所谓再哪里,因为程序在执行时都先执行主方法,所以就算把主方法写到最后,也是从主方法开始执行。

Java内部类的问题?
内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外围类的所有元素的访问权限。内部类分类:内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点。在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套...

相似回答