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

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

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

更新時(shí)間:2020-11-23 17:51:00 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3542次

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

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

1.增加程序的靈活性,避免將程序?qū)懰赖酱a里。

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

2.代碼簡潔,提高代碼的復(fù)用率,外部調(diào)用方便

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[]){
  //通過工廠類取得接口實(shí)例,傳入完整的包.類名稱
    Fruit f = Factory.getInstance("cn.yonyong.reflection.testdemo.Apple") ;
    if(f!=null){ //判斷是否取得接口實(shí)例
      f.eat() ;
   }
  }
}

如果不用反射,那么我們?nèi)绻偌右粋€(gè)西瓜類,就得在Factory里判斷,每添加一個(gè)類都要修改一次Factory,但用了反射只用在調(diào)用的時(shí)候傳入完整的類名就可完成。結(jié)果:用反射,修改一處代碼;不用反射,修改兩處代碼。

3.對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法

二、Java反射的缺點(diǎn)

1.性能問題

使用反射基本上是一種解釋操作,用于字段和方法接入時(shí)要遠(yuǎn)慢于直接代碼。因此Java反射機(jī)制主要應(yīng)用在對(duì)靈活性和擴(kuò)展性要求很高的系統(tǒng)框架上,普通程序不建議使用。

反射包括了一些動(dòng)態(tài)類型,所以JVM無法對(duì)這些代碼進(jìn)行優(yōu)化。因此,反射操作的效率要比那些非反射操作低得多。我們應(yīng)該避免在經(jīng)常被 執(zhí)行的代碼或?qū)π阅芤蠛芨叩某绦蛑惺褂梅瓷洹?/p>

2.使用反射會(huì)模糊程序內(nèi)部邏輯

程序人員希望在源代碼中看到程序的邏輯,反射等繞過了源代碼的技術(shù),因而會(huì)帶來維護(hù)問題。反射代碼比相應(yīng)的直接代碼更復(fù)雜。

3.安全限制

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

4.內(nèi)部暴露

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

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

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美特黄特刺激a一级淫片 欧美特黄视频在线观看 | 99精品热女视频专线 | 国产成人污污网站在线观看 | 成年人在线观看视频免费 | 激情五月婷婷开心 | 手机在线一区二区三区 | 天天干成人网 | 亚洲午夜精品久久久久久人妖 | 久久综合网址 | 高清影院|精品秒播3 | 色天天综合色天天天天看大 | 国产成人禁片免费观看视频 | 一本大道香蕉在线 观看 | 国产亚洲成在线播放va | 日韩精品特黄毛片免费看 | 国产成本人三级在线观看网站 | 亚洲欧美人成综合在线最新 | 色综合国产 | 成人免费观看网站 | 成人涩 | 国产专区在线 | 欧美成人在线视频 | 久久久高清日本道免费观看 | 国产网曝手机视频在线观看 | 欧美同性videos可免费 | 精品欧美成人bd高清在线观看 | 精品91一区二区三区 | 人人澡人摸人人爽歪歪 | 免费日韩网站 | 菊花综合网 | 国内成人精品视频 | 日韩亚洲国产综合久久久 | 香蕉视频一级 | 日韩a级毛片免费视频 | 一级特黄录像免费播放肥 | 五月天色婷婷在线 | 高清人人天天夜夜曰狠狠狠狠 | 最近中文字幕视频 | 美国人成毛片在线播放 | 怡红院成人影院 | 久久午夜羞羞影院免费观看 |