品易云推流 关闭
文章详情页
文章 > java基础 > java内部类实例化方法及出错解决

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

头像

小妮浅浅

2021-02-23 10:17:543851浏览 · 0收藏 · 0评论

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

1.内部类实例化方法

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

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方法,依然是不能运行的。内部类有一个隐式的成员指向外部对象,在构造的时候赋值。所以普通的类默认构造方法是无参的,但是内部类的默认构造方法有一个参数,这个参数就是为了给指向外围对象的成员属性初始化。

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上面会出现错误,这里要结合内部类的参数进行理解,大家在使用时不要忽略这一点。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

底部广告图