• 技术文章 >java >java基础

    java内部类实例化方法及出错解决

    小妮浅浅小妮浅浅2021-02-23 10:17:54原创3856

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1.内部类实例化方法

    如果内部类未声明为static,在实例化时首先需要new一个外部类的对象。并通过p.new Inner()的方式new 内部类,表明这个内部类指向该外部类。内部类的class类型为:Parent.Inner,而不是p.Inner,这个需要和new的方式区分开。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    public class Test {

     public static void main(String[] args) {

      Parent p = new Parent();

      Parent.Inner i = p.new Inner();

      i.print();

     }

      

    }

      

    class Parent {

     class Inner {

      public void print() {

       System.out.println("xxx");

      }

     }

    }

    2.实例化出错解决

    设是想在main方法中运行这一段代码,那么即便正确写对了main方法,依然是不能运行的。内部类有一个隐式的成员指向外部对象,在构造的时候赋值。所以普通的类默认构造方法是无参的,但是内部类的默认构造方法有一个参数,这个参数就是为了给指向外围对象的成员属性初始化。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    class A{

        class B{}

    }

      

    $ javap -p a.b

    Warning: Binary file a.b contains com.test.A$B

    Compiled from "Test.java"

    class com.test.A$B {

      final com.test.A this$0; //这就是指向外围的成员

      com.test.A$B(com.test.A); //这个默认构造方法和你想象的不一样吧

    }

    那么这种情况下,static代码块肯定是不行。

    以上就是java内部类实例化方法及出错解决,可以说虽然我们对内部类进行实例化,但是在static上面会出现错误,这里要结合内部类的参数进行理解,大家在使用时不要忽略这一点。

    专题推荐:java内部类实例化
    上一篇:java内部类的特性分析 下一篇:java多线程中的回调运用

    相关文章推荐

    • java中内部类是什么意思• java成员内部类的内容介绍• 局部内部类在java中的使用注意点• java中匿名内部类的内容理解• 静态内部类在java的单例用法• java内部类的特性分析

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网