反射基本用法
1.构造方法无参型
1.1构建无构造方法类
public class ReflectServiceImpl {
public void sayHello(String name){
System.err.println("Hello"+name);
}
}
1.2构建反射生成对象
public ReflectServiceImpl getInstance() {
ReflectServiceImpl object=null;
try {
//生成一个对象然后将其返回。下面这行代码的目的就是给类加载器注册一个ReflectServiceImpl的全限定名,然后通过newInstance()初始化
object =(ReflectServiceImpl)
Class.forName("com.review.ReflectServiceImpl").newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException ex) {
ex.printStackTrace();
}
return object;
}
测试
Hello李四
2 .构造函数有参型
2.1//加入构造参数类型ReflectServiceImpl2
public class ReflectServiceImpl2 {
private String name;
public ReflectServiceImpl2(String name) {
this.name=name;
}
public void sayHello(){
System.err.println("Hello"+name);
}
}
2.2构建反射生成对象:
public ReflectServiceImpl2 getInstance() throws IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
ReflectServiceImpl2 object=null;
try {
/*使用如下方法将函数衍射生成对象
* 先用过forname加载到类的加载器。通过getConstructor方法,他的参数可以是多个定义String.class,意为有且只有一个参数
* String方法生成对象,只是newinstance方法也多了一个参数李四而已。
* 也就是object = new ReflectServiceImpl2("李四")
* */
object =(ReflectServiceImpl2)
Class.forName("com.review.ReflectServiceImpl2").getConstructor(String.class).newInstance("李四");
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException ex) {
ex.printStackTrace();
}
return object;
}
方法型
Object returnObj = null;
ReflectServiceImpl target = new ReflectServiceImpl();
Method method = ReflectServiceImpl.class.getMethod("sayHello", String.class);
returnObj = method.invoke(target, "李四");