国际惯例直接上代码
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,并满足下列任一条件:- 调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝创建该类的新实例 - 调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
- 调用