理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助。 下面是关于class类使用、基本数据类、获取类成员变量、获取类构造方法、获取类的方法的coding实例
@Test
public void classReflect(){
try {
//一、class类使用
//1.知道类名(每个类都有一个隐含的静态成员变量class)
Class reflectClass = LambdaTest.class;
LambdaTest instance = (LambdaTest)reflectClass.newInstance();
//2.知道对象实例时
Class reflectClass2 = instance.getClass();
LambdaTest instance2 = (LambdaTest)reflectClass2.newInstance();
//3.知道类的路径
Class reflectClass3 = Class.forName("LambdaTest");
LambdaTest instance3 = (LambdaTest)reflectClass3.newInstance();
instance.runnableTest();
instance2.innerClaseTest();
instance3.runnableTest();
System.out.println(Lambda.class.isInstance(instance3));
//二、基本数据类型
Class c1 =int.class;//int的类类型
Class c2 =String.class;//String类的类类型,可以理解为编译生成的那个String.class字节码文件,
Class c3 =double.class;
Class c4 =Double.class;
Class c5 =void.class;
//三、获取类成员变量
Field[] fs = reflectClass.getDeclaredFields();
for (Field field : fs){
//1.获取成员变量类型
Class fieldType = field.getType();
String typeName = fieldType.getTypeName();
//2.获取成员变量名
String fieldName = field.getName();
System.out.println(typeName+ " " + fieldName);
}
//四、获取类构造方法
Constructor[] cs = reflectClass.getDeclaredConstructors();
for (Constructor constructor : cs){
System.out.print(constructor.getName()+"(");
//获取构造函数参数类型
Class[] paramTypes = constructor.getParameterTypes();
for (Class class1 : paramTypes){
System.out.print(class1.getName()+ ",");
}
System.out.println(")");
}
//五、获取方法
Method[] methods = reflectClass.getDeclaredMethods();
for (Method method : methods){
System.out.print("方法" + method.getName()+"(");
//获取构造函数参数类型
Class[] paramTypes = method.getParameterTypes();
for (Class class1 : paramTypes){
System.out.print(class1.getName()+ ",");
}
System.out.println(")");
}
//获取指定方法
Class<?>[] parameterTypes = new Class[]{ String.class, int.class};
Method method = reflectClass.getDeclaredMethod("methodTest", parameterTypes);
System.out.println("指定方法名" + method.getName());
} catch (IllegalAccessException e){
} catch (InstantiationException e){
} catch (ClassNotFoundException e){
} catch (NoSuchMethodException e){
}
}
网友评论