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

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

利用Java反射獲取對象

更新時間:2020-10-26 17:44:09 來源:動力節(jié)點 瀏覽1378次

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


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

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

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

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


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

構(gòu)造方法不同時,獲取構(gòu)造器對象的方法

示例:

Hero類添加6種構(gòu)造方法

//---------------構(gòu)造方法-------------------

//(默認的構(gòu)造方法)

Hero(String str){

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

}

//無參構(gòu)造方法

public Hero(){

System.out.println("調(diào)用了公有、無參構(gòu)造方法執(zhí)行了。。。");

}

//有一個參數(shù)的構(gòu)造方法

public Hero(char name){

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

}

//有多個參數(shù)的構(gòu)造方法

public Hero(String name ,float hp){

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

}

//受保護的構(gòu)造方法

protected Hero(boolean n){

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

}

//私有構(gòu)造方法

private Hero(float hp){

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

}

通過反射機制獲取對象:

package test;

public class ConstructorTest {

/*

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

*

* 1.獲取構(gòu)造方法:

* 1).批量的方法:

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

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

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

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

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

*


* 2.創(chuàng)建對象

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

*/

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

//1.加載Class對象

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

//2.獲取所有公有構(gòu)造方法

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

Constructor[] conArray = clazz.getConstructors();

for(Constructor c : conArray){

System.out.println(c);

}

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

conArray = clazz.getDeclaredConstructors();

for(Constructor c : conArray){

System.out.println(c);

}

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

Constructor con = clazz.getConstructor(null);

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

//2>、返回的是描述這個無參構(gòu)造函數(shù)的類對象。

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

//調(diào)用構(gòu)造方法

Object obj = con.newInstance();

System.out.println("******************獲取私有構(gòu)造方法,并調(diào)用*******************************");

con = clazz.getDeclaredConstructor(float.class);

System.out.println(con);

//調(diào)用構(gòu)造方法

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

obj = con.newInstance(100);

}

}

輸出:

**********************所有公有構(gòu)造方法*********************************

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

public pojo.Hero(char)

public pojo.Hero()

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

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)

*****************獲取公有、無參的構(gòu)造方法*******************************

con = public pojo.Hero()

調(diào)用了公有、無參構(gòu)造方法執(zhí)行了。。。

******************獲取私有構(gòu)造方法,并調(diào)用*******************************

private pojo.Hero(float)

私有的構(gòu)造方法 血量:100.0


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

1.獲取構(gòu)造器對象方法:

1).批量的方法:

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

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

2).獲取單個的方法:

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

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


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


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

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久免费视频播放 | 高清黄色直接看 | 亚洲不卡一区二区三区在线 | 天天干天天舔天天操 | 97久久人人爽人人爽人人 | 亚洲综合激情五月色播 | 国产欧美成人不卡视频 | 精品久久久久久中文字幕专区 | 天天操夜夜噜 | 欧美另类网 | 亚洲国产精品线观看不卡 | 精品无人乱码区1区2区3区 | 一级成人生活片免费看 | 欧美午夜性春 | 国产黄片毛片 | 香蕉在线影院 | 免费精品久久久久久中文字幕 | 好色亚洲| 四虎网站在线观看 | 国内高清久久久久久久久 | 国产成人综合精品 | 80岁老妇xxxxx高清 | 久久精品加勒比中文字幕 | 伊人网色 | 伊人成人在线观看 | 亚洲国产成人久久综合一区77 | 在线看片91| 久久国产精品视频 | 国产精品视频福利一区二区 | 毛片毛片毛片毛片毛片 | 亚洲日本一区二区三区高清在线 | 九九线精品视频 | 四虎影院永久在线 | 日本一区二区三区欧美在线观看 | 天天干夜夜操美女 | 日韩专区亚洲国产精品 | 一区二区三区四区视频在线观看 | 国产精品麻豆a啊在线观看 国产精品麻豆高清在线观看 | 四虎在线网站 | 天天干天天干天天干天天干天天干 | 国产午夜亚洲精品第一区 |