Class.newInstance()

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数组虽然是对象,但是也没有默认构造函数,所以会报实例化异常.

欢迎大家指正。


你可能感兴趣的:(Class.newInstance())