讲解Java中如何构造内部类对象及访问对象.docx
上传人:努力****骞北 上传时间:2024-09-13 格式:DOCX 页数:7 大小:12KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

讲解Java中如何构造内部类对象及访问对象.docx

讲解Java中如何构造内部类对象及访问对象.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

讲解Java中如何构造内部类对象及访问对象讲解Java中如何构造内部类对象及访问对象通过反射构造内部类对象首先在javalang包下写一个包含内部类的类:packagejavalang;publicclassOuter{publicstaticclassInner1{}}注意这个类是publicstatic,后面我们慢慢把这些修饰符去掉。要想通过反射来创建Inner1对象,首先要获得Inner1的Class对象。我们在Outer中写上main方法:publicclassOuter{publicstaticclassInner1{}publicstaticvoidmain(String[]args){System.out.println(Inner1.class);}}输出结果:classjavalang.Outer$Inner1然后我们试一下这个类名对不对:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1"));}运行一下,没错。然后就是用它来创建对象。创建对象要靠构造方法。这个类有没有构造方法呢?我们可以这么写:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getConstructors().length);}运行一下,输出1。看来有。然后看看这个构造方法是什么样子的:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getConstructors()[0]);}输出结果:publicjavalang.Outer$Inner1()。这就是缺省构造方法嘛。所以我们可以这样写:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getConstructors()[0].newInstance();}输出结果:javalang.Outer$Inner1@ca0b6。这说明执行成功了。接下来我们把Inner的public关键字去掉,然后再运行。结果报错了:Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:0这说明没有找到构造方法。真的没有吗?我们把main方法改回来:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getConstructors().length);}输出结果:0。真的没有构造方法吗?其实不是,只是构造方法不是公开的。这时我们必须用getDeclaredConstructors()来获得:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getDeclaredConstructors().length);}输出结果:1。这就把构造方法找到了。然后我们继续调用这个构造方法:publicstaticvoidmain(String[]args)throwsException{System.out.println(Class.forName("javalang.Outer$Inner1").getDeclaredConstructors()[0].newInstance());}输出结果:javalang.Outer$Inner1@ca0b6。现在我们可以用反射来构造非公开内部类的对象了。接下来,我们再把static关键字去掉。这时候报错了:Exceptioninthread"main"java.lang.IllegalArgumentException:wrongnumberofargum