Java之反射学习【案例】

自己写的一个小案例,根据这个案例可以熟悉java反射的一些方法,同时更重要的是能帮助我们理解spring的IOC。

 

目录结构:【注:配置文件在src目录下】

Cat类代码:

package demo3;

public class Cat {
    public void Mi(){
        System.out.println("咪咪咪");
    }
}

Dog类代码:

package demo3;

public class Dog {
    public void Wang(){
        System.out.println("汪汪汪");
    }
}

测试类代码:【代码注释完整

package demo3;

import com.sun.org.apache.bcel.internal.util.ClassLoader;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws Exception {
        // 创建Properties对象
        Properties properties = new Properties();
        // 创建一个类加载器对象
        ClassLoader classLoader = new ClassLoader();
        // 将配置文件信息转换为字节码
        InputStream in = classLoader.getResourceAsStream("myPro.properties");
        // 加载配置文件
        properties.load(in);
        // 获取配置文件中的内容
        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");

        // 创建Dog类对象  【从这里开始就用到了反射的内容】
        Class cls = Class.forName("demo3.Cat");
        // 获取一个dog对象
        Object object = cls.newInstance();
        // 获取dog中的方法
        Method method = cls.getMethod(methodName);
        // 执行方法
        method.invoke(object);
    }
}

配置文件内容:

className = demo3.Cat
methodName = Mi

 

执行结果:

 

 

如果要执行Dog中的方法需要将配置文件中的内容修改为如下内容,同时将测试类中的Class.forName()修改为Dog类的全类名:

// 配置文件修改:
        className = demo3.Dog
        methodName = Wang

//测试类修改:
        //创建Dog类对象
        Class cls = Class.forName("demo3.Dog");

执行结果:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章