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 block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.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数组虽然是对象,但是也没有默认构造函数,所以会报实例化异常.
欢迎大家指正。