反射_案例

反射_案例

反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1.可以在程序运行过程中,操作这些对象。2.可以解耦,提高程序的可扩展性。
获取class对象的方式:
1. class.forName("全类名")∶将字节码文件加载进内存,返回class对象*多用于配置文件,将类名定义在配置文件中。读取文件,加载类
2.类名.class:通过类名的属性class获取
*多用于参数的传递
3.对象.getclass() : getclass()方法在object类中定义着。
*多用于对象的获取字节码的方式
*结论︰
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪
-种方式获取的class对象都是同一个。

Class对象功能:

  获取功能:

  1.获取成员变量们

  2.获取构造方法们

  3.获取成员方法们

  4.获取类名

复制代码
import domain.Person;
 
import java.lang.reflect.Method;
 
public class ReflectDemo4 {
    public static void main(String[] args) throws Exception {
 
        //0、获取Person的Class对象
        Class personClass = Person.class;
 
        //获取类名
        String classname = personClass.getName();
        System.out.println(classname);
    }
}
复制代码

运行结果:

 

 

需求:写一个类,可以帮我们创建任意类的对象,并且执行其中任意方法

实现:1、配置文件 2、反射

步骤:

1、将需要创建的对象的全类名和需要执行的方法定义在配置文件中

2、在程序中加载读取配置文件

3、使用反射技术来加载类的文件进内存

4、创建对象

5、执行方法

 Student类:

public class Student {
 
    public void sleep(){
        System.out.println("sleep...");
    }
}

 测试类:

复制代码
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.Enumeration;
import java.util.Properties;
 
 
public class ReflectTest {
    public static void main(String[] args) throws Exception {
 
        //1、加载配置文件
        //1.1创建Properties对象
        Properties pro = new Properties();
        //1.2加载配置文件,转换为一个集合
        //1.2.1获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("pro.properties");
        pro.load(is);
 
        //2、获取配置文件中定义的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");
 
        //3、加载该类进内存
        Class cls = Class.forName(className);
        //4、创建对象
        Object obj = cls.getConstructor().newInstance();
        //5、获取方法对象
        Method method = cls.getMethod(methodName);
        //6、执行方法
        method.invoke(obj);
    }
}
复制代码

配置文件:.properties后缀,可在不改动代码的前提下,改配置文件

 

运行结果:

 

 

 配置文件:运行上面的Person类,改配置文件

 

 

 

运行结果:

 

posted @   ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示