package com.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* 反射获取类,以及对象
* @author Sailing
*
*/
public class TestClassForName{
public static void main(String[] args) throws Exception{
Class<?> clazz = TestClassForName.getClazz1("com.reflect.Person");
//Class<?> clazz = TestClassForName.getClazz2();
//Class<?> clazz = TestClassForName.getClazz3();
TestClassForName.doSomething(clazz);
}
/**
* 根据类的全名,forName方法 获取 【推荐使用】
* @param str
* @return
* @author Sailing
*/
private static Class<?> getClazz1(String str){
Class<?> clazz =null;
try {
clazz = Class.forName(str);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return clazz;
}
/**
* 根据类的 .class方法获取
* @return
* @author Sailing
*/
private static Class<?> getClazz2(){
Class<?> clazz = Person.class;
return clazz;
}
/**
* 根据对象来获取
* @return
* @author Sailing
*/
private static Class<?> getClazz3(){
Person p = new Person();
Class<?> clazz = p.getClass();
return clazz;
}
private static void doSomething(Class<?> clazz) throws InstantiationException, IllegalAccessException{
System.out.println("class---"+clazz);
Object p =TestClassForName.getInstance1(clazz);
//Object p =TestClassForName.getInstance2(clazz);
System.out.println(p);
}
/**
* 由类获取对象
* @param obj
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @author Sailing
*/
private static Object getInstance1(Class<?> clazz) throws InstantiationException, IllegalAccessException{
Object instance = clazz.newInstance();
return instance;
}
private static Object getInstance2(Class<?> clazz){
Constructor<?> cons;
Object instance = null;
try {
cons = clazz.getConstructor(new Class[] {});
try {
instance = cons.newInstance(new Object[]{});
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return instance;
}
}