问题导入
假如要调用一个类的所有方法,而这个类有1000个方法,该怎么办???
解决方案:1.类名.方法名(太麻烦了) 2.使用java中的反射机制(推荐使用getDeclaredMethod()方法)
一、反射机制概念
在 java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并 且对于任意一个对象,都能够调用它的任意一个方法:这种动态获取信息以及动态调用对象方法的功 能成为 Java 语言的反射机制
二、java反射与方法
像字段一样,我们可以使用Method类提供的各种方法来检查类的不同方法。
-
getMethods() - 返回该类及其超类的所有公共方法
-
getDeclaredMethod() - 返回该类的所有方法
-
getName() - 返回方法的名称
-
getModifiers() - 以整数形式返回方法的访问修饰符
-
getReturnType() - 返回方法的返回类型
三、方法反射代码演示
具体代码:
Dog实体类
package com.zpark.dao;
/**
* @author YS
* @version 1.0
* @Date 2024/5/29 22:30
*/
public class Dog {
public void display() {
System.out.println("我是一只小狗");
}
public void eat() {
System.out.println("吃骨头");
}
public void makeSound() {
System.out.println("汪汪汪~");
}
}
RefectTest测试类
package com.zpark.test;
import com.zpark.dao.Dog;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
/**
* @author YS
* @version 1.0
* @Date 2024/5/29 22:32
*/
public class ReflectTest {
public static void main(String[] args) {
try {
// 创建对象
Dog dog = new Dog();
// 创建class对象
Class<? extends Dog> aClass = dog.getClass();
// getDeclaredMethods() - 返回该类的所有方法
Method[] methods2 = aClass.getDeclaredMethods();
for (Method method : methods2) {
// 调用里面的方法
method.invoke(dog);
// 获取方法的名称
System.out.println("方法名称: " + method.getName());
//获取方法的访问修饰符
int modifier = method.getModifiers();
System.out.println("修饰符: " + Modifier.toString(modifier));
//获取方法的返回类型
System.out.println("返回方法的类型: " + method.getReturnType());
System.out.println(" "); }
// getMethods() - 返回该类及其超类的所有公共方法
Method[] methods = aClass.getMethods();
for (Method method : methods) {
// 获取方法的名称
System.out.println("方法名称: " + method.getName());
//获取方法的访问修饰符
int modifier = method.getModifiers();
System.out.println("修饰符: " + Modifier.toString(modifier));
//获取方法的返回类型
System.out.println("返回方法的类型: " + method.getReturnType());
System.out.println(" "); }
}catch (Exception e){
System.out.println(e.toString());
}
}
}
四、拓展
动态创建对象、动态访问和修改字段、动态处理注解....
标签:反射,java,System,println,方法,method,out From: https://blog.csdn.net/weixin_67577387/article/details/139339529