亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java的新特性反射機制應用及操作示例詳解

 更新時間:2023年05月22日 08:43:58   作者:avatar?小強Zzz  
這篇文章主要為大家介紹了java的新特性反射機制的操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

說起發(fā)射,先說正射是什么,我們代碼中通過User user = new User();代碼創(chuàng)建一個對象,并調用User類的成員變量或方法,這種我們通過Class信息獲取class實例,稱之為正射,這種代碼編譯器編譯時便知道他會生成一個user對象。

如果我們在寫代碼時不知道我們要操作的對象類型,他可能是User類型,也可能是House類型,而User類型和Clazz類型有沒有繼承關系,只知道要調用他的getId()方法,那又該怎么調用對象的方法呢?

反射

對于反射而言,我們獲得了一個對象的實例,并且知道了這個對象的類型,那么我們便可以對他進行一切操作。

這是由于JVM為每一個加載的class都創(chuàng)建了一個class實例,并保存了實例的所有信息,包括類型,父類,方法,屬性等等,這使得我們可以獲取class實例的所有信息。
這種通過class實例獲取class信息的方法稱為反射

獲取class又3種方法

通過一個class的靜態(tài)變量class獲取

Class clazz = User.class;

通過完整包路徑獲取

Class clazz = Class.forName("xiaoqiangZzz.busticket;");

通過實例獲取

Object object = getObject();
Class clazz = object.getClass();

獲取到class后,我們也可以通過class創(chuàng)建實例對象

Object object = clazz.newInstance();
Object object = clazz.newInstance();

獲取屬性

  • Field getField(name):根據字段名獲取某個public的field(包括父類)
  • Field getDeclaredField(name):根據字段名獲取當前類的某個field(不包括父類)
  • Field[] getFields():獲取所有public的field(包括父類)
  • Field[] getDeclaredFields():獲取當前類的所有field(不包括父類)
public void getId(Object object) throws IllegalAccessException {
    Class clazz = object.getClass();
    Field field = clazz.getField("age");
    field.setAccessible(true);
    System.out.println(field.get(object));
    field.setAccessible(false);
}

類似的,我們可以獲取方法并調用

  • Method getMethod(name, Class...):獲取某個public的Method(包括父類)
  • Method getDeclaredMethod(name, Class...):獲取當前類的某個Method(不包括父類)
  • Method[] getMethods():獲取所有public的Method(包括父類)
  • Method[] getDeclaredMethods():獲取當前類的所有Method(不包括父類)
public void getMethod(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Class clazz = object.getClass();
    Method method = clazz.getMethod("getId");
    method.invoke(object);
}

反射應用

制作一個通用的數據庫表導出方法

public void wirte(Object[] objects, Class classN) throws IllegalAccessException {
        Sheet sheet = new Sheet();
        Field[] fields = classN.getDeclaredFields();
        for (int i = 1; i < objects.length; i++) {
            Row row = sheet.createRow(i);
            for (Field field : fields) {
                field.setAccessible(true);
                // 寫入單元格
                ...........
                field.setAccessible(false);
        }
    }

注解獲取類

以上就是java的新特性--反射的詳細內容,更多關于java的新特性--反射的資料請關注腳本之家其它相關文章!

相關文章

  • Java?斷言?assert的用法詳解

    Java?斷言?assert的用法詳解

    Java?assert斷言機制是Java5中推出的新特性,它主要用于在程序運行時檢查狀態(tài)或假設的正確性,本篇文章將全面詳細地講解Java?assert斷言機制,包括斷言概述、語法規(guī)則、工作原理、使用場景、注意事項以及示例代碼等方面,需要的朋友可以參考下
    2023-05-05
  • Java如何實現將類文件打包為jar包

    Java如何實現將類文件打包為jar包

    這篇文章主要介紹了Java如何實現將類文件打包為jar包,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring MVC--攔截器實現和用戶登陸例子

    Spring MVC--攔截器實現和用戶登陸例子

    本文主要介紹了Spring MVC--攔截器實現和用戶登陸例子,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Java中線程死亡的幾種情況實例分析

    Java中線程死亡的幾種情況實例分析

    線程是進程中的一個實體,是被系統(tǒng)獨立調度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源。下面這篇文章主要給大家介紹了Java線程死亡的幾種情況,需要的朋友可以參考下。
    2017-01-01
  • Springboot MongoDB實現自增序列的項目實踐

    Springboot MongoDB實現自增序列的項目實踐

    在某些特定的業(yè)務場景下,會需要使用自增的序列來維護數據,本文主要介紹了Springboot MongoDB實現自增序列的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java多線程通信問題深入了解

    Java多線程通信問題深入了解

    下面小編就為大家?guī)硪黄钊肜斫釰AVA多線程之線程間的通信方式。小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • Java?策略模式?if-else用法實例詳解

    Java?策略模式?if-else用法實例詳解

    這篇文章主要介紹了Java?策略模式?if-else用法詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • SpringBoot錯誤提示400狀態(tài)問題

    SpringBoot錯誤提示400狀態(tài)問題

    這篇文章主要介紹了SpringBoot錯誤提示400狀態(tài)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java HashMap詳解及實例代碼

    java HashMap詳解及實例代碼

    這篇文章主要介紹了java HashMap詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-01-01
  • Java快速排序的實現詳細代碼及通俗解釋

    Java快速排序的實現詳細代碼及通俗解釋

    這篇文章主要介紹了Java快速排序實現的相關資料,快速排序是一種高效的排序算法,通過選擇一個基準值將數組分成兩部分,左邊的元素比基準值小,右邊的元素比基準值大,然后遞歸地對這兩部分進行排序,需要的朋友可以參考下
    2025-02-02

最新評論