Java知识点总结(反射-获取类的信息)
@(Java知识点总结)[Java, 反射]
应用反射的API,获取类的信息(类的名字、属性、方法、构造器等)
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test02 {
// 获取类名
private static void getName(Class clazz){
String name = clazz.getName();
System.out.println(name); // com.gs.Student 类的全路径名称
String simpleName = clazz.getSimpleName() ;
System.out.println(simpleName); // Student 类名
}
// 获取属性信息
private static void getFields(Class clazz){
Field[] fields = clazz.getFields() ; // 只能获取 public 的属性
for (Field f : fields) {
System.out.println(f); // public double com.gs.Student.score
}
Field[] declaredFields = clazz.getDeclaredFields() ; // 获取所有的属性
for (Field df : declaredFields) {
System.out.println(df);
}
try {
Field field = clazz.getField("score"); //根据属性名称获取public 属性
System.out.println(field);
Field declaredField = clazz.getDeclaredField("name");
System.out.println(declaredField); //根据属性名称获取 private 属性
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
// 获取方法信息
public static void getMethod(Class clazz){
Method[] methods = clazz.getMethods() ; //获取所有的 public 方法,包括父类的方法
for (Method m : methods) {
System.out.println(m);
}
System.out.println("~~~~~~~~~~~");
Method[] declaredMethods = clazz.getDeclaredMethods(); // 获取本类声明的所有的方法
for (Method dm : declaredMethods) {
System.out.println(dm);
}
try {
Method m = clazz.getMethod("getName", null); //获取指定名字的方法,后面的形参表示获取方法的参数类类型
System.out.println(m);
//如果方法有参,则必须传递参数类型对应的 Class 对象
Method dm = clazz.getDeclaredMethod("setName", String.class);
System.out.println(dm);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
// 获取构造方法信息
public static void getConstructor(Class clazz){
try {
// 获取指定名称的构造方法
Constructor c = clazz.getDeclaredConstructor(int.class,String.class);
System.out.println(c);
//获取所有构造方法
Constructor[] cs= clazz.getConstructors() ;
for (Constructor constructor : cs) {
System.out.println(constructor);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String path = "com.gs.Student";
try {
Class clazz = Class.forName(path);
//getName(clazz);
//getFields(clazz);
//getMethod(clazz);
getConstructor(clazz);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。