日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是反射和字节码对象。

發(fā)布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是反射和字节码对象。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.什么是"反射"
它是Java中提供的一種“操作對象”的方式。在運行狀態(tài)下,通過class文件對象,去使用構(gòu)造方法,成員變量,成員方法。 之前我們創(chuàng)建對象:
class Demo{
Student stu = new Student();
}
會使Demo類“依賴于”Student類--產(chǎn)生耦合
反射使用另一種方式操作對象,就可以解決這種依賴關(guān)系;
 方法有三種:
  1.類名.class
  2.對象.getclass()
  3.class.forName("包名.類名")
  好處:
  只要有一個類或者一個類的對象,就可以得到這個類或?qū)ο蟮乃袑傩院头椒?包括私有的
  同步方法
  反射成員方法:
  1.獲取字節(jié)碼文件
  Class c = Class.forName("包名.類名");
  2.反射方法
  Method m = c.getMethod("反射的方法",方法的參數(shù)類型.class);
  3.用方法,m.invoke(對象,參數(shù)) 對象,c.newInstance ,在A建立對象。
  m.invoke(c.newInstance(),參數(shù));
  類加載器與反射有什么關(guān)系
  反射是通過字節(jié)碼文件對象,將類的字段,方法,構(gòu)造器等映射成相應(yīng)的類,并進行各自的操作;
  類加載器是通過某個類的.classLoader()方法,將該類的.class文件從硬盤中加載到j(luò)ava虛擬機中,形成字節(jié)碼文件;
2.什么是“字節(jié)碼對象“
每個類被加載之后,系統(tǒng)就會為該類生成一個對應(yīng)的字節(jié)碼對象,通過該字節(jié)碼對象就可以訪問到JVM中的對應(yīng)的類。
獲取字節(jié)碼對象的三種方式
1.使用類的.class屬性

Class<類類型> clz1 = 類名.class;
1
2.通過Class類中的靜態(tài)方法forName(String className),傳入類的全限定名(必須添加完整包名)比較常用

Class<?> clz2 = Class.forName("java.util.Date");
1
3.通過對象的getClass方法來實現(xiàn),其中,getClass()是Object類中的方法,所有的對象都可以調(diào)用該方法

Date str = new Date();
Class<?> clz3 = str.getClass();

Class clazz = this.getClass();//獲取字節(jié)碼對象
Method method = clazz.getMthod("方法名",req.class,resp.class);//反射方法的字節(jié)碼對象
注意:同一個類在JVM中只存在一份字節(jié)碼對象,也就說上述,claz1 == clz2 == clz3;

轉(zhuǎn)載于:https://blog.51cto.com/13859849/2378319

總結(jié)

以上是生活随笔為你收集整理的什么是反射和字节码对象。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。