文章目录
- 1.相关准备
- 2.导航图
- 3. 相关的方法
- ----------------------------------------------类------------------------------------------------------
- 1 类的修饰符
- 2 类名
- -----------------------------------------------属性-----------------------------------------------------
- 3. 属性修饰符 4. 属性类型 5.属性名字
- ----------------------------------------------构造方法---------------------------------------------
- 6.构造方法修饰符 7.构造方法名字
- 8 构造方法参数类型 9.构造方法参数名
- ----------------------------------------------普通方法---------------------------------------------
- 10普通方法修饰符 11普通方法返回值类型 12普通方法名 13普通方法参数的修饰符 14普通方法名
1.相关准备
一个User类足以。
package com.sdnu.demo;
/**
* 用户
*
* @author Beyong
* @date 2024/03/23 19:48
**/
public class User {
String name;
int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public void method1(int id) {
System.out.println("方法一:" + id);
}
}
测试类
package com.sdnu.demo;
import java.lang.reflect.Modifier;
/**
* 反射测试
*
* @author Beyong
* @date 2024/03/23 19:47
**/
public class Test {
public static void main(String[] args){
try{
Class user = Class.forName("com.sdnu.demo.User");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.导航图
我们知道反射机制能帮助 我们操作字节码文件,所以如下将总结一些相关的方法去一一获取类的相关信息。
3. 相关的方法
注意小标题与方法的对应 。
----------------------------------------------类------------------------------------------------------
1 类的修饰符
int modifierNumber = user.getModifiers();
System.out.println(Modifier.toString(modifierNumber));
对象的getModifiers(),会返回一个数字,该数字代表一个修饰符,我们可以将该数字作为参数传给Modifier.toString(),这个方法会返回修饰符的字符串形式。
2 类名
这个没啥好说的。
-----------------------------------------------属性-----------------------------------------------------
方法 | 作用 |
---|---|
getField(String name) | 返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。 |
getFields() | 返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共成员字段。 |
getDeclaredField(String name) | 返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。 |
getDeclaredFields() | 返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。 |
Field[] fields = user.getFields();
for(Field field : fields) {
System.out.println(field);
}
Field[] fields = user.getDeclaredFields();
for(Field field : fields) {
System.out.println(field);
}
System.out.println(user.getField("name"));
System.out.println(user.getDeclaredField("age"));
3. 属性修饰符 4. 属性类型 5.属性名字
Field[] fields = user.getDeclaredFields();
for(Field field : fields) {
System.out.println(field);//整个属性
System.out.println(Modifier.toString(field.getModifiers()));//属性修饰符
System.out.println(field.getName());//属性名字
System.out.println(field.getType());//属性类型
System.out.println(field.getType().getSimpleName());//属性类型简化
}
----------------------------------------------构造方法---------------------------------------------
Constructor[] declaredConstructors = user.getDeclaredConstructors();
for(Constructor constructor : declaredConstructors) {
System.out.println(constructor);
}
6.构造方法修饰符 7.构造方法名字
for(Constructor constructor : declaredConstructors) {
System.out.println(constructor);
System.out.println(Modifier.toString(constructor.getModifiers()));
System.out.println(constructor.getName());
}
8 构造方法参数类型 9.构造方法参数名
for(Constructor constructor : declaredConstructors) {
Parameter[] parameters = constructor.getParameters();
for(Parameter parameter : parameters) {
System.out.println("----------" + parameter);
System.out.println(parameter.getType());
System.out.println(parameter.getName());
}
}
----------------------------------------------普通方法---------------------------------------------
10普通方法修饰符 11普通方法返回值类型 12普通方法名 13普通方法参数的修饰符 14普通方法名
Method[] declaredMethods = user.getDeclaredMethods();
for(Method method : declaredMethods) {
System.out.println(method);
System.out.println(Modifier.toString(method.getModifiers()));
System.out.println(method.getReturnType());
System.out.println(method.getName());
Parameter[] parameters2 = method.getParameters();
for(Parameter parameter : parameters2) {
System.out.println(parameter);
System.out.println(parameter.getType());
System.out.println(parameter.getName());
}
}
普通方法与构造方法类似,只是名字由constructor换成method。而且普通方法多了返回值类型。