Java反射拾遺

定義:Java反射機制能夠讓咱們在編譯期(Compile Time)以外的運行期(Runtime)檢查類,接口,變量以及方法的信息。
反射還能夠讓咱們在運行期實例化對象,調用方法,經過調用get/set方法獲取變量的值。ide

 

反射做用:使用Java反射機制能夠在運行時期檢查Java類的信息,檢查Java類的信息每每是你在使用Java反射機制的時候所作的第一件事情,
經過獲取類的信息你能夠獲取如下相關的內容this

  Class對象
  類名
  修飾符
  包信息
  父類
  實現的接口
  構造器
  方法
  變量
  註解spa

Class對象:
反射獲取class對象兩種方式
Class.forName("類名全稱");
forName是Class對象的靜態方法,會裝入類,並作類的靜態初始化,返回Class的對象。code

名.class;
JVM將使用類裝載器, 將類裝入內存(前提是:類尚未裝入內存),不作類的初始化工做.返回Class的對象。對象

 

具體的參考以下代碼:blog

Class<?> bean = Class.forName("com.*.common.ReflectBean");
        ReflectBean reflectBean = (ReflectBean) bean.newInstance();
        System.out.println("實例1" + reflectBean);
        Class<?> bean1 = ReflectBean.class;
        ReflectBean reflectBean1 = (ReflectBean) bean1.newInstance();
        System.out.println("實例2" + reflectBean1);
        int modifiers = bean.getModifiers();
        System.out.println("類的修飾符" + modifiers);
        System.out.println("類的修飾符是否爲public" + Modifier.isPublic(modifiers));
        System.out.println("類的全名" + bean.getName());
        System.out.println("類的簡名" + bean.getSimpleName());
        Package packageInfo = bean.getPackage();
        System.out.println("類的包信息" + packageInfo);
        Class superClass = bean.getSuperclass();
        System.out.println("類的父類" + superClass.getName());
        for (Class interFace : bean.getInterfaces()) {
            System.out.println("類的接口" + interFace.getName());
        }

        for (Constructor interFace : bean.getConstructors()) {
            System.out.println("類的構造方法" + interFace.getName());
        }

        for (Method interFace : bean.getMethods()) {
            System.out.println("類的方法" + interFace.getName());
        }

        for (Field interFace : bean.getFields()) {
            System.out.println("類的公共變量" + interFace.getName());
        }


        for (Annotation annotation : bean.getAnnotations()) {
            // 此處沒註解是由於 setter getter 等都是編譯時期的 這拿到的是運行期的
            System.out.println("類的註解" + annotation.toString());
        }
@Getter
@Setter
@ToString(callSuper = true)
@Lazy
public class ReflectBean extends ReflectBeanSuper implements ReflectInterface {
    public String name;

    public ReflectBean () {

    }

    public ReflectBean (String name) {
        this.name = name;
    }
    @Override
    public String getReflectName() {
        return name;
    }
}
@Getter
@Setter
@ToString
public class ReflectBeanSuper {
    private String sex;
}
public interface ReflectInterface {
    String getReflectName();
}

運行結果如圖:接口

這裏寫的比較簡單,都在代碼裏體現了,若是須要具體的操做能夠在參考相關API內存

相關文章
相關標籤/搜索