如何使用反射

ljwdhxd發表於2024-08-07

如何使用反射

  1. 透過 Class 物件的 newInstance() 方法

    package com.lut.study_java_demo1;

    import java.util.Scanner;

    /**
    * @author Zhou
    * @desc 反射的使用
    * @date 2024/8/7 16:13
    */
    public class _21_new_reflect {
    public static void main(String[] args) throws Exception{
    String a=new Scanner(System.in).nextLine();
    Class<?> c=Class.forName("com.lut.study_java_demo1.Reflect");
    Reflect reflect=(Reflect)c.newInstance();
    reflect.showString(a);
    }
    }
    class Reflect{
    public Reflect(String a){
    System.out.println(a);
    }
    void showString(String s){
    System.out.println(s);
    }
    }

    首先使用絕對路徑建立一個Reflect類的Class物件,然後透過Reflect類的Class物件建立了一個該類的例項,將地址賦給引用變數reflect,透過引用變數呼叫Reflect類的方法,實現該方法。

  2. 透過 Constructor (呼叫無參構造方法)物件的 newInstance() 方法

    package com.lut.study_java_demo1;

    import java.util.Scanner;

    /**
    * @author Zhou
    * @desc 反射的使用
    * @date 2024/8/7 16:13
    */
    public class _21_new_reflect {
    public static void main(String[] args) throws Exception{
    String a=new Scanner(System.in).nextLine();
    Class<?> c=Class.forName("com.lut.study_java_demo1.Reflect");
    //獲取一個沒有引數的構造方法
    Constructor constructor=c.getConstructor();
    Reflect reflect=(Reflect)constructor.newInstance();
    reflect.showString(a);
    }
    }
    class Reflect{
    public Reflect(String a){
    System.out.println(a);
    }
    void showString(String s){
    System.out.println(s);
    }
    }
  3. 透過 Constructor (呼叫有參構造方法)物件的 newInstance() 方法

    package com.lut.study_java_demo1;

    import java.util.Scanner;

    /**
    * @author Zhou
    * @desc 反射的使用
    * @date 2024/8/7 16:13
    */
    public class _21_new_reflect {
    public static void main(String[] args) throws Exception{
    String a=new Scanner(System.in).nextLine();
    Class<?> c=Class.forName("com.lut.study_java_demo1.Reflect");
    //獲取一個可以是String型別引數的構造方法
    Constructor constructor=c.getConstructor(String.class);
    Reflect reflect=(Reflect)constructor.newInstance("Hello");
    reflect.showString(a);
    }
    }
    class Reflect{
    public Reflect(String a){
    System.out.println(a);
    }
    void showString(String s){
    System.out.println(s);
    }
    }
  4. 獲取類的成員變數的資訊

    Field[] fields = c.getDeclaredFields();
  5. 獲得類方法

    Method[] methods = c.getDeclaredMethods();
  6. 獲得建構函式

    Constructor[] constructors = c.getDeclaredConstructors();

相關文章