Class.newInstance()

来源:互联网 发布:淘宝返现在哪里查看 编辑:程序博客网 时间:2024/05/21 17:47

llegalAccessException 权限不足异常,构造方法的权限修饰符,private本类可以调用  默认权限,包访问权限;protected 包权限和子类访问权限 public公共访问权限

只有包含默认构造器(隐式的和显示的无参构造方法)的对象才能使用newInstance()方法。

但也会出现异常,当默认构造器访问权限不足(会报安全权限异常),基本类型.getClass().newInstance()会报实例化异常

package com.tkij.chapter14.Class;public class Toy {Toy(){};//默认构造器,如果不带默认构造器,则不能使用newInstance();创建对象。Toy(int i){};public static  Toy getInstance(){return new Toy();}public void print(){System.out.println("你访问到我了!");}}package com.tkij.chapter14.Class.GeneralizationClass;public class GeneralizationClass {public static void createInstance(Class cc){try {System.out.println("类的名称:"+cc.getSimpleName());cc.newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {Class[] cs={Toy.class,Math.class,Integer.class,int.class,char[].class};for(Class cc:cs){createInstance(cc);}}}

上面的main方法中创建了Class数组,第一个元素Toy.class,由于Toy类和GeneralizationClass类不在同一个包内,而Toy的默认构造器是包访问权限,所以会出现访问权限异常,只有声明Toy类的默认构造器为public才会执行newInstance()方法。

第二个元素是Math.class,Math类的默认构造器也不可访问,也会报访问权限异常,而第三个元素包装类Integer.class,由于Integer类没有默认构造器,所以会报实例化对象异常,第四个元素int.class,由于int是基本类型,不是对象,也就没有构造器,所以会报实例化异常,第五个元素char[].class,char数组虽然是对象,但是也没有默认构造函数,所以会报实例化异常.

欢迎大家指正。


原创粉丝点击