黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 淺談Java反射的優(yōu)缺點

淺談Java反射的優(yōu)缺點

更新時間:2020-11-23 17:51:00 來源:動力節(jié)點 瀏覽3577次

Java反射是一種能夠在程序運行時動態(tài)訪問、修改某個類中任意屬性(狀態(tài))和方法(行為)的機制(包括private實例和方法),java反射機制提供了以下幾個功能:在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法。根據這些功能,本我們我們就來談一談Java反射的優(yōu)缺點

一、Java反射的優(yōu)點

1.增加程序的靈活性,避免將程序寫死到代碼里。

例:定義了一個接口,實現這個接口的類有20個,程序里用到了這個實現類的地方有好多地方,如果不使用配置文件手寫的話,代碼的改動量很大,因為每個地方都要改而且不容易定位,如果你在編寫之前先將接口與實現類的寫在配置文件里,下次只需改配置文件,利用反射(java API已經封裝好了,直接用就可以用 Class.newInstance())就可完成。

2.代碼簡潔,提高代碼的復用率,外部調用方便

package cn.yonyong.reflection.testdemo;
interface Fruit { //水果接口
  public void eat() ; //吃水果
}

class Apple implements Fruit{ //定義蘋果
  public void eat() {
    System.out.println("**吃蘋果。");
  }
}

class Orange implements Fruit{
  public void eat() {
    System.out.println("**吃橘子。");
  }
}

class Factory{
  public static Fruit getInstance(String className){
    Fruit fruit = null ;
    try{
      fruit = (Fruit) Class.forName(className).newInstance() ;
    }catch(Exception e ){
      e.printStackTrace() ;
    }
    return fruit ;
  }
}

public class FactoryDemo{
  public static void main(String args[]){
  //通過工廠類取得接口實例,傳入完整的包.類名稱
    Fruit f = Factory.getInstance("cn.yonyong.reflection.testdemo.Apple") ;
    if(f!=null){ //判斷是否取得接口實例
      f.eat() ;
   }
  }
}

如果不用反射,那么我們如果再加一個西瓜類,就得在Factory里判斷,每添加一個類都要修改一次Factory,但用了反射只用在調用的時候傳入完整的類名就可完成。結果:用反射,修改一處代碼;不用反射,修改兩處代碼。

3.對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法

二、Java反射的缺點

1.性能問題

使用反射基本上是一種解釋操作,用于字段和方法接入時要遠慢于直接代碼。因此Java反射機制主要應用在對靈活性和擴展性要求很高的系統框架上,普通程序不建議使用。

反射包括了一些動態(tài)類型,所以JVM無法對這些代碼進行優(yōu)化。因此,反射操作的效率要比那些非反射操作低得多。我們應該避免在經常被 執(zhí)行的代碼或對性能要求很高的程序中使用反射。

2.使用反射會模糊程序內部邏輯

程序人員希望在源代碼中看到程序的邏輯,反射等繞過了源代碼的技術,因而會帶來維護問題。反射代碼比相應的直接代碼更復雜。

3.安全限制

使用反射技術要求程序必須在一個沒有安全限制的環(huán)境中運行。如果一個程序必須在有安全限制的環(huán)境中運行,如Applet,那么這就是個問題了。

4.內部暴露

由于反射允許代碼執(zhí)行一些在正常情況下不被允許的操作(比如訪問私有的屬性和方法),所以使用反射可能會導致意料之外的副作用--代碼有功能上的錯誤,降低可移植性。反射代碼破壞了抽象性,因此當平臺發(fā)生改變的時候,代碼的行為就有可能也隨著變化。

所以,總的來說,Java反射機制實際上是一把雙刃劍,我們只有熟練掌握Java反射的優(yōu)缺點,才能妥善使用Java反射這一利器,為我們的編程掃清障礙而不至于影響到我們的程序本身。其實,本站的Java基礎教程對Java的反射機制講解的十分透徹,本文也只是借鑒了一部分內容,想深入學習Java反射的小伙伴一定要去看看哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美一级xxxx俄罗斯一级 | 中文字幕另类 | 成 人 动漫在线观看网站网站 | 国内精品免费一区二区观看 | 本道久久综合88全国最大色 | 一级一片| 国产黄色免费 | 亚洲欧美强伦一区二区另类 | free性亚洲 | 拍真实国产伦偷精品 | 成年片人免费www | 男女做羞羞的网站视频 | 99re久久在热线播放最新地址 | 久久丝袜视频 | 看全色黄大色大片免费视频 | 午夜大片免费男女爽爽影院久久 | 欧美在线成人午夜网站 | 一级一级特黄女人精品毛片视频 | 日韩免费高清视频网站 | 精品日韩欧美一区二区三区 | 热99re久久免费视精品频软件 | 欧美视频一区二区三区精品 | 欧美黑人巨大3dvideo | 日本欧美国产精品第一页久久 | 黄色一级大片 | 久久久久香蕉视频 | 自拍 亚洲 欧美 另类 动漫 | 天天做天天干 | 亚洲精品中文字幕乱码无线 | 欧美人与动交tv | 日本一区二区高清不卡 | 日韩精品成人在线 | 国产精品久久久久999 | 精品国产影院 | 中文字幕一区2区 | 色五月天天 | 大黄免费网站 | 全午夜免费一级毛片 | 18级成人毛片免费观看 | 曰b免费视频 | 一区二区三区日韩精品 |