初識Java反射機制

      網友投稿 964 2025-04-01

      @TOC


      Java反射機制的概述

      1.Java的反射(reflection) :機制是指在程序的運行狀態中,可以構造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調用任意一個對象的屬性和方法。這種動態獲取程序信息以及動態調用對象的功能稱為Java語言的反射機制。反射被視為動態語言的關鍵,反射讓Java成為一個準動態語言 。缺點增加不安全性。

      初識Java反射機制

      2.動態語言(弱類型語言) 是運行時才確定數據類型的語言,變量在使用之前無需申明類型,通常變量的值是被賦值的那個值的類型。. 比如Php、Asp、JavaScript、Python、Perl等等。. 靜態語言(強類型語言) 是編譯時變量的數據類型就可以確定的語言,大多數靜態語言要求在使用變量之前必須生命數據類型。. 比如Java、C、C++、C#等。. 弱類型語言 是數據類型可以被忽略的語言。

      3.靜態語言是在編譯時變量的數據類型即可確定的語言,多數靜態類型語言要求在使用變量之前必須聲明數據類型。 例如:C++、Java、Delphi、C#等。 動態語言是在運行時確定數據類型的語言。

      4.Class類:是描述類的一個類。Class 類是在Java語言中定義一個特定類的實現。一個類的定義包含成員變量,成員方法,還有這個類實現的接口,以及這個類的父類。Class類的對象用于表示當前運行的 Java 應用程序中的類和接口。 比如:每個數組均屬于一個 Class 類對象,所有具有相同元素類型和維數的數組共享一個Class 對象。基本的 Java 類型(boolean, byte, char, short,int, long, float 和 double) 和 void 類型也可表示為 Class 對象。

      理解Class類并獲取Class實列

      類的加載與ClassLoader

      Class c1 = Class.forName("com.fianl_.reflection_.pojo"); Class c2 = Class.forName("com.fianl_.reflection_.pojo"); Class c3 = Class.forName("com.fianl_.reflection_.pojo"); System.out.println(c1.hashCode()); System.out.println(c2.hashCode()); System.out.println(c3.hashCode());

      運行結果如下:

      結論:c1.c2.c3.的hashCode一樣 說明一個類在內存中只有一個Class對象。一個類被加載后,類的整個結構會被封裝在Class對象中

      Class一些常用的方法:

      getName() 一個Class對象描述了一個特定類的屬性,Class類中最常用的方法getName以 String 的形式返回此 Class 對象所表示的實體(類、接口、數組類、基本類型或 void)名稱。 newInstance() Class還有一個有用的方法可以為類創建一個實例,這個方法叫做newInstance()。例如:x.getClass.newInstance(),創建了一個同x一樣類型的新實例。newInstance()方法調用默認構造器(無參數構造器)初始化新建對象。 getClassLoader() 返回該類的類加載器。 getComponentType() 返回表示數組組件類型的 Class。 getSuperclass() 返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的超類的 Class。 isArray() 判定此 Class 對象是否表示一個數組類。 getClassLoader() /******************************************************************/ 獲取該類的類裝載器。 getComponentType() 如果當前類表示一個數組,則返回表示該數組組件的Class對象,否則返回null。 getConstructor(Class[]) 返回當前Class對象表示的類的指定的公有構造子對象。 getConstructors() 返回當前Class對象表示的類的所有公有構造子對象數組。 getDeclaredConstructor(Class[]) 返回當前Class對象表示的類的指定已說明的一個構造子對象。 getDeclaredConstructors() 返回當前Class對象表示的類的所有已說明的構造子對象數組。 getDeclaredField(String) 返回當前Class對象表示的類或接口的指定已說明的一個域對象。 getDeclaredFields() 返回當前Class對象表示的類或接口的所有已說明的域對象數組。 getDeclaredMethod(String,Class[]) 返回當前Class對象表示的類或接口的指定已說明的一個方法對象。 getDeclaredMethods() 返回Class對象表示的類或接口的所有已說明的方法數組。 getField(String) 返回當前Class對象表示的類或接口的指定的公有成員域對象。 getFields() 返回當前Class對象表示的類或接口的所有可訪問的公有域對象數組。 getInterfaces() 返回當前對象表示的類或接口實現的接口。 getMethod(String,Class[]) 返回當前Class對象表示的類或接口的指定的公有成員方法對象。 getMethods() 返回當前Class對象表示的類或接口的所有公有成員方法對象數組,包括已聲明的和從父類繼承的方法。 getModifiers() 返回該類或接口的Java語言修改器代碼。 getName() 返回Class對象表示的類型(類、接口、數組或基類型)的完整路徑名字符串。 getResource(String) 按指定名查找資源。 getResourceAsStream(String) 用給定名查找資源。 getSigners() 獲取類標記。 getSuperclass() 如果此對象表示除Object外的任一類,那么返回此對象的父類對象。 isArray() 如果Class對象表示一個數組則返回true,否則返回false。 isAssignableFrom(Class) 判定Class對象表示的類或接口是否同參數指定的Class表示的類或接口相同,或是其父類。 isInstance(Object) 此方法是Java語言instanceof操作的動態等價方法。 isInterface() 判定指定的Class對象是否表示一個接口類型。 isPrimitive() 判定指定的Class對象是否表示一個Java的基類型。 newInstance() 創建類的新實例。 toString() 將對象轉換為字符串。

      獲取Class類的三種方法

      1知道具體的類,通過類的class的屬性獲取,該方法最安全可靠,性能最高

      Class a2=pojo.class; System.out.println(a2.hashCode());

      2.知道一個類的實例,調用實例的getClass()方法獲取Class對象

      pojo pojo = new pojo(); Class a1=pojo.getClass(); System.out.println(a1.hashCode());

      3知道一個類的全名,并且該類在類路徑下,可通過Class類的靜態方法forName()獲取,可能拋出 ClassNotFoundException異常

      Class c1 = Class.forName("com.fianl_.reflection_.pojo"); System.out.println(c1.hashCode());

      運行代碼:

      Class c1 = Class.forName("com.fianl_.reflection_.pojo"); System.out.println(c1.hashCode()); //.知道一個類的實例,調用實例的getClass()方法獲取Class對象 pojo pojo = new pojo(); Class a1=pojo.getClass(); System.out.println(a1.hashCode()); //知道具體的類,通過類的class的屬性獲取,該方法最安全可靠,性能最高 Class a2=pojo.class; System.out.println(a2.hashCode());

      結果:

      Java 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2010表格斜線怎么打字(Excel表格斜線打字)
      下一篇:excel表格求平均數方法
      相關文章
      内射无码专区久久亚洲| 亚洲国产成人久久综合碰| 在线播放亚洲第一字幕| 亚洲AV永久无码天堂影院| ass亚洲**毛茸茸pics| 亚洲成人免费网站| 亚洲精品美女久久久久| 亚洲精品白色在线发布| 久久亚洲AV无码精品色午夜 | 亚洲AV综合色区无码一区爱AV| 国产亚洲午夜高清国产拍精品| 久久久久亚洲精品中文字幕| 亚洲日韩在线观看| 色噜噜AV亚洲色一区二区| 亚洲香蕉网久久综合影视| 亚洲熟妇无码乱子AV电影| 亚洲精品乱码久久久久久自慰| 国产亚洲真人做受在线观看| 亚洲AV无码精品无码麻豆| 亚洲av鲁丝一区二区三区| 久久国产亚洲精品无码| 亚洲国产成人久久99精品| 亚洲人成人网毛片在线播放| 亚洲国产综合精品中文第一| 亚洲色精品VR一区区三区| 亚洲AV无码XXX麻豆艾秋| mm1313亚洲精品国产| 久久精品国产精品亚洲人人 | 亚洲综合色7777情网站777| 亚洲国产精品一区二区三区在线观看| 亚洲综合av一区二区三区不卡 | 国产成人综合亚洲绿色| 亚洲区日韩区无码区| 亚洲精品自产拍在线观看| 亚洲伦理一区二区| 亚洲一区二区三区免费观看| 亚洲精品无码不卡在线播放| 亚洲色一色噜一噜噜噜| 亚洲人成伊人成综合网久久久| 亚洲AV日韩AV永久无码久久| 亚洲图片激情小说|