国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

反射的作用—>實現框架的功能

2019-11-14 22:44:12
字體:
來源:轉載
供稿:網友
反射的作用—>實現框架的功能
  • 框架與框架要解決的核心問題
    • 我們做房子賣給用戶住,用于用戶自己安裝門窗和空調,我做的房子就是框架,用戶需要使用我的框架,把門窗插入進我提供的框架中。框架與工具類有區別,工具類被用戶的類調用,而框架則是調用用戶提供的類。
  • 框架要解決的核心問題
    • 我在寫框架(房子)時,你這個用戶可能還在上小學,還不會寫程序呢?我寫的框架程序怎樣能調用到你以后寫的類呢?

Class.forName(classNameStr).getMethod(methodName).invoke(obj,Class)

    • 因為在寫程序時無法知道要被調用的類名,所以,在程序中無法直接new某個類的實例對象了,而要用反射方式來做。
  • 綜合案例
    • 先直接用new語句創建ArrayList和HashSet的實例對象,演示用eclipse自動生成ReflectPoint類的equals和hashCode方法,

比較兩個集合的運行結果差異。

    • 然后改為采用配置文件加載反射的方式創建ArrayList和HashSet的實例對象,比較觀察運行結果差異。
    • 引入了eclpse對資源文件的管理方式的講解。
  • PRoperties類
    • Properties對象就等效于一個HashMap,內存里裝的是<key,value><key,value><key,value>
    • 在HashMap的基礎上擴展了一些功能,
      • ①可以把內存里的鍵值對存到硬盤里面

      • ② 可以在初始化時把文件里的鍵值對加載進properties對象里來。
package com.itcast.day1;import java.io.FileInputStream;import java.io.InputStream;import java.util.Collection;import java.util.HashSet;import java.util.Properties;import java.util.ArrayList;public class ReflectTest3 {    public static void main(String[] args)throws Exception {        InputStream ips = new FileInputStream("config.properties");        Properties props=new Properties();        props.load(ips);//1 硬盤加載到內存 ,2從內存中加載到props對象中         ips.close();//關閉是指釋放ips加載的資源,ips對象不會隨著close方法的執行而被JVM回收如果不關閉,則有小小的內存泄露 。         String className= props.getProperty("className");        System.out.println(className);        Collection collections=(Collection)Class.forName(className).newInstance();        ReflectPoint pt1=new ReflectPoint(3,3);        collections.add(pt1);//放入    }}

config.properties文件放在哪里呢?

相對當前工作路徑,在實際項目中,幾乎沒有這么干的!

imageimage

實際項目一定要用絕對路徑,但絕對路徑不是硬編碼!

實際項目中應當:

config.properties文件在硬盤上的存放位置由用戶指定,用戶可配置“主目錄”/config.properties。

getRealPath();// 主目錄/config.properties

  • 類加載器--ClassLoader

類加載器通常用來加載 *.class文件,既然 .class文件都可以加載進來(強大!),那么加載其他配置文件,豈不是小菜一碟!就看愿不愿意加載了。

RefectTest3.class.geteClassLoader().getResourceAsStream()//適用于只讀配置文件時

框架的配置文件都放在類路徑下,原因是框架內部讀取配置文件都是在采用類加載器加載方式,而類加載器加載文件時會從類路徑下查找。

    • 類加載器加載config.properties其中config.propertis存放在類路徑下
package com.itcast.day1;import java.io.File;import java.io.InputStream;import java.net.URL;import java.util.Collection;import java.util.Properties;public class ReflectTest3 {    public static void main(String[] args)throws Exception {        //在類路徑下找文件,轉換成輸入流        InputStream ips=null;//        ips=ReflectTest3.class.getClassLoader().getResourceAsStream//                ("com"+File.separator+"itcast"+File.separator+"day1"+File.separator+"config.properties");//        ips=ReflectTest3.class.getResourceAsStream("config.properties");//在本包下找        //Class提供了一種更簡潔的方式來加載配置文件(和class.newInstance方法省略了得到構造器類似),在類路徑的根目錄下開始找        ips=ReflectTest3.class.getResourceAsStream            ("/"+"com"+File.separator+"itcast"+File.separator+"day1"+File.separator+"config.properties");                Properties props=new Properties();        props.load(ips);//1 硬盤加載到內存 ,2從內存中加載到props對象中        ips.close();//關閉是指釋放ips加載的資源,ips對象不會隨著close方法的執行而被JVM回收如果不關閉,則有小小的內存泄露 。        String className= props.getProperty("className");        System.out.println(className);        Collection collections=(Collection)Class.forName(className).newInstance();        ReflectPoint pt1=new ReflectPoint(3,3);        collections.add(pt1);//放入                System.out.println(collections.size());    }}

image


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萍乡市| 广南县| 武宣县| 东辽县| 九台市| 周口市| 万源市| 谢通门县| 黄梅县| 全州县| 会泽县| 格尔木市| 隆子县| 辛集市| 巧家县| 全南县| 陇南市| 石门县| 玉田县| 珲春市| 蓝田县| 手游| 临沭县| 凯里市| 江城| 手游| 泊头市| 新绛县| 阿勒泰市| 石林| 贵港市| 赤峰市| 灵丘县| 茂名市| 沛县| 远安县| 获嘉县| 泸定县| 南川市| 祁阳县| 普格县|