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

欢迎大家指正。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值