请问static方法内为什么不能new内部class?

lxyscls 2016-12-28 04:29:46
引用
无法从静态上下文中引用非静态变量this


请问该怎么解读呢?
...全文
161 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingfeng_coder 2016-12-28
  • 打赏
  • 举报
回复
对于这块我的理解是static的是类的,非static的是对象的,先有类再有对象,那么对象的就不能在类之前使用。利用这个规则可以解释很多事情了
小灰狼 2016-12-28
  • 打赏
  • 举报
回复
一个类定义了静态方法,那么你可以通过 ClassName.methodName 进行调用,这时类没有创建对象,当然也可能创建了N个对象。所以,在静态方法内部,是不允许访问非静态成员的(包括方法和类变量),因为在静态方法内无法确定访问的是哪个对象的方法或变量。 OK,明白以上道理后,在Java中,内部类是可以访问其所在的外部内的非静态成员的(方法、类变量)。或者说,一个类部类被创建之前必须先创建其外部类。再或者说,内部类的创建必须是用一个外部对象进行创建。 上面说得很抽象,你可以假设一下:假设Java中允许静态方法直接创建内部类对象,那么以下代码程序将无法知道输出什么 public class Test { private int value; class InnerClass{ public InnerClass(){ System.out.println(value); } } public Test(int value){ this.value = value; } public static void f(){ new InnerClass(); } public static void main(String[] args){ Test t1 = new Test(10); Test t2 = new Test(20); Test.f(); } }
朔北冥 2016-12-28
  • 打赏
  • 举报
回复
静态里面无法使用成员变量

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧