1. 程式人生 > >Java 反射基礎

Java 反射基礎

() 構造 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 反射基礎