反射详解-通过Class实例化具体类的对象(无参数构造)

国际惯例直接上代码

package com.riadu.test;

/**
 * 手机模型
 * @author www.riadu.com
 * @date 2012-07-25
 */
public class Mobile {
	
	private String size;	//型号
	private String factory;	//厂商
	
	public Mobile(){
		
	}
	
	public String getSize() {
		return size;
	}
	
	public void setSize(String size) {
		this.size = size;
	}
	
	public String getFactory() {
		return factory;
	}
	
	public void setFactory(String factory) {
		this.factory = factory;
	}
	
}


测试类:

package com.riadu.test;

/**
 * 测试类
 * @author www.riadu.com
 * @date 2012-07-25
 */
public class Client3 {
	
	public static void main(String[] args) {
		Class<?> mob = null;
		try {
			mob = Class.forName("com.riadu.test.Mobile");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Mobile mobile = null;
		try {
			//通过newInstance()实例化对象 通过无参构造实例化对象
			mobile = (Mobile) mob.newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		mobile.setFactory("SAMSUNG");
		mobile.setSize("I9000");
		System.out.println(mobile.getFactory()+":"+mobile.getSize());
	}
	
}


输出结果:SAMSUNG:I9000

API详解:

newInstance

public T newInstance()
              throws InstantiationException,
                     IllegalAccessException
创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。

注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。

返回:
此对象所表示的类的一个新分配的实例。
抛出:
IllegalAccessException - 如果该类或其 null 构造方法是不可访问的。
InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError - 如果该方法引发的初始化失败。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值