静态方法中不能new内部类的实例对象的总结

class Test{
     public void main(String[] args){
    A testA=new A();  //这里会出现问题
        new Thread(new Runnable(){
            public void run(){
            testA.printout();
         }
         }).start();
         System.out.println("aaaaaa");  
    }
  
     class A{
              public void printout(){
              System.out.println("aaaaaa");    
        }
      }
  }

静态方法中不能new内部类的实例对象。这是为什么了? 
内部类的最重要的一个特点就是它可以直接访问它外部类的成员变量。成员变量是对象身上的。对象创建完成了,才会为成员变量分配空间。能调用成员变量,意味着一定有了实例对象.
main方法是静态的,它执行的时候可以不用创建那个对象。这就矛盾了。
main方法运行的时候没有任何外部类的实例对象。我们的内部类的实例对象创建了它又可以访问外部类的成员变量,外部类的实例对象在哪儿了?
所以这个原因,我们下面的代码就要进行改写 要想创建内部类的实例对象,必须创建外部类的实例对象。
//  修改之后的代码如下:
 class Test{
     public void main(String[] args){
    new Test().init();
         System.out.println("aaaaaa");  
    }
  
  public void init(){
    A testA=new TestA();
        new Thread(new Runnable(){
            public void run(){
            testA.printout();
         }
         }).start();
    }  
  class A{
              public void printout(){
              System.out.println("aaaaaa");    
        }
      }
  }

方法的调用一定是要通过对象调用的。
哪个对象调用了这个方法,创建内部类实例对象的时候所使用的外部类的实例对象就是谁

转自:http://www.cnblogs.com/printN/p/6249177.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值