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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础--反射

發布時間:2024/9/27 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础--反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1.概念

什么是反射?

(1)Java反射機制的核心是在程序運行時動態加載類并獲取類的詳細信息,從而操作類或對象的屬性和方法。 本質是JVM得到class對象之后,再通過class對象進行反編譯,從而獲取對象的各種信息。

(2)Java屬于先編譯再運行的語言,程序中對象的類型在編譯期就確定下來了, 而當程序在運行時可能需要動態加載某些類,這些類因為之前用不到, 所以沒有被加載到JVM。通過反射,可以在運行時動態地創建對象并調用其屬性, 不需要提前在編譯期知道運行的對象是誰。

Java核心技術卷I P190定義反射:能夠分析類信息的能力的程序稱為反射

類信息:屬性(域)、方法、構造器等

Class class1 = Class.forName("Performance"); System.out.println(class1); Field[] fields = class1.getFields();for (Field field : fields) {System.out.println(field);}

fields就是Performance對象的屬性/域

反射機制可以用來:

  • 在運行時 ,分析類的能力
  • 在運行時查看對象,例如,編寫一個toString方法供所有類使用
  • 實現通用的數組操作代碼
  • 利用Method對象,這個對象很想像C++中的函數指針

反射的好處:

  • 在程序運行過程中來操作這些對象;
  • 可以解耦,提高程序的可擴展性。

2.獲取class對象的方式

?1.Class.forName("全類名"):將字節碼文件加載進內存,返回class對象(多用于配置文件,將類名定義在配置文件當中,讀取文件,加載類)

?2.類名.class:通過類名的class獲取 (多用于參數傳遞)????????

對象.getClass(): getClass()方法在object類當中定義著 (多用于對象獲取字節碼的方式)

3.對象.getClass():getClass()方法在object類當中定義著

getClass()方法定義在object類里,多用于對象獲取字節碼的方式。

需要注意的是,同一類加載器加載的文件(*.class)在一次程序運行過程中,只會被加載一次,不論你通過哪種方式獲取的class對象都是同一個。

3. Class對象功能:

1.獲取成員變量

Field[] getFields() ;//獲取所有public修飾的成員變量

Field getField(String name);//獲取指定名稱的

Field[] getDeclaredFilds();//獲取所有的成員變量,不考慮修飾符

Field getDeclaredField(String name);

2.獲取構造方法

Constructor<?>[] getConstructors()

Constructor<T> getConstructor(類<?>...parameterTypes)

Constructor<?>[] getDeclaredConstructors()

Constructor<T> getDeclaredConstructors(類<?>...parameterTypes)

3.獲取方法名

Method[] getMethod()

Method getMethod(String name,類<?>... parameterTypes)

Method[] getDeclaredMethod()

Method getDeclaredMethod(String name,類<?>... parameterTypes)

?4.獲取類名

String getName();

Field成員變量
1. ?void set(Object obj,Object value); ? //設置值

2. ? get(Object obj); ?//獲取值

3. ? setAccessible(true); ?//忽略安全訪問修飾符的安全檢查 ? ?暴力反射 ==>private?

總結

以上是生活随笔為你收集整理的Java基础--反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。