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

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

1.内部类实例化方法

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

publicclassTest{
publicstaticvoidmain(String[]args){
Parentp=newParent();
Parent.Inneri=p.newInner();
i.print();
}

}

classParent{
classInner{
publicvoidprint(){
System.out.println("xxx");
}
}
}

2.实例化出错解决

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

classA{
classB{}
}

$javap-pa.b
Warning:Binaryfilea.bcontainscom.test.A$B
Compiledfrom"Test.java"
classcom.test.A$B{
finalcom.test.Athis$0;//这就是指向外围的成员
com.test.A$B(com.test.A);//这个默认构造方法和你想象的不一样吧
}

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

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容