1、反射的概念:主要是指程序可以访问、检测和修改其自身状态或行为的一种能力。
2、java反射机制主要提供了以下功能:
在运行是判断任意一个对象所属的类;在运行是构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法。通过反射甚至可以调用到private的方法;生成动态代理。
3、这是java反射的所有方法的应用:源码
import java.lang.reflect.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test2 {
public static void main(String[] args) {
try {
Class clazz = Class.forName("java.util.ArrayList");
System.out.println(clazz.getName());
String packageName = clazz.getPackage().getName();
System.out.println(packageName);
int mod = clazz.getModifiers();
String ModifiersName = Modifier.toString(mod);
System.out.println(ModifiersName);
Class superClazz = clazz.getSuperclass();
System.out.println(superClazz);
Class[] interfaces = clazz.getInterfaces();
for (Class a : interfaces) {
System.out.println(a.getName());
}
System.out
.println("*************************************************");
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String modifier = Modifier.toString(field.getModifiers());
Class type = field.getType();
String name = field.getName();
if (type.isArray()) {
String arrType = type.getComponentType().getName() + "[]";
System.out.println(" " + modifier + " " + arrType + " "
+ name + ";");
} else {
System.out.println(" " + modifier + " " + type + " "
+ name + ";");
}
}
System.out
.println("*************************************************");
Constructor[] constructors = clazz.getDeclaredConstructors();
for (Constructor constructor : constructors) {
String name = constructor.getName();
String modifier = Modifier.toString(constructor.getModifiers());
System.out.print(" " + modifier + " " + name + "(");
Class[] paramType = constructor.getParameterTypes();
for (int i = 0; i < paramType.length; i++) {
if (i > 0) {
System.out.println(",");
}
if (paramType[i].isArray()) {
String para = paramType[i].getComponentType().getName();
System.out.print(para);
} else {
String para = paramType[i].getName();
System.out.print(para);
}
}
System.out.println(")");
}
System.out
.println("*************************************************");
Method[] methods=clazz.getDeclaredMethods();
for(Method method:methods){
String name=method.getName();
String modifier=Modifier.toString(method.getModifiers());
Class returnType=method.getReturnType();
if(returnType.isArray()){
String arrType=returnType.getComponentType().getName()+"[]";
System.out.print(" "+modifier+" "+arrType+" "+name+"( ");
}else{
System.out.print(" "+modifier+" "+returnType+" "+name+"( ");
}
Class[] paramTypes = method.getParameterTypes();
for (int i = 0; i < paramTypes.length; i++) {
if (i > 0) {
System.out.println(",");
}
if (paramTypes[i].isArray()) {
String para = paramTypes[i].getComponentType().getName();
System.out.print(para);
} else {
String para = paramTypes[i].getName();
System.out.print(para);
}
}
System.out.println(")");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、java中反射的方法并不多主要就是以上几种:
主要有java.lang.Class类和java.lang.reflect包中的Filed、Constructor、Method、Array类。