JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。
成都創新互聯公司主營桂東網站建設的網絡公司,主營網站建設方案,成都App制作,桂東h5小程序定制開發搭建,桂東網站營銷推廣歡迎桂東等地區企業咨詢
Java反射就是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;并且能改變它的屬性。而這也是Java被視為動態語言的一個關鍵性質。
Java反射的功能是在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具有的成員變量和方法,在運行時調用任意一個對象的方法,生成動態代理。
擴展資料:
JAVA中反射實例:
1、Class superClass=clazz.getSuperclass();//獲取父類。
System.out.println("getSuperclass:"+superClass)。? ?
2、Class[] interfaces=clazz.getInterfaces();//獲取實現接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//構造方法。
System.out.println("getConstructors:"+cons.length)。
參考資料來源:百度百科: JAVA反射機制
import java.lang.reflect.Method;
public class InvokeTester
{
public int add(int param1, int param2)
{
return param1 + param2;
}
public String echo(String message)
{
return "hello: " + message;
}
public static void main(String[] args) throws Exception
{
Class? classType = InvokeTester.class;
Object invokeTester = classType.newInstance();
// System.out.println(invokeTester instanceof InvokeTester); //返回true
Method addMethod = classType.getMethod("add", new Class[] { int.class,int.class }); //第二個形參表示指定的add方法要接收為int的類型的兩個參數
Object result = addMethod.invoke(invokeTester, new Object[]{1, 2}); //反射調用,將1,2傳入InvokeTester.Class的實例invokeTester里的add方法。得返回的結果。
System.out.println((Integer)result);
System.out.println("---------------------");
Method echoMethod = classType.getMethod("echo", new Class[]{String.class});
Object result2 = echoMethod.invoke(invokeTester, new Object[]{"tom"});
System.out.println((String)result2);
}
}
1.Java動態加載類和靜態加載類的區別
new創建對象的方式稱作為靜態加載,而使用Class.forName("XXX")稱作為動態加載,它們倆本質的區別在于靜態加載的類的源程序在編譯時期加載(必須存在),而動態加載的類在編譯時期可以缺席(源程序不必存在)。
2.為什么需要動態加載類
對于我自己的理解,動態加載類增加了程序的靈活性。比如一個程序中有50個功能,但你可能只會使用其中的一個,如果你用的是靜態加載的方式,你必須在編譯前提供100個功能的所有定義,否則無法編譯通過,若你使用的是動態加載機制,則不需要如此大費周章,用哪一個就定義哪一個即可。
靜態加載:
public class Office_Static {
public static void main(String[] args) {
//new 創建對象,是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類
if("Word".equals(args[0])){
Word w = new Word();
w.start();
}
if("Excel".equals(args[0])){
Excel e = new Excel();
e.start();
}
}
}
這個程序編譯時必須有Word和Excel這兩個類存在才行,即使判斷后用不到Excel也要加載
動態加載:
接口OfficeAble :
public interface OfficeAble {
public void start();}
給你一個小的實例代碼:
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class test {
public static void main(String args[]) throws NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
Foo foo = new Foo("這個一個Foo對象!");
Class clazz = foo.getClass();
Method m1 = clazz.getDeclaredMethod("outInfo");
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
Method m3 = clazz.getDeclaredMethod("getMsg");
m1.invoke(foo);
m2.invoke(foo, "重新設置msg信息!");
String msg = (String) m3.invoke(foo);
System.out.println(msg);
}
}
class Foo {
private String msg;
public Foo(String msg) {
this.msg = msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void outInfo() {
System.out.println("這是測試Java反射的測試類");
}
}
網站標題:java代碼反射實例下載 通俗理解java反射舉例子
地址分享:http://vcdvsql.cn/article22/hephjc.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、網站改版、網站設計公司、網站導航、自適應網站、網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯