Java反射拾遺,java拾遺

來源:互聯網
上載者:User

Java反射拾遺,java拾遺

定義:Java反射機制可以讓我們在編譯期(Compile Time)之外的運行期(Runtime)檢查類,介面,變數以及方法的資訊。
反射還可以讓我們在運行期執行個體化對象,調用方法,通過調用get/set方法擷取變數的值。

 

反射作用:使用Java反射機制可以在運行時期檢查Java類的資訊,檢查Java類的資訊往往是你在使用Java反射機制的時候所做的第一件事情,
通過擷取類的資訊你可以擷取以下相關的內容

  Class對象
  類名
  修飾符
  包資訊
  父類
  實現的介面
  構造器
  方法
  變數
  註解

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

名.class;
JVM將使用類裝載器, 將類裝入記憶體(前提是:類還沒有裝入記憶體),不做類的初始化工作.返回Class的對象。

 

具體的參考如下代碼:

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)@Lazypublic 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@ToStringpublic class ReflectBeanSuper {    private String sex;}
public interface ReflectInterface {    String getReflectName();}

運行結果

這裡寫的比較簡單,都在代碼裡體現了,如果需要具體的操作可以在參考相關API

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.