相信大多数读者看到这句官方自以为很简单其实很深奥的解释都会一脸茫然。到底什么是反射呢,反射到底是什么呢?
其实,了解接口的特性,以及会读取配置文件的人很容易就能理解什么是反射。
反射,通俗来讲,就是动态改变类。
例如:当我们用到配置文件时,配置的大多数都是一些参数。而反射,其实就是配置类,像接口一样拥有可扩展性。
反射的简单应用:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestReflection {
public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
String str = "T";
Class c = Class.forName(str);
Object o = c.newInstance();
Method[] methods = c.getMethods();
for(Method m : methods){
//System.out.println(m.getName());
if(m.getName().equals("mm")){
m.invoke(o);
}
if(m.getName().equals("m1")){
m.invoke(o, 1, 2);
Class[] parameters = m.getParameterTypes();
for(Class p : parameters){
System.out.println(p);
}
}
if(m.getName().equals("getS")){
Class returnType = m.getReturnType();
System.out.println(returnType);
}
}
}
}
class T{
static{
System.out.println("T loaded!");
}
public void mm(){
System.out.println("mm invoked!");
}
int i;
String s;
public void m1(int i, int j){
this.i = i + j;
System.out.println(this.i);
}
public String getS(){
return s;
}
}