亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java基礎(chǔ) java中什麼是反射?

java中什麼是反射?

Nov 11, 2019 am 10:04 AM
java 反射

java中什麼是反射?

什麼是反射(Reflection )?

主要是指程式可以存取、偵測和修改它本身狀態(tài)或行為的一種能力。

什麼是Java反射?

Java反射指的是在Java程式運行狀態(tài)中,對於任何一個類,都可以獲得這個類別的所有屬性和方法;對於給定的一個對象,都能夠調(diào)用它的任意一個屬性和方法。這種動態(tài)取得類別的內(nèi)容以及動態(tài)呼叫物件的方法稱為反射機制。

Java反射機制主要提供了以下功能:

* 1.在執(zhí)行時判斷任意一個物件所屬的類別。

* 2.執(zhí)行時建構(gòu)任意一個類別的物件。

* 3.在執(zhí)行時判斷任意一個類別所具有的成員變數(shù)和方法。

* 4.執(zhí)行時呼叫任意一個物件的方法。?

Java的反射機制主要是用來分析類別能力,我們可以在執(zhí)行時間獲得程式或程式集中每個類型的成員和成員的資訊。在程式中一般的物件類型在編譯期就確認(rèn)下來了,Java的反射機制可以在運行期動態(tài)建立對象,並呼叫其屬性。所以反射的核心是在運行期才動態(tài)載入類別或呼叫方法存取屬性,它不需要在事先知道運行物件是誰。

反射可以用來:

運行期建構(gòu)任意一個類別的物件運行期判斷任意一個物件的所屬類別/是否是某個類別的實例運行期取得任意一個類別具有的屬性和方法,包括繼承的公有方法運行期呼叫任意一個物件的方法。

範(fàn)例:

a) 取得方法

程式DumpMethods類別示範(fàn)了Reflection API的基本作用,它讀取命令列參數(shù)指定的類別名,然後列印這個類別所具有的方法資訊?!?/p>

import java.lang.reflect.Method;
 
public class DumpMethods
{
    public static void main(String[] args) throws Exception //在方法后加上這句,異常就消失了
    {
        //獲得字符串所標(biāo)識的類的class對象
        Class<?> classType = Class.forName("java.lang.String");//在此處傳入字符串指定類名,所以參數(shù)獲取可以是一個運行期的行為,可以用args[0]
 
        //返回class對象所對應(yīng)的類或接口中,所聲明的所有方法的數(shù)組(包括私有方法)
        Method[] methods = classType.getDeclaredMethods();
 
        //遍歷輸出所有方法聲明
        for(Method method : methods)
        {
            System.out.println(method);
        }
    }
 
}

b) 透過反射呼叫方法?

import java.lang.reflect.Method;
 
public class InvokeTester
{
    public int add(int param1, int param2)
    {
        return param1 + param2;
 
    }
 
    public String echo(String message)
    {
        return "Hello: " + message;
    }
 
    public static void main(String[] args) throws Exception
    {
 
        // 以前的常規(guī)執(zhí)行手段
        InvokeTester tester = new InvokeTester();
        System.out.println(tester.add(1, 2));
        System.out.println(tester.echo("Tom"));
        System.out.println("---------------------------");
 
        // 通過反射的方式
 
        // 第一步,獲取Class對象
        // 前面用的方法是:Class.forName()方法獲取
        // 這里用第二種方法,類名.class
        Class<?> classType = InvokeTester.class;
 
        // 生成新的對象:用newInstance()方法
        Object invokeTester = classType.newInstance();
        System.out.println(invokeTester instanceof InvokeTester); // 輸出true
 
        // 通過反射調(diào)用方法
        // 首先需要獲得與該方法對應(yīng)的Method對象
        Method addMethod = classType.getMethod("add", new Class[] { int.class,
                int.class });
        // 第一個參數(shù)是方法名,第二個參數(shù)是這個方法所需要的參數(shù)的Class對象的數(shù)組
 
        // 調(diào)用目標(biāo)方法
        Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 });
        System.out.println(result); // 此時result是Integer類型
 
        //調(diào)用第二個方法
        Method echoMethod = classType.getDeclaredMethod("echo", new Class[]{String.class});
        Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"});
        System.out.println(result2);
 
    }
}

以上是java中什麼是反射?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動提交模式,再執(zhí)行多個操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點實現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(JVM)內(nèi)部 了解Java虛擬機(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

See all articles