Java基礎(chǔ)之反射原理與用法詳解
本文實(shí)例講述了Java基礎(chǔ)之反射原理與用法。分享給大家供大家參考,具體如下:
1.什么是反射?
反射其實(shí)就是動(dòng)態(tài)的加載類,我們?cè)趯?xiě)JDBC的時(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ì)入門(mén)與進(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ū)去幫忙做,這時(shí)就可以把秘書(shū)看做領(lǐng)導(dǎo)的代理2021-06-06
itextpdf提取PDF文件中的任意頁(yè)碼實(shí)現(xiàn)示例
這篇文章主要為大家介紹了itextpdf提取PDF文件中的任意頁(yè)碼實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
IntelliJ 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)是一種常見(jiàn)的運(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-12
一篇文章帶你入門(mén)Java數(shù)據(jù)類型
下面小編就為大家?guī)?lái)一篇Java的基本數(shù)據(jù)類型)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-08-08
java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù)
這篇文章主要為大家詳細(xì)介紹了java統(tǒng)計(jì)文件中每個(gè)字符出現(xiàn)的個(gè)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03

