類加載-雜

Class c=class.forName("com.pdd")           //獲取類引用
實例.getClass();
類.class;                            
c.newInstance();                                      //獲取類對象
(1).通過反射來創建類的對象. 
通過反射來創建對象有以下以下兩種方式: 
1).使用Class對象的newInstance()方法來創建該Class對象對應的實例,這種方式要求該Class對象對應的類有默認構造器,
而執行 newInstance()方法實際上是利用默認構造器來創建該類的實例,所以也就需要對應類要聲明一個默認的構造器.如下面的代碼所示:


import java.util.*;
import java.io.*;


///使用Class對象創建對應類的實例: 方式1
public class ObjectPool {


    ///定義一個對象池,前面是對象名,後面是實際對象
    private Map<String,Object> objectPool = new HashMap<>();


    ///根據傳入的字符串類名,創建一個對象
    private Object createObject(String name) throws InstantiationException,ClassNotFoundException,IllegalAccessException
    {
          Class<?> clazz= Class.forName(name);
          return clazz.newInstance();
    }


    //根據指定文件來初始化對象池
    public void initPoo(String fileName) throws InstantiationException,ClassNotFoundException,IllegalAccessException
    {
        try( FileInputStream fis = new FileInputStream(fileName)){


            Properties props = new Properties();
            props.load(fis);
            //每取出一對key-value對,就根據value創建一個對象
            for(String name:props.stringPropertyNames()){
                objectPool.put(name, createObject(props.getProperty(name)));
            }
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }


    public Object getObject(String name){
        return objectPool.get(name);
    }


    public static void main(String[] args) throws Exception 
    {
        ObjectPool po =new ObjectPool();
        po.initPoo("/Test/obj.txt");
        System.out.println(po.getObject("a"));
        System.out.println(po.getObject("b"));
    }
}






Class<? extends T>(class.forname())
<T>:定義一個泛型
T :定義方法返回的類型是之前定義的泛型類型
Class<? extends T> 這個是定義參數的類型爲Class, 
但是這個Class必須是和之前定義的泛型有繼承關係的。?表示任意類的Class,不過後面跟了extends 表明了條件。

instanceof  和isinstance 比較的是類  而 equals和== 比較的是類對象
發佈了25 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章