国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java反射機(jī)制詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

Java反射機(jī)制詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

2020-11-03 22:49liujiahan JAVA教程

這篇文章主要為大家詳細(xì)介紹了Java反射機(jī)制的相關(guān)資料,主要包括反射的概念、作用

 一、先看一下反射的概念
主要是指程序可以訪問,檢測和修改它本身狀態(tài)或行為的一種能力,并能根據(jù)自身行為的狀態(tài)和結(jié)果,調(diào)整或修改應(yīng)用所描述行為的狀態(tài)和相關(guān)的語義。

反射是Java中一種強(qiáng)大的工具,能夠使我們很方便的創(chuàng)建靈活的代碼,這些代碼可以再運(yùn)行時(shí)裝配,無需在組件之間進(jìn)行源代碼鏈接。但是反射使用不當(dāng)會(huì)成本很高!

看概念很暈的,繼續(xù)往下看。 

二、反射機(jī)制的作用

1.反編譯:.class-->.java

2.通過反射機(jī)制訪問java對(duì)象的屬性,方法,構(gòu)造方法等;

這樣好像更容易理解一些,下邊我們具體看怎么實(shí)現(xiàn)這些功能。

三、在這里先看一下sun為我們提供了那些反射機(jī)制中的類:

?
1
2
3
4
java.lang.Class;       
java.lang.reflect.Constructor; java.lang.reflect.Field;   
java.lang.reflect.Method;
java.lang.reflect.Modifier;

很多反射中的方法,屬性等操作我們可以從這四個(gè)類中查詢。還是哪句話要學(xué)著不斷的查詢API,那才是我們最好的老師。

四、具體功能實(shí)現(xiàn):

1、反射機(jī)制獲取類有三種方法,我們來獲取Employee類型

?
1
2
3
4
5
6
7
8
9
10
//第一種方式:
Classc1 = Class.forName("Employee");
//第二種方式:
//java中每個(gè)類型都有class 屬性.
Classc2 = Employee.class;
  
//第三種方式:
//java語言中任何一個(gè)java對(duì)象都有g(shù)etClass 方法
Employeee = new Employee();
Classc3 = e.getClass(); //c3是運(yùn)行時(shí)類 (e的運(yùn)行時(shí)類是Employee)

2、創(chuàng)建對(duì)象:獲取類以后我們來創(chuàng)建它的對(duì)象,利用newInstance:

?
1
2
3
Class c =Class.forName("Employee"); 
//創(chuàng)建此Class 對(duì)象所表示的類的一個(gè)新實(shí)例
Objecto = c.newInstance(); //調(diào)用了Employee的無參數(shù)構(gòu)造方法.

3、獲取屬性:分為所有的屬性和指定的屬性:

a.先看獲取所有的屬性的寫法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//獲取整個(gè)類
 Class c = Class.forName("java.lang.Integer");
//獲取所有的屬性?
  Field[] fs = c.getDeclaredFields();
 
    //定義可變長的字符串,用來存儲(chǔ)屬性
     StringBuffer sb = new StringBuffer();
    //通過追加的方法,將每個(gè)屬性拼接到此字符串中
     //最外邊的public定義
     sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
    //里邊的每一個(gè)屬性
     for(Field field:fs){
     sb.append("\t");//空格
     sb.append(Modifier.toString(field.getModifiers())+" ");//獲得屬性的修飾符,例如public,static等等
     sb.append(field.getType().getSimpleName() + " ");//屬性的類型的名字
     sb.append(field.getName()+";\n");//屬性的名字+回車
     }
  
     sb.append("}");
  
 System.out.println(sb);

b.獲取特定的屬性,對(duì)比著傳統(tǒng)的方法來學(xué)習(xí):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) throws Exception{
       
//以前的方式:
  /*
  User u = new User();
  u.age = 12; //set
  System.out.println(u.age); //get
  */
       
  //獲取類
  Class c = Class.forName("User");
  //獲取id屬性
  Field idF = c.getDeclaredField("id");
  //實(shí)例化這個(gè)類賦給o
  Object o = c.newInstance();
  //打破封裝
  idF.setAccessible(true); //使用反射機(jī)制可以打破封裝性,導(dǎo)致了java對(duì)象的屬性不安全。
  //給o對(duì)象的id屬性賦值"110"
  idF.set(o, "110"); //set
 //get
  System.out.println(idF.get(o));
}

4、獲取方法,和構(gòu)造方法,不再詳細(xì)描述,只來看一下關(guān)鍵字:

Java反射機(jī)制詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 這樣我們就可以獲得類的各種內(nèi)容,進(jìn)行了反編譯。對(duì)于JAVA這種先編譯再運(yùn)行的語言來說,反射機(jī)制可以使代碼更加靈活,更加容易實(shí)現(xiàn)面向?qū)ο蟆?/p>

 綜上為,JAVA反射的再次學(xué)習(xí),靈活的運(yùn)用它,能夠使我們的代碼更加靈活,但是它也有它的缺點(diǎn),就是運(yùn)用它會(huì)使我們的軟件的性能降低,復(fù)雜度增加,所以還要我們慎重的使用它。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人精品一区二区在线 | 九九久久影视 | 精品1区| 成人久久久久爱 | 久久精品国产一区二区电影 | 久久久久网站 | av手机在线播放 | 日本在线中文 | 色综合社区 | 欧美日韩视频 | 高清一区二区三区 | 亚洲伦理影院 | 国产一区二区三区四区 | 一区二区三区四区在线 | 日比视频网站 | 国产一区二区三区撒尿在线 | 婷婷激情五月 | 日韩中文字幕在线免费观看 | 欧美成人精品一区二区三区 | 国产婷婷色一区二区三区 | 91人人| 人人人人澡人人爽人人澡 | 国产资源视频在线观看 | 蜜桃免费一区二区三区 | 天堂v视频 | 午夜在线电影 | 亚洲精品电影在线观看 | 高清久久久 | 亚洲怡红院在线观看 | 日日色视频 | 精品亚洲一区二区三区 | 在线一区二区三区做爰视频网站 | 大香伊蕉在人线视频777 | 欧美一区免费 | 99热在线观看免费 | 久久精品国产亚洲 | 日韩www| 日韩在线成人av | 亚洲高清视频在线 | 欧美亚洲视频在线观看 | 精品久久久久久亚洲综合网 |