什麼是JAVA反射機制,詳細解讀JAVA面試的核心技術

2020-12-14 地球科技那點事

一、什麼叫Java反射機制?

Java中的反射機制是指在運行狀態中,對於任意一個類,能夠動態獲取這個類中的屬性和方法;對於任意一個對象,都能夠任意調用它的屬性和方法。這種動態獲取類的信息以及動態調用對象方法的功能稱為Java的反射機制。總結就是:反射可以實現運行時知道任意一個類的屬性和方法。

二、Java當中為什麼需要反射機制?工作原理是什麼?

要明白為什麼需要反射機制,首先就得先清楚兩個概念:

(1)靜態編譯:在編譯時就必須要知道變量得類型才能編譯通過,比如C++,Java等編譯之前必須清楚的指明數據類型;

(2)動態編譯:顯然和上述概念相反,即在編譯時不需要立即知道變量的類型,在運行時指明其類型就行。

有上述概念之後便有了靜態語言和動態語言之分,而Java,C++就是典型的靜態語言,而Python,Ruby等則為動態語言。但是Java雖是一個靜態的解釋型語言,但其也有動態的性質------反射(Reflection)。用在Java身上指的是運行時加載,探知,使用編譯期間未知的classes。

下面探討一下反射是如何在僅知道類名的情況下能夠知道整個類的完整構造的(方法,屬性等)。

首先我們都清楚,Java是一種解釋型的語言,即編譯器首先將源碼編譯成class文件,然後虛擬機(JVM)再將class文件解釋給目標計算機執行。而這裡所說的反射機制操作的其實就是源碼編譯之後的class文件。首先將class文件加載到內存,然後從該文件中解剖出某個具體類的構造函數,方法和屬性,從而完全知道某個類的所有構造。

三、反射的使用及入門

在使用反射之前,最好清楚一個這樣的概念,即類類型。在程式語言中,各種數據都有其數據類型,那麼對於類本身而言,它也有自己的類型,即類類型,其實和普通的數據類型差不多,清楚這一點就行。類是java.lang.Class類的實例對象,而Class是所有類的類(There is a class named Class)。對於普通的類實例化時只需要new一個就行,但是要想用new實例化Class是行不通的,因為Class的構造器是私有的(自行查看源碼)。

1、獲取某個類(Student)的Class對象的三種方法:

(1)Class c1=Student.class;//通過Student類隱藏的靜態變量來獲取

(2)Class c2=Student.getClass();//通過Stduent的getClass()方法

(3)Class c3=Student.forName("com.tyf.reflect.Student");//com.tyf.reflect.Student為Student類的全類名。

注意:這裡的c1,c2,c3是完全一樣的,都是Class的對象(學名 類類型)。這裡不必糾結Student和c1,c2,c3是否一樣了(都叫Class對象),只需了解類類型是什麼就行。

相關焦點

  • Java面試高頻考點:反射機制使用大全
    作為一個Java開發工程師,在面試的過程中,反射機制也是經常會被問到的一個問題。例如Spring的IOC實現機制,其底層都是依賴於java的反射機制,因此,這是一個非常重要的知識點。對於初學java的同學來說,掌握其使用方法很有必要。
  • Java基礎教程:java反射機制教程
    Java反射說的是在運行狀態中,對於任何一個類,我們都能夠知道這個類有哪些方法和屬性。很多動力節點的學員在面試中都會被問到Java反射機制這個問題,為了幫助大家更好的掌握這個知識點,小編整理了一些資料分享給大家。
  • Java反射機制深入詳解
    一.概念反射就是把Java的各種成分映射成相應的Java類。Class類的構造方法是private,由JVM創建。反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。
  • Java 基礎與提高幹貨系列—Java 反射機制
    前言今天介紹下Java的反射機制,以前我們獲取一個類的實例都是使用new一個實例出來。那樣太low了,今天跟我一起來學習學習一種更加高大上的方式來實現。正文Java反射機制定義Java反射機制是指在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。用一句話總結就是反射可以實現在運行時可以知道任意一個類的屬性和方法。
  • 8千字java反射乾貨|java反射精講
    java反射機制精講目錄1. 反射機制的概念2. 反射的基礎Class類3. 反射的用法4.反射的應用示例反射機制的概念:在運行狀態中,對於任意一個類,都能夠獲取到這個類的所有屬性和方法,對於任意一個對象,都能夠調用它的任意一個方法和屬性(包括私有的方法和屬性),這種動態獲取的信息以及動態調用對象的方法的功能就稱為java語言的反射機制。反射被視為動態語言的關鍵。簡單來說反射就是java的各種成分映射成對應的java類。
  • 面試官:Java 反射是什麼?我回答不上來!
    一.概念反射就是把Java的各種成分映射成相應的Java類。Class類的構造方法是private,由JVM創建。反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。
  • Java語言的反射機制
    Java提供了一套機制來動態獲取類的信息以及動態調用對象的方法的功能,這套機制就叫——反射反射機制是如今很多流行框架的實現基礎,其中包括SSH(Struts、Spring、Hibernate)和SSM(SpringMVC、Spring、MyBatis)等。
  • Java反射機制,速度提高1000倍
    原文:Java Reflection, 1000x Faster作者:aka Nicolas Laurent譯者:Teixeira10譯者註:在本文中,作者例舉了幾個版本的代碼,利用java發射機制,逐步提高代碼運行速度,同時將Github上的代碼進行展示。
  • Java反射是什麼?看這篇絕對會了!
    反射是從1.2就有的,後面的三大框架都會用到反射機制,涉及到類"Class",無法直接new CLass(),其對象是內存裡的一份字節碼.  Class 類的實例表示正在運行的 Java 應用程式中的類和接口。枚舉是一種類,注釋是一種接口。每個數組屬於被映射為 Class 對象的一個類,所有具有相同元素類型和維數的數組都共享該 Class 對象。
  • 2019 最新 200 道 Java 面試題
    ,也為了更好的勝任技術經理的職位,在面試的這件事上,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。
  • Java 最常見的 200+ 面試題:面試必備
    作者:王磊來源:王磊的博客這份面試清單是我從 2015 年做 TeamLeader 之後開始收集的,一方面是給公司招聘用,另一方面是想用它來挖掘我在 Java 技術棧中的技術盲點,第二:這只是經驗的高度提煉,讓那些原本就掌握了技術卻不知道怎麼表達的人,學會如何在面試中展示自己。第三:如果只是死記硬背這些面試題,只要面試官再深入問糾一下,也可對這個人有一個準確的認識,之前說的「幫人作弊」的事就存在了。
  • 學Java反射,看這篇就夠了 | 原力計劃
    我們來一句話定義反射:反射就是把 Java 類中的各種成分映射成一個個的 Java 對象。不理解這句話什麼意思?沒關係,在我百度了幾分鐘後,找到三種解釋:解釋一:一個類有:成員變量、方法、構造方法、包等等信息,利用反射技術可以對一個類進行解剖,把各個組成部分映射成一個個對象。
  • Java 反射機制你還不會?那怎麼看 Spring 源碼?
    字節碼文件中,主要有類的屬性、構造函數、方法,當然還有類的其他信息,這個階段稱為源碼階段,通過類加載器進入內存,在內存中生成一個Class對象,這個階段為Class類對象階段,一個類的Class對象中存儲了類的全部信息,使用這個類對象的階段稱為Runtime運行時階段一種是傳統的RTTI(Run-Time Type Identification),它假定我們在編譯時已經知道了所有的類型信息;另一種是反射機制
  • 阿里P8教你Java註解與反射
    Ⅰ 什麼是註解Java 註解(Annotation)又稱 Java 標註,是 JDK5.0 引入的一種注釋機制。Java 語言中的類、方法、變量、參數和包等都可以被標註。和 Javadoc 不同,Java 標註可以通過反射獲取標註內容。在編譯器生成類文件時,標註可以被嵌入到字節碼中。Java 虛擬機可以保留標註內容,在運行時可以獲取到標註內容 。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    Java 反射在Java的開發環境中,運行java文件需要使用:java xx.java 命令,運行java命令後,便會啟動JVM,將字節碼文件加載到JVM中,然後開始運行;當運行java命令時,該命令將會啟動一個JVM
  • 你必須掌握的 21 個 Java 核心技術!
    JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。我在面試有超過3年Java經驗的開發者的時候, JVM幾乎就是一個必問的問題了。當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。
  • Java 反射,這篇寫的很透徹!
    Java技術棧www.javastack.cn關注閱讀更多優質文章一、反射機制是什麼?二、反射的具體使用三、反射的優缺點很多時候我們會遇到別人問一個問題:你給我講一下反射,到底是什麼東西?怎麼實現的?我們能用反射來做什麼?它有什麼優缺點?
  • Java核心技術精講PDF掃描版下載
    《Java核心技術精講》內容包括Java簡介、Java基礎語法、面向對象、異常的捕獲及處理、包及訪問控制權限、Java新特性、多線程、常用類庫、JavaIO操作、網絡編程、類集框架、Java資料庫編程、DAO設計模式、Eclipse開發工具。
  • Java基礎之反射篇
    Java基礎之反射篇「Hello,大家好!我是老醜。今天給大家帶來的知識點是反射」1. 反射是什麼?反射(Reflection),它允許在運行中的Java程序獲取自身的信息,並且可以操作類或者對象的內部屬性。2. 反射可以做什麼?3.
  • 一位Java後臺工程師的面試經歷
    技術方面:之前的技術團隊人數較少,面試的時候也比較偏重業務,相對對技術的考察不是很多。 旅遊網站主要是做自己的旅遊產品,去的部門是做後臺數據的,因為去的時候沒有帶簡歷而他們也沒有列印簡歷,整個面試就持續了十幾分鐘就結束了,這一面給我最大的教訓就是不要在周五的晚上去參加面試,而且一定要帶簡歷。