java 反射 ppt_Java反射的基本使用
這里是修真院后端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】
八個方面深度解析后端知識/技能,本篇分享的是:
【Java反射的基本使用】
背景介紹
JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;
對于任意一個對象,都能夠調用它的任意一個方法;
這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制
知識剖析
類的加載
類的加載指的是將類的class文件讀入內存中,并為之創建一個java.lang.Class對象。
也就是說,當程序使用任何類時,系統都會為之建立一個java.lang.Class對象
類的加載由類加載器完成,類加載器通常由JVM提供
類對象
類是某一類對象的抽象,同樣,Class是對類進行的抽象,類的本質實際上也是一個對象
類對象用來存儲類的基本信息:類大小,類名稱,類的版本,繼承層次,以及消息與函數的映射表等
編碼實戰
獲取類對象:
可以通過
Class.forName,
類.class,
對象.getClass()
來獲得類的類對象
創建對象:
1.使用Class對象的newInstance()方法來創建對應類的實例
2.使用Class對象獲取Constructor對象,再調用Constructor對象的NewInstance方法來創建對應的實例
訪問屬性:
Class對象的getField()方法可以獲取該類的成員變量
然后使用Field對象提供的兩個方法可以讀取和設置成員變量
1.getXxx(Object obj)
2.setXxx(Object obj,Xxx val)
調用方法:
通過Class對象的getMethod()可以獲取指定的方法,返回一個Method對象
每個Method方法對應一個方法,通關它的invoke()方法來調用相應的方法
具體演示
創建一個類:
public class Class1 {
public int YYY=0;
public String name="這是改之前的name";
public void say(){
System.out.println("這是Class1的say方法");
}
public int getYYY() {
return YYY;
}
public void setYYY(int YYY) {
this.YYY = YYY;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
獲取類對象:
String classname = "Class1";
Class Clazz = Class.forName(classname);
創建對象:
Constructor c = Clazz.getConstructor();
Class1 aa =(Class1) c.newInstance();
訪問并設置成員變量:
Field f1 = Clazz.getDeclaredField("name");
f1.set(aa,"wanger");
調用方法:
Method m = Clazz.getMethod("setName", String.class);
m.invoke(aa,"李四");
也可以通過外部文件來配置要加載的類,通過修改文件中的信息來改變想要加載的類
在src目錄下建立一個文本文件,內容為:
class=Service1
通過讀取外部文件類獲取類名,并利用獲取的類名來進行加載:
File f1 = new File("C:\Users\kelis\IdeaProjects\Spring_A\src\spring.txt");
Properties config = new Properties();
config.load(new FileInputStream(f1));
String className = (String) config.get("class");
Class clazz = Class.forName(className);
更多討論:
反射和映射的區別
映射只是一種概念,通常是用代碼方式來表示種對應關系。
反射是一種技術,很多高級語言都有這種技術。具體作用就是通過一個獨立存在的對象,可以找到該對象的其他信息
反射有哪些應用場景呢
利用反射可以實現動態加載所需要的類,而不必修改程序的源代碼
還由許多框架中都用到了反射技術,如spring,通過配置文件類設置想要加載的類
反射的作用,或者通俗解釋下反射
實現動態加載類,增加了程序的靈活性,多用于各種開發框架
總結
以上是生活随笔為你收集整理的java 反射 ppt_Java反射的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ssh过滤器_SSH中的过滤器
- 下一篇: java 手动线程调度_Java Thr