最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解JAVA核心:揭秘反射機制的奧秘

 更新時間:2024年02月06日 08:32:41   作者:跟張哥學編程  
歡迎來到JAVA反射機制指南!想要了解如何在JAVA中實現(xiàn)靈活的編程技巧嗎?本指南將帶你揭開JAVA反射機制的神秘面紗,讓你的編程世界更加精彩!趕緊跟我一起來探索吧!

1為什么需要反射?(reflect)

Person p = new Student();

p在編譯時的類型是person,但是在運行時是student。

為了讓程序在運行時發(fā)現(xiàn)對象和類的真實信息,有兩種做法:

  • 1,假設我們知道類的具體信息,可以通過instanceof 運算符進行判斷。
  • 2,在編譯的時候不知道對象和類的信息,可以通過反射獲取。

三種獲取class對象的方法。

 //獲取Class對象第一種class.forName/

try {
Class clazz1 = Class.forName(“com.aaa.entity.Person”);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 //獲取Class對象第二種.class
Class clazz2 = Person.class;
//獲取Class對象第三種getClass()
/* Person p = new Person();
Class class3 = p.getClass();*/

getName() :以 String 的形式返回此 Class 對象所表示的實體(類、接口、數(shù)組類、基本類型或 void)名稱。
getSimpleName() :返回源代碼中給出的基礎類的簡稱。
newInstance() :創(chuàng)建此 Class 對象所表示的類的一個新實例。
forName(String className) :返回與帶有給定字符串名的類或接口相關聯(lián)的 Class 對象

使用反射獲取構(gòu)造器

//獲取構(gòu)造器
Constructor[] cons = s.getClass().getConstructors();
for (Constructor constructor : cons) {
System.out.println(constructor);
}

使用反射獲取公共方法,注意不包括構(gòu)造方法,但是包括Object中的方法

Method[] methods = clazz2.getMethods();
System.out.println(methods.length);
for (Method method : methods) {
System.out.println(method.getName());
}

使用反射獲取所有包括私有方法,注意不包括構(gòu)造方法,但是不包括Object中的(繼承的)方法

/*Method[] methods2 = clazz2.getDeclaredMethods();
		System.out.println(methods2.length);
		for (Method method : methods2) {
			System.out.println(method.getName());
		}*/

使用反射獲取屬性,getFields只能獲取公共屬性

Field[] fields = clazz2.getFields();
        System.out.println(fields.length);

如果想獲取所有的,使用getDeclaredFields()

Field[] fields = clazz2.getDeclaredFields();
        System.out.println(fields.length);

設置對象屬性

Student student = new Student();
        Field field = student.getClass().getDeclaredField("name");
        //field.setAccessible(true);
        field.set(student, "張三");
        System.out.println(student.getName());

2創(chuàng)建持久層框架

/**
	 * 通用方法獲取對象集合
	 */
	public static List selectObjList(String sql,Object[] params,Class clazz) throws Exception{
		List list = new ArrayList();
		con = getConnection();
		try {
			ps = con.prepareStatement(sql);
			setParams(params);
			rs = ps.executeQuery();
			//列數(shù)
			ResultSetMetaData rsm = rs.getMetaData();
			int count = rsm.getColumnCount();//獲取列數(shù)
			while(rs.next()){
				Object obj = clazz.newInstance();//實例化一個對象
				for(int i=1;i<=count;i++){
					String key = rsm.getColumnName(i);//獲取列名
					Object value = rs.getObject(i);//獲取對應列的值
					Field field = clazz.getDeclaredField(key);//獲取對象的成員變量(字段名)
					field.setAccessible(true);//設置可訪問
					if(value!=null){
						field.set(obj, value);
					}
				}
				list.add(obj);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			closeAll();
		}
		return list;
	}

到此這篇關于深入理解JAVA核心:揭秘反射機制的奧秘的文章就介紹到這了,更多相關JAVA反射機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot啟動流程SpringApplication準備階段源碼分析

    SpringBoot啟動流程SpringApplication準備階段源碼分析

    這篇文章主要為大家介紹了SpringBoot啟動流程SpringApplication準備階段源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 基于SpringBoot + MyBatis-Plus高效實現(xiàn)數(shù)據(jù)變更記錄

    基于SpringBoot + MyBatis-Plus高效實現(xiàn)數(shù)據(jù)變更記錄

    在應用開發(fā)過程中,在某些情況下,需要實現(xiàn)數(shù)據(jù)的變更記錄,以便于在未來進行數(shù)據(jù)操作變更的回溯,那有什么辦法高效實現(xiàn)數(shù)據(jù)操作變更記錄,而不需要一個一個地方去加呢?答案當然是有,今天小編就給大家介紹下如何基于SpringBoot + MyBatis-Plus高效實現(xiàn)數(shù)據(jù)的變更記錄,
    2026-02-02
  • Java獲取精確到秒的時間戳方法

    Java獲取精確到秒的時間戳方法

    這篇文章主要為大家詳細介紹了Java獲取精確到秒的時間戳方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java編程獲取經(jīng)緯度之間距離的方法

    Java編程獲取經(jīng)緯度之間距離的方法

    這篇文章主要介紹了Java編程獲取經(jīng)緯度之間距離的方法,涉及Java數(shù)學運算的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Spring存儲與讀取Bean對象方法

    Spring存儲與讀取Bean對象方法

    在Spring中,要想更簡單的存儲和讀取對象的核心是使用注解,這篇文章主要給大家介紹了關于Spring如何通過注解存儲和讀取對象的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Java獲取當前操作系統(tǒng)的信息實例代碼

    Java獲取當前操作系統(tǒng)的信息實例代碼

    這篇文章主要介紹了Java獲取當前操作系統(tǒng)的信息實例代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Logger.error打印錯誤異常的詳細堆棧信息

    Logger.error打印錯誤異常的詳細堆棧信息

    這篇文章主要介紹了Logger.error打印錯誤異常的詳細堆棧信息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • java 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)

    java 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)

    下面小編就為大家?guī)硪黄猨ava 查詢oracle數(shù)據(jù)庫所有表DatabaseMetaData的用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法示例

    Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法示例

    這篇文章主要介紹了Java基于循環(huán)遞歸回溯實現(xiàn)八皇后問題算法,結(jié)合具體實例形式分析了java的遍歷、遞歸、回溯等算法實現(xiàn)八皇后問題的具體步驟與相關操作技巧,需要的朋友可以參考下
    2017-06-06
  • springboot+maven快速構(gòu)建項目的示例代碼

    springboot+maven快速構(gòu)建項目的示例代碼

    本篇文章主要介紹了springboot+maven快速構(gòu)建項目的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

西乌珠穆沁旗| 天柱县| 平湖市| 桂东县| 甘肃省| 大悟县| 南安市| 德江县| 临潭县| 宁陵县| 焉耆| 门源| 浮梁县| 甘德县| 麻城市| 泾阳县| 香河县| 房产| 正安县| 页游| 玉田县| 怀安县| 神池县| 彩票| 鄯善县| 德化县| 虹口区| 怀远县| 平陆县| 边坝县| 清远市| 普陀区| 江川县| 克什克腾旗| 阿城市| 双江| 通江县| 抚宁县| 宜阳县| 炉霍县| 镇坪县|