大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 利用Java反射獲取對象

利用Java反射獲取對象

更新時間:2020-10-26 17:44:09 來源:動力節點 瀏覽1261次

與傳統的通過new 來獲取對象的方式不同,利用Java反射獲取對象會先拿到Hero的“類對象”,然后通過類對象獲取“構造器對象”再通過構造器對象創建一個對象。這種獲取對象的方式相對來說更加安全,能夠利用Java反射的特性來獲取對象。


利用Java反射機制獲取對象的具體步驟如下:

1.獲取類對象 Class class = Class.forName("pojo.Hero");

2.獲取構造器對象 Constructor con = clazz.getConstructor(形參.class);

3 獲取對象 Hero hero =con.newInstance(實參);


上面是最簡單的獲取方法,當Hero的構造方法不是無參構造方法時,獲取構造器對象略有不同,見下面測試:

構造方法不同時,獲取構造器對象的方法

示例:

Hero類添加6種構造方法

//---------------構造方法-------------------

//(默認的構造方法)

Hero(String str){

System.out.println("(默認)的構造方法 s = " + str);

}

//無參構造方法

public Hero(){

System.out.println("調用了公有、無參構造方法執行了。。。");

}

//有一個參數的構造方法

public Hero(char name){

System.out.println("姓名:" + name);

}

//有多個參數的構造方法

public Hero(String name ,float hp){

System.out.println("姓名:"+name+"血量:"+ hp);

}

//受保護的構造方法

protected Hero(boolean n){

System.out.println("受保護的構造方法 n = " + n);

}

//私有構造方法

private Hero(float hp){

System.out.println("私有的構造方法 血量:"+ hp);

}

通過反射機制獲取對象:

package test;

public class ConstructorTest {

/*

* 通過Class對象可以獲取某個類中的:構造方法、成員變量、成員方法;并訪問成員;

*

* 1.獲取構造方法:

* 1).批量的方法:

* public Constructor[] getConstructors():所有"公有的"構造方法

public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、默認、公有)

* 2).獲取單個的方法,并調用:

* public Constructor getConstructor(Class... parameterTypes):獲取單個的"公有的"構造方法:

* public Constructor getDeclaredConstructor(Class... parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、默認、公有;

*


* 2.創建對象

* Constructor對象調用newInstance(Object... initargs)

*/

public static void main(String[] args) throws Exception {

//1.加載Class對象

Class clazz = Class.forName("pojo.Hero");

//2.獲取所有公有構造方法

System.out.println("**********************所有公有構造方法*********************************");

Constructor[] conArray = clazz.getConstructors();

for(Constructor c : conArray){

System.out.println(c);

}

System.out.println("************所有的構造方法(包括:私有、受保護、默認、公有)***************");

conArray = clazz.getDeclaredConstructors();

for(Constructor c : conArray){

System.out.println(c);

}

System.out.println("*****************獲取公有、無參的構造方法*******************************");

Constructor con = clazz.getConstructor(null);

//1>、因為是無參的構造方法所以類型是一個null,不寫也可以:這里需要的是一個參數的類型,切記是類型

//2>、返回的是描述這個無參構造函數的類對象。

System.out.println("con = " + con);

//調用構造方法

Object obj = con.newInstance();

System.out.println("******************獲取私有構造方法,并調用*******************************");

con = clazz.getDeclaredConstructor(float.class);

System.out.println(con);

//調用構造方法

con.setAccessible(true);//暴力訪問(忽略掉訪問修飾符)

obj = con.newInstance(100);

}

}

輸出:

**********************所有公有構造方法*********************************

public pojo.Hero(java.lang.String,float)

public pojo.Hero(char)

public pojo.Hero()

************所有的構造方法(包括:私有、受保護、默認、公有)***************

private pojo.Hero(float)

protected pojo.Hero(boolean)

public pojo.Hero(java.lang.String,float)

public pojo.Hero(char)

public pojo.Hero()

pojo.Hero(java.lang.String)

*****************獲取公有、無參的構造方法*******************************

con = public pojo.Hero()

調用了公有、無參構造方法執行了。。。

******************獲取私有構造方法,并調用*******************************

private pojo.Hero(float)

私有的構造方法 血量:100.0


綜上所述,我們能夠得出以下結論:

1.獲取構造器對象方法:

1).批量的方法:

public Constructor[] getConstructors():所有"公有的"構造方法

public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、默認、公有)

2).獲取單個的方法:

public Constructor getConstructor(Class… parameterTypes): 獲取單個的"公有的"構造方法

public Constructor getDeclaredConstructor(Class…parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、默認、公有;


以上就是關于利用Java反射機制來獲取對象的介紹,當然這只是Java反射機制的一個很小的用處,Java反射是Java中的一個重點內容,想要更深入學習Java反射機制的小伙伴可以觀看本站的Java基礎教程解鎖Java機制的更多精彩內容!


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 99热精品在线播放 | 四虎影视永久在线 | 欧美日韩国产在线 | 天天爽夜夜爽夜夜爽精品视频 | 久在线精品视频 | 羞羞视频网页 | free性欧美极度另类超级大 | 亚洲tv精品一区二区三区 | 国产永久一区二区三区 | 久久久久久久久a免费 | 中文字幕 二区 三区 搜查官 | 国产人成激情视频在线观看 | 亚洲啪视频 | 一区免费 | 一区不卡在线观看 | 日韩精品你懂的在线播放 | 欧美一级成人一区二区三区 | sihu永久在线播放地址 | 国产深夜 | 久久亚洲国产精品五月天婷 | 国产午夜久久精品 | 亚洲国产一区二区三区a毛片 | 午夜一级毛片看看 | 无码免费一区二区三区免费播放 | 久久婷婷色综合老司机 | 久久久伊人影院 | 欧美成人毛片免费视频 | 亚洲香蕉网综合久久 | 日日摸夜夜摸无需播放器 | 久久成人在线视频 | 99在线热播精品免费 | 久久国产精品永久免费网站 | 免费一级成人免费观看 | 欧美aaaaa一级毛片在线 | 四虎国产精品免费视 | 久久精品店 | 伊人蕉| 国内精品伊人久久久久7777人 | 久久精品视频日本 | 国内精品久久久久久中文字幕 | 精品久久久久久久中文字幕 |