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");

執行結果:

 

 

 

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