Java基礎(chǔ)之反射原理與用法詳解
本文實(shí)例講述了Java基礎(chǔ)之反射原理與用法。分享給大家供大家參考,具體如下:
1.什么是反射?
反射其實(shí)就是動(dòng)態(tài)的加載類,我們?cè)趯慗DBC的時(shí)候加載驅(qū)動(dòng)Class.forName("xxx")
時(shí)就涉及到了反射。
反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制。
2.反射機(jī)制能做什么?
1. 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象的所屬的類Class。
2. 在運(yùn)行時(shí)判斷構(gòu)造任意一個(gè)類的對(duì)象Constructor。
3. 在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量Field和方法Method。
4. 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。method.invoke(object,args)
3.反射機(jī)制相關(guān)的API
獲得完整的包名和類名
Student.java
package com.reflect.test; public class Student { private int id; private String name; public Student() {} public Student(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
Test.java
package com.reflect.test; public class Test { Student stu = new Student(); public static void main(String[] args) { Test test = new Test(); test.getClassName(); } //獲得完整的包名和類名 public void getClassName() { System.out.println(stu.getClass().getName()); } }
運(yùn)行結(jié)果
com.reflect.test.Student
獲取Class的三種方法
public static void main(String[] args) { Test test = new Test(); test.getStudentClass(); } //獲取Class對(duì)象的三種犯法 public void getStudentClass() { //第一種方法,forName Class<?> class1; try { class1 = Class.forName("com.reflect.test.Student"); System.out.println("class1:"+class1); } catch (ClassNotFoundException e) { e.printStackTrace(); } //第二種方法,class Class<?> class2 = Student.class; System.out.println("class2:"+class2); //第三種方法,getClass() Student stu1 = new Student(); Class<?> class3 = stu1.getClass(); System.out.println("class3:"+class3); }
運(yùn)行結(jié)果
class1:class com.reflect.test.Student
class2:class com.reflect.test.Student
class3:class com.reflect.test.Student
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
解析Spring中的靜態(tài)代理和動(dòng)態(tài)代理
學(xué)習(xí) Spring 的過(guò)程中,不可避免要掌握代理模式。這篇文章總結(jié)一下代理模式。顧名思義,代理,就是你委托別人幫你辦事,所以代理模式也有人稱作委托模式的。比如領(lǐng)導(dǎo)要做什么事,可以委托他的秘書去幫忙做,這時(shí)就可以把秘書看做領(lǐng)導(dǎo)的代理2021-06-06itextpdf提取PDF文件中的任意頁(yè)碼實(shí)現(xiàn)示例
這篇文章主要為大家介紹了itextpdf提取PDF文件中的任意頁(yè)碼實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08IntelliJ IDEA基于Scala實(shí)現(xiàn)Git檢查工具
這篇文章主要介紹了如何使用Scala實(shí)現(xiàn)自定義的Git檢查工具,大家可以基于本文的示例進(jìn)行擴(kuò)展與實(shí)現(xiàn),也可以進(jìn)行其他應(yīng)用方向的嘗試,感興趣的可以了解下2023-08-08淺析Java如何優(yōu)雅的避免那無(wú)處不在的空指針異常
在Java編程語(yǔ)言中,NullPointerException(簡(jiǎn)稱NPE)是一種常見的運(yùn)行時(shí)異常,本文主要來(lái)和大家講講如何優(yōu)雅的避免這些空指針異常,需要的可以參考下2024-03-03解決mybatis 中collection嵌套collection引發(fā)的bug
這篇文章主要介紹了解決mybatis 中collection嵌套collection引發(fā)的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù)
這篇文章主要為大家詳細(xì)介紹了java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03