Java 反射基礎
阿新 • • 發佈:2018-09-23
() 構造 script methods arr invoke ins string declared
1.反射概念:
Java運行時,動態獲得類的信息以及動態調用對象的方法的功能。
在運行時判斷任意一個對象所屬的類
在運行時構造任意一個類的對象
在運行時判斷任意一個類所具有的成員變量和方法
在運行時調用任意一個對象的方法
2. 動態語言和靜態語言
動態語言的定義:在程序運行時,運行改變程序結構或者變量類型,這這種語言稱為動態語言
動態語言:Perl,Python,Ruby,JavaScript
靜態語言:C++,Java,C#
3. Java反射機制由以下類來實現,這些類在java.lang.reflect中
Class類: 代表一個類
Field類:代表類的成員變量
Method類:代表類的方法
Constructor類:代表類的構造方法
Array類: 提供了動態創建數組,以及訪問數組的元素的靜態方法。
4. Java中,無論生成某個類的多少個對象,這些對象對象都會對應同一個Class對象
5. 反射的例子: 打印出String類中所有的方法
public static void main(String[] args) throws Exception { Class<?> classType = Class.forName("java.lang.String"); Method[] methods = classType.getDeclaredMethods(); for(Method method : methods){ System.out.println(method); } }
6.反射的例子2,調用單獨的反射方法
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{ //傳統調用 InvokeTester tester = new InvokeTester(); System.out.println(tester.add(1,5)); System.out.println(tester.echo("tom")); // 反射調用 Class<?> classType = InvokeTester.class; Object invokerTester = classType.newInstance(); //add方法 Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class}); Object result = addMethod.invoke(invokerTester,new Object[]{2,3}); System.out.println(result); //echo方法 Method echoMethod = classType.getMethod("echo",new Class[]{String.class}); result = echoMethod.invoke(invokerTester,new Object[]{"world"}); System.out.println(result); } }
Java 反射基礎