Java基礎之反射原理與用法詳解
本文實例講述了Java基礎之反射原理與用法。分享給大家供大家參考,具體如下:
1.什么是反射?
反射其實就是動態(tài)的加載類,我們在寫JDBC的時候加載驅動Class.forName("xxx")時就涉及到了反射。
反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。
2.反射機制能做什么?
1. 在運行時判斷任意一個對象的所屬的類Class。
2. 在運行時判斷構造任意一個類的對象Constructor。
3. 在運行時判斷任意一個類所具有的成員變量Field和方法Method。
4. 在運行時調(diào)用任意一個對象的方法。method.invoke(object,args)
3.反射機制相關的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());
}
}
運行結果
com.reflect.test.Student
獲取Class的三種方法
public static void main(String[] args) {
Test test = new Test();
test.getStudentClass();
}
//獲取Class對象的三種犯法
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);
}
運行結果
class1:class com.reflect.test.Student
class2:class com.reflect.test.Student
class3:class com.reflect.test.Student
更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java面向對象程序設計入門與進階教程》、《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
itextpdf提取PDF文件中的任意頁碼實現(xiàn)示例
這篇文章主要為大家介紹了itextpdf提取PDF文件中的任意頁碼實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
IntelliJ IDEA基于Scala實現(xiàn)Git檢查工具
這篇文章主要介紹了如何使用Scala實現(xiàn)自定義的Git檢查工具,大家可以基于本文的示例進行擴展與實現(xiàn),也可以進行其他應用方向的嘗試,感興趣的可以了解下2023-08-08
解決mybatis 中collection嵌套collection引發(fā)的bug
這篇文章主要介紹了解決mybatis 中collection嵌套collection引發(fā)的bug,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)
這篇文章主要為大家詳細介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03

