① java 基本類型 能否通過反射得到
基本數據類型都是可以反射的,你的clazz有個isPrimitive()方法,就是用來表示這個反射的位元組碼是不是基本類型,沒有構造方法只是說明這個基本類型的位元組碼本來就沒有構造方法,
這種基本類型的反射一般可以通過包裝類來識別,像 int.class == Integer.TYPE; boolean.class == Boolean.TYPE,另外void 都可以反射呢,void.class == Void.TYPE
② 通過註解和反射實現一個簡單的@Value註解
Java註解(Annotation)就是一種java標注,並且能夠攜帶數據, 是在JDK5.0被引入的。
Java的註解可以標注Java語言中的類、變數、方法、參數、包等等。
值得注意的是: 上面所說的Java註解只是一種標注,所以註解需要配合反射來使用才能發揮出強大作用。
註解的成員變數只支持 八種基本數據類型(byte、short、int、long、float、double、char、boolean)、String、Class、Enum、Annotation 。
還有的就是,所有的註解余坦都是Annotation介面的實現類,可以把Annotation介面看成是所有註解的超類 。
上面就是定義了一個可以標注在類或者註解以及方法上的,保留到運行期的註解。 但是也僅僅是定義了一個註解而已,一個註解要發揮它自己的作用,還需要反射的配合。
反射是java中的一種機制,通過這種機制我們能夠在運行時獲取到一個類的一切信息(繼承的類、實現的介面、屬性、方法等), 以及註解信息和註解所攜豎山桐帶的數據 。
通過獲取到的類信息,我唯哪們可以構造一個新的對象、獲取到某個對象的屬性值、執行某個對象的方法等。
定義value註解
定義pojo User類
測試並使用註解
③ java反射提基本類型
使用類字面常量或TYPE欄位,例如:
Class myObjectClass= MyObject.class;(類字面常量不僅可以應用於普通的類,也可以應用
於介面、數組以及基本數據類型),這種方式不僅更簡單,而且更安全,因為它在編譯時就會受到檢查,並且根除了對forName方法的調用,所以也更高效,建議使用「.class」的形式。
Class c = Integer.TYPE;(TYPE是基本數據類型的包裝類型的一個標准欄位,它是一
個引用,指向對應的基本數據類型的Class對象),附表如下,兩邊等價:
boolean.class
Boolean.TYPE
char.class
Character.TYPE
byte.class
Byte.TYPE
short.class
Short.TYPE
int.class
Integer.TYPE
long.class
Long.TYPE
float.class
Float.TYPE
double.class
Double.TYPE
void.class
Void.TYPE
④ java 判斷數據類型和方法的參數類型相同
1、如果你得到是一個Object對象,可以用if(obj instanceof String)來判斷是否是String對象,int是基本類型不可以這么判斷,只能用它的包裝類Integer,同樣用instanceof 。
2、如果set方法只能接受一個參數,而且必須有int的話,可以寫多個set方法,如set(String),set(int),編寫不同的處理邏輯。
3、instanceof 也是反射的一種方式。
4、如果有2個Object的參數,可以用if(obj1.getClass()==obj2.getClass())來判斷類型是否相同,如果要得到類型名,可以用obj.getClass().getName()來獲得對象的類名。
關於java數據類型的分類
Java基本類型共有八種,基本類型可以分為三類,字元類型char,布爾類型boolean以及數值類型byte、short、int、long、float、double。數值類型又可以分為整數類型byte、short、int、long和浮點數類型float、double。
JAVA中的數值類型不存在無符號的,它們的取值范圍是固定的,不會隨著機器硬體環境或者操作系統的改變而改變。實際上,JAVA中還存在另外一種基本類型void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。
8 中類型表示範圍如下:
byte:8位,最大存儲數據量是255,存放的數據范圍是-128~127之間。
short:16位,最大數據存儲量是65536,數據范圍是-32768~32767之間。
int:32位,最大數據存儲容量是2的32次方減1,數據范圍是負的2的31次方到正的2的31次方減1。
long:64位,最大數據存儲容量是2的64次方減1,數據范圍為負的2的63次方到正的2的63次方減1。
float:32位,數據范圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F。
double:64位,數據范圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加。
boolean:只有true和false兩個取值。
char:16位,存儲Unicode碼,用單引號賦值。
⑤ java 反射 數據類型轉換
給你一段屬性反射的代碼,你自己看著改吧
Field[]fs=userCla.getDeclaredFields();
for(inti=0;i<fs.length;i++){
Fieldf=fs[i];
f.setAccessible(true);//設置些屬性是可以訪問的
Objectval=f.get(bean);//得到此屬性的值
System.out.println("name:"+f.getName()+" value="+val);
Stringtype=f.getType().toString();//得到此屬性的類型
if(type.endsWith("String")){
System.out.println(f.getType()+" 是String");
f.set(bean,"12");//給屬性設值
}elseif(type.endsWith("int")||type.endsWith("Integer")){
System.out.println(f.getType()+" 是int");
f.set(bean,12);//給屬性設值
}else{
System.out.println(f.getType()+" ");
}
}
基本就是getType()之後,根據type的類型來反射
⑥ 什麼是反射什麼Java反射
java反射是什麼意思呢?下面帶大家了解一下。
JAVA反射是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。反射是一種強大的工具,能夠創建靈活的代碼,可以使代碼在運行時裝配,無需在組件之間進行源代表鏈接。
JAVA反射機制是在運行狀態中,知道所有屬性和方法,對於任意一個對象,能夠調用它的方法和屬性,這種動態獲取的信息以及動態調用對象的方法的功能的反射機制。
反射適合用在哪
首先我們先思考一個問題,反射適合使用在哪裡呢?從功能上看,反射似乎無所不能,幾乎所有的類,所有的屬性、方法、構造我們都能使用,但是我們細細思考一下,在實際開發中,並不是所有場景都需要使用反射獲取屬性或者方法進行操作,反而更多的使用實例.xxx方式操作,而當這些操作重復次數較多的時候,我們往往會考慮優化代碼,減少代碼冗餘,提高復用,比如實體構建賦值等操作,這個時候往往是我們最需要復用的地方,所以我們可以大體認為反射主要使用在實體操作過程中。而在一般操作數據的過程中,我們的實體一般都是知道並且依賴於對應的數據類型的,比如:
1.根據類型new的方式創建對象
2.根據類型定義變數,類型可能是基本類型也可能是引用類型、類或者介面
3.將對應類型的對象傳遞給方法
4.根據類型訪問對象的屬性,調用方法等操作
以上這些操作都是數據操作的過程中最常見也是最難復用優化的地方,而如果這里的操作使用反射則可以實現動態的操作不同的類型的實例,通過調用反射入口類Class,獲取對應的屬性、構造、方法完成對應的操作
⑦ java的反射技術有什麼用
一、反射的概述
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
要想解剖一個類,必須先要獲取到該類的位元組碼文件對象。而解剖使用的就是Class類中的方法.所以先要獲取到每一個位元組碼文件對應的Class類型的對象.
以上的總結就是什麼是反射
反射就是把java類中的各種成分映射成一個個的Java對象
例如:一個類有:成員變數、方法、構造方法、包等等信息,利用反射技術可以對一個類進行解剖,把個個組成部分映射成一個個對象。(其實:一個類中這些成員方法、構造方法、在加入類中都有一個類來描述)
如圖是類的正常載入過程:反射的原理在與class對象。
熟悉一下載入的時候:Class對象的由來是將class文件讀入內存,並為之創建一個Class對象。
希望對您有所幫助!~