「Java面試題」反射

2020-12-04 神秘的代碼

動態語言

動態語言,是指程序在運行時可以改變其結構:新的函數可以引進,已有的函數可以被刪除等結構上的變化。比如常見的 JavaScript 就是動態語言,除此之外 Ruby,Python 等也屬於動態語言,而 C、C++則不屬於動態語言。從反射角度說 JAVA 屬於半動態語言。

反射機制概念 (運行狀態中知道類所有的屬性和方法)

在 Java 中的反射機制是指在運行狀態中,對於任意一個類都能夠知道這個類所有的屬性和方法;並且對於任意一個對象,都能夠調用它的任意一個方法;這種動態獲取信息以及動態調用對象方法的功能成為 Java 語言的反射機制。

反射的應用場景

編譯時類型和運行時類型在 Java 程序中許多對象在運行是都會出現兩種類型:編譯時類型和運行時類型。 編譯時的類型由聲明對象時實用的類型來決定,運行時的類型由實際賦值給對象的類型決定 。如:Person p=new Student();其中編譯時類型為 Person,運行時類型為 Student。編譯時類型無法獲取具體方法程序在運行時還可能接收到外部傳入的對象,該對象的編譯時類型為 Object,但是程序有需要調用該對象的運行時類型的方法。為了解決這些問題,程序需要在運行時發現對象和類的真實信息。然而,如果編譯時根本無法預知該對象和類屬於哪些類,程序只能依靠運行時信息來發現該對象和類的真實信息,此時就必須使用到反射了。

Java 反射 API

反射 API 用來生成 JVM 中的類、接口或則對象的信息。Class 類:反射的核心類,可以獲取類的屬性,方法等信息。Field 類:Java.lang.reflec 包中的類,表示類的成員變量,可以用來獲取和設置類之中的屬性值。Method 類: Java.lang.reflec 包中的類,表示類的方法,它可以用來獲取類中的方法信息或者執行方法。Constructor 類: Java.lang.reflec 包中的類,表示類的構造方法。

反射使用步驟(獲取 Class 對象、調用對象方法)

獲取想要操作的類的 Class 對象,他是反射的核心,通過 Class 對象我們可以任意調用類的方法。調用 Class 類中的方法,既就是反射的使用階段。使用反射 API 來操作這些信息

獲取 Class 對象的 3 種方法

調用某個對象的 getClass()方法Person p=new Person();Class clazz=p.getClass();調用某個類的 class 屬性來獲取該類對應的 Class 對象Class clazz=Person.class;使用 Class 類中的 forName()靜態方法(最安全/性能最好)Class clazz=Class.forName("類的全路徑"); (最常用)當我們獲得了想要操作的類的 Class 對象後,可以通過 Class 類中的方法獲取並查看該類中的方法和屬性。

創建對象的兩種方法

Class 對象的 newInstance()使用 Class 對象的 newInstance()方法來創建該 Class 對象對應類的實例,但是這種方法要求該 Class 對象對應的類有默認的空構造器。調用 Constructor 對象的 newInstance()先使用 Class 對象獲取指定的 Constructor 對象,再調用 Constructor 對象的 newInstance()方法來創建 Class 對象對應類的實例,通過這種方法可以選定構造方法創建實例。

相關焦點

  • Java面試高頻考點:反射機制使用大全
    作為一個Java開發工程師,在面試的過程中,反射機制也是經常會被問到的一個問題。例如Spring的IOC實現機制,其底層都是依賴於java的反射機制,因此,這是一個非常重要的知識點。對於初學java的同學來說,掌握其使用方法很有必要。
  • Java基礎教程:java反射機制教程
    Java反射說的是在運行狀態中,對於任何一個類,我們都能夠知道這個類有哪些方法和屬性。很多動力節點的學員在面試中都會被問到Java反射機制這個問題,為了幫助大家更好的掌握這個知識點,小編整理了一些資料分享給大家。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    Java 反射在Java的開發環境中,運行java文件需要使用:java xx.java 命令,運行java命令後「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程類的加載過程中也會對字節碼文件進行驗證
  • 學Java反射,看這篇就夠了 | 原力計劃
    或者說反射的使用場景(用途)有哪些?此物的用途?場景一:在日常的第三方應用開發過程中,經常會遇到某個類的某個成員變量、方法或是屬性是私有的或是只對系統應用開放,這時候就可以利用Java的反射機制通過反射來獲取所需的私有成員或是方法。
  • Java 反射:框架設計的靈魂
    在學習 Java 反射之前,先讓我們看看這幾個概念。,就是 Java 反射機制。總結一下Java 反射的作用:可以設計出更為通用和靈活的架構,很多框架為了保證其通用性,可以根據配置加載不用的類,這時候要用到反射。除此之外:動態代理:在不改變目標對象方法的情況下對方法進行增強,比如使用 AOP 攔截某些方法列印日誌,這就需要通過反射執行方法中的內容。
  • Java反射機制深入詳解
    一.概念反射就是把Java的各種成分映射成相應的Java類。Class類的構造方法是private,由JVM創建。反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。
  • 如何使用JAVA反射/JAVA反射實例
    JAVA反射技術,在平時我們的開發中雖然很少會用到例如讀取配製文件可能就用到這個技術,但在我們所使用的框架源碼中是經常會用到的。getName())  ; // 得到類的名稱  System.out.println("類名稱:" + c3.getName())  ; // 得到類的名稱 }};2、反射如何操作對象
  • Java 反射最佳實踐
    測試代碼:https://github.com/jOOQ/jOOR/tree/master/jOOR/src/test/java/org/joor/test固定連接:https://github.com/tianzhijiexian/Android-Best-Practices/blob/master/2015.9
  • 什麼是JAVA反射機制,詳細解讀JAVA面試的核心技術
    一、什麼叫Java反射機制?Java中的反射機制是指在運行狀態中,對於任意一個類,能夠動態獲取這個類中的屬性和方法;對於任意一個對象,都能夠任意調用它的屬性和方法。這種動態獲取類的信息以及動態調用對象方法的功能稱為Java的反射機制。
  • JAVA專業術語面試100問
    前言:面試技巧另外開篇再說,先上面試乾貨吧。Redis、消息隊列、SQL不要走開,關注後更精彩!1、面向對象的特點有哪些?4、java有哪些基本數據類型?5、數組有沒有length()方法?String有沒有length()方法?數組沒有length()方法,它有length屬性。String有length()方法。
  • 2020年Java基礎高頻面試題匯總
    java中提供了以下四種創建對象的方式:(1)new創建新對象(2)通過反射機制(3)採用clone機制(4)通過序列化機制17、有沒有可能兩個不相等的對象有相同的hashcodenal也是很多面試喜歡問的地方,但我覺得這個問題很無聊,通常能回答下以下5點就不錯了:(1)被nal修飾的類不可以被繼承(2)被nal修飾的方法不可以被重寫(3)被nal修飾的變量不可以被改變.如果修飾引用,那麼表示引用不可變,引用指向的內容可變.
  • Java反射初探 ——「當類也學會照鏡子」
    正文反射的作用 開門見山地說說反射的作用
  • 萬字梳理,帶你拿下 Java 面試題!
    這道題我想了幾天,之前和群裡小夥伴們探討每日一題的時候,問他們為什麼 length%hash == (n - 1) & hash,它們說相等的前提是 length 的長度 2 的冪次方,然後我回了一句難道 length 還能不是 2 的冪次方嗎?
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    下面請看java代碼我們通過ClassPathXmlApplicationContext類傳入applicationContext.xml配置文件的相對路徑,創建出spring的容器對象ApplicationContext,在通過容器對象中的方法獲取到Spring容器為我們創建的user對象,其實Spring兩個容器,除了
  • 京東面試:說說MySQL的架構體系
    字數:3620,閱讀耗時:4分35秒最近群裡一位兄弟在面試中被問到:「MySQL的架構體系是什麼」。雖然他搞java開發好幾年了,也一直使用的是MySQL資料庫,但是面對這個問題依然是一臉懵逼,還以為面試官要問索引、慢查詢、性能優化之類的(因為這些都是網上找點面試題背過了)。
  • 簡析:Java反射、Java反射定義、反射的基石
    Java反射定義在程序運行過程中,對於任意一個類,可以獲得該類的屬性和方法;對於任意一個對象,可以調用該對象的任意一個屬性和方法。在運行時動態獲取類的信息和動態調用對象的屬性和方法稱為Java反射機制。
  • 反射——Java高級開發必須懂得
    如果是類形式的,名稱為類的全稱,例如:c1的類類型名稱為int,c2的類類型名稱為java.lang.String。getSimpleName():不包含包名的類的名稱。描述:創建一個工具類名稱為ClassUtil,並且有一個靜態方法,參數為Object類型參數,首先獲取該對象的類類型,這裡使用第二種獲取方式,傳遞的是哪個對象,Class對象就是該對象類類型(這個功能是由native聲明的一個方法實現的,java中jni就是做本地方法的,該方法是由java來聲明,用C語言來實現),萬事萬物皆對象,方法同樣是對象
  • 面試官說我「可塑性強」是什麼意思?
    「引子」小A說昨天面試結束,在電梯裡遇到主面試官,她很和藹的說「你的可塑性還是很強的,回去等複試通知吧。」01面試官說我「可塑性強」是什麼意思?「可塑性」指一個人被繼續培養、改造的可行性及上升空間。「可塑性強」就是說這個人有學習的能力,有改變的可行性,包括思想,行為,技能等等。因此,並不是所有人都擁有可塑性的。
  • 「國家公務員考試總是不進面」國家公務員面試比例是什麼意思
    「國家公務員考試總是不進面」國家公務員面試比例是什麼意思由國家公務員考試網考試快訊欄目由提供,更多關於國考面試,國家公務員考試網,國家公務員考試考試快訊的內容,請關注國家公務員考試網/廣東公務員考試網!   2021國家公務員考試面試名單已發布!
  • 阿里巴巴Java方向面試題匯總(含答案)
    面小易說:對於伺服器而言,在面試中可能並不會過多涉及,相對而言,面小易認為像是Liunx、Tomcat這些背後的原理可能更受面試官的青睞。五、GET,POST請求之間的區別?基礎知識:HTTP的請求格式如下。