java反射創建對象
❶ 北大青鳥設計培訓:java高級開發必須懂的反射是什麼樣的
理解反射對學習Java框架有很大的幫助,如Spring框架的核心就是使用Java反射實現的,而且對做一些Java底層的操作會很有幫助。
一、Class類的使用1、萬事萬物皆對象,(當然,基本數據類型,靜態成員不是面向對象(屬於類的)),所以我們創建的每一個類也都是對象,即類本身是java.lang.Class類的實例對象,但是這些對象都不需要new出來,因為java.lang.Class類的構造方法是私有的2、任何一個類都是Class類的實例對象,這個實例對象有三種表示方式:(我們新建一個Student類)(上海尚學堂java全程老師面授+實戰教學)①Classc1=Student.class;//實際告訴我們任何一個類都有一個隱含的靜態成員變數class(知道類名時用)②Classc2=stu.getClass();//已知該類的對象通過getClass方法(知道對象時用)③Classc3=Class.forName("類的全名");//會有一個ClassNotFoundException異常官網解釋說:c1,c2表示了Student類的類類型()classtype),萬事萬物皆對象,類也是對象,是Class類的實例對象,這個對象我們成為該類的類類型(有點亂,但是慢慢捋一下還是能理解的)這里有一點值得注意,當我們執行System.out.println(c1==c2);語句,結果返回的是true,這是為什麼呢?原因是不管c1還是c2都代表了Student類的類類型,一個類可能是Class類的一個實例對象。
我們完全可以通過類的類類型創建該類的對象實例,即通過c1或c2創建Student的實例。
Studentstu=(Student)c1.newInstance();//前提是必須要有無參的構造方法,因為該語句會去調用其無參構造方法。
該語句會拋出異常。
二、動態載入類1、編譯時載入類是靜態載入類,new創建對象是靜態載入類,在編譯時刻就需要載入所有可用使用到的類,如果有一個用不了,那麼整個文件都無法通過編譯2、運行時載入類是動態載入類Classc=Class.forName("類的全名"),不僅表示了類的類型,還表示了動態載入類,編譯不會報錯,在運行時才會載入,使用介面標准能更方便動態載入類的實現。
功能性的類盡量使用動態載入,而不用靜態載入。
石家莊電腦培訓http://www.kmbdqn.cn/發現很多軟體比如QQ,360的在線升級,並不需要重新編譯文件,只是動態的載入新的東西。
❷ java反射的作用。
1. Java反射包reflection提供對Class,Method,field,constructor1 等信息的封裝類型。
2. 通過這些api可以輕易獲得一個類的各種信息並且可以進行實例化,方法調用等。
類中的private參數可以通過setaccessible方法強制獲取。
3. 反射的作用可謂是博大精深,JDK動態代理生成代理類的位元組碼後,首先把這個類通過defineclass定義成一個類,然後用class.for(name)會把該類載入到jvm,之後我們就可以通過,A.class.GetMethod()獲取其方法,然後通過invoke調用其方法,在調用這個方法時,實際上會通過被代理類的引用再去調用原方法。
❸ java中介面和抽象類可以通過反射創建對象嗎
反射創建對象,其實還是調用構造方法,介面和抽象類都沒有構造方法,所以是不可以創建對象實例化的
❹ 什麼是反射什麼Java反射
java反射是什麼意思呢?下面帶大家了解一下。
JAVA反射是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。反射是一種強大的工具,能夠創建靈活的代碼,可以使代碼在運行時裝配,無需在組件之間進行源代表鏈接。
JAVA反射機制是在運行狀態中,知道所有屬性和方法,對於任意一個對象,能夠調用它的方法和屬性,這種動態獲取的信息以及動態調用對象的方法的功能的反射機制。
反射適合用在哪
首先我們先思考一個問題,反射適合使用在哪裡呢?從功能上看,反射似乎無所不能,幾乎所有的類,所有的屬性、方法、構造我們都能使用,但是我們細細思考一下,在實際開發中,並不是所有場景都需要使用反射獲取屬性或者方法進行操作,反而更多的使用實例.xxx方式操作,而當這些操作重復次數較多的時候,我們往往會考慮優化代碼,減少代碼冗餘,提高復用,比如實體構建賦值等操作,這個時候往往是我們最需要復用的地方,所以我們可以大體認為反射主要使用在實體操作過程中。而在一般操作數據的過程中,我們的實體一般都是知道並且依賴於對應的數據類型的,比如:
1.根據類型new的方式創建對象
2.根據類型定義變數,類型可能是基本類型也可能是引用類型、類或者介面
3.將對應類型的對象傳遞給方法
4.根據類型訪問對象的屬性,調用方法等操作
以上這些操作都是數據操作的過程中最常見也是最難復用優化的地方,而如果這里的操作使用反射則可以實現動態的操作不同的類型的實例,通過調用反射入口類Class,獲取對應的屬性、構造、方法完成對應的操作
❺ Java創建對象的幾種方式
1.使用 new 的方式,這也是我們最常見的一種方式 我們以 Person 類來舉例說明 例:
Person p = new Person();
2.使用反射來創建對象 我們可以調用 class類 或者 Constructor類的newInstance() 方法 例:
Person p1 = Person.class.newInstance();
3.使用克隆的方式 調用對象的 clone() 方法 例:
Person p4 = (包名.Person) p.clone();
4.使用反序列化的方式 我們需要讓我們的類實現Serializable介面 例:
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Person p5 = (Person ) in.readObject()
❻ java反射問題
代碼如下:
importjava.lang.reflect.Field;
importjava.util.Scanner;
classStudent{
privateStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
@Override
publicStringtoString(){
return"Student[name="+name+"]";
}
}
publicclassApp{
publicstaticvoidmain(String[]args)throwsException{
Scannerscanner=newScanner(System.in);
StringpackageName="com..demo042.";
StringclassName=scanner.nextLine();
Classclazz=Class.forName(packageName+className);
System.out.println(clazz);
Objectstu=clazz.newInstance();
System.out.println(stu);
Fieldfield=clazz.getDeclaredField("name");
field.setAccessible(true);
field.set(stu,"Tom");
System.out.println(stu);
scanner.close();
}
}
運行結果:
❼ java如何創建對象
JAVA創建對象的四種方式:
有4種顯式地創建對象的方式:
1.用new語句創建對象,這是最常用的創建對象的方式。最常用 比如
Scanner scanner = new Scanner(System.in)
2.運用反射手段,Java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。
3.調用對象的clone()方法。
4.運用反序列化手段
❽ 如何利用反射創建一個對象List
java中反射的三種方法: 1. 通過Object類的getClass方法來獲取 java.lang.Object中定義有getClass方法:public final Class getClass() 所有Java對象都具備這個方法,該方法用於返回調用該方法的對象的所屬類關聯的Class對象,