java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...
1.什么是動態語言?
程序運行時,可以改變程序的結構或者變量類型;如Python,javaScript
function(){
var s="var a=3;var b=4;" evals(s);
}
在執行javascript代碼的的過程中,可以改變變量的值或插入語句改變結構。
但Java,c 并不是動態的語言
不過我們可以利用反射的機制,字節碼的操作等獲得動態語言的特性,使得Java的編程更加靈活。
2.反射(reflection)
----程序已經運行,但依然可以加載,探知使用編譯期間完全未知的類
----在程序運行的時候,可以只根據類的名稱,來動態加載一個類。
對于任意一個已經加載的類,我們都能知道它的所有屬性和方法,對于任意一個對象,我們都能調用它的方法和屬性。
----Class? clz? = Class.forName("包名.類名“)
-----加載完類之后,會在堆的內存中產生一個Class類型的對象(一個類只有一個Class對象),這個對象包含了類的完整的結構信息,通過這個對象,
我們可以看到類的結構信息,它就像一面鏡子,所以稱之為反射。
2.簡單的實例
通過反射。User類的結構信息就會被保存到clz對象中。
另外獲取Class對象的方法
1.類名.class()? 如(int.class? User.class)
2.對象名.getClass()
3.反射的作用
--動態加載類,獲取類的(屬性,方法)
Class? clz? = Class.forName("包名.類名“)
--動態構造對象
User u = clz.getDeclaredsConstructor (?"形參類型.class"....).newInstance();
--動態調用類的任意方法,構造器
Methods []arr = clz.getDeclaredtMethods()(獲得所有方法)
Methods method = clz.getDeclaredMethods("方法名", "方法的形參類型.class")
Constructor [] arr = clz.getDeclaredConstructors()(獲得所有的構造器)
Constructor constructor = clz.getDeclaredsConstructor (?"形參類型.class"....)
--動態調用處理屬性
Fileds[] array = clz.getFields();(只能獲得Publicb屬性的變量)
Fileds[] array =? clz.getDeclaredFields()(獲得所有屬性)
Filed? field =? clz.getDeclaredFields("指定名稱的屬性")
--動態獲取泛型信息
--處理注解
4.實例
package com.ljl.reflection;
import java.lang.reflect.Method;
public class ReflectionTest1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class clz = Class.forName("com.ljl.reflection.User");
System.out.println(clz);
//通過反射構造對象
User u1 = (User) clz.getConstructor().newInstance();
System.out.println(u1);
//通反射API調用普通方法
Method method1 = clz.getDeclaredMethod("setId", int.class);
method1.invoke(u1, 001);
Method method2 = clz.getDeclaredMethod("setName", String.class);
method2.invoke(u1, "panda");
//u1.setId(001);u1.setName("panda");相同
System.out.println(u1);
//通過反射Api操作屬性
java.lang.reflect.Field f = clz.getDeclaredField("id");
//若屬性私有,不能操作,將會報錯。
//設置:不做安全檢查
f.setAccessible(true);
f.set(u1, 002);
System.out.println(u1);
}
}
結果
總結
以上是生活随笔為你收集整理的java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东金融学院java实验报告_《大学计算
- 下一篇: java中的module是什么意思_An