zoukankan      html  css  js  c++  java
  • 静态方法中不能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");    
            }
          }
      }
    复制代码
    方法的调用一定是要通过对象调用的。
    哪个对象调用了这个方法,创建内部类实例对象的时候所使用的外部类的实例对象就是谁
  • 相关阅读:
    设计模式20-观察者模式
    设计模式19-备忘录模式
    设计模式18-中介者模式
    设计模式17-迭代器模式
    设计模式16-解释器模式
    Wireshark基本介绍和学习TCP三次握手
    Jmeter CSV 参数化/检查点/断言
    Jmeter运营活动并发测试—巧用集合点
    一个简单的性能测试
    Jmeter对HTTP请求压力测试、并发测试
  • 原文地址:https://www.cnblogs.com/ldq2016/p/6626561.html
Copyright © 2011-2022 走看看