国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる Java リフレクション メカニズムの詳細な紹介

Java リフレクション メカニズムの詳細な紹介

Nov 25, 2019 pm 02:48 PM
java 反射機構(gòu)

Java リフレクション メカニズムの詳細な紹介

この記事は、Java プログラミング入門 コラムで紹介され、Java のリフレクション メカニズムを詳しく紹介し、このメカニズムを理解していない學生を助けることを目的としています。

java リフレクション

メカニズムは実行狀態(tài)にあります。どのクラスについても、このクラスのすべてのプロパティとメソッド (プライベートなものを含む) を知ることができます。 object は、そのメソッドとプロパティのいずれかを呼び出すことができます。情報を動的に取得し、オブジェクトのメソッドを動的に呼び出すこの機能は、Java のリフレクション メカニズムと呼ばれます。

目的:

実行時にオブジェクトが屬するクラスを決定します。

実行時に任意のクラスのオブジェクトを構(gòu)築します。

実行時にクラスのメンバー変數(shù)とメソッドを判斷します。

実行時に任意のオブジェクトのメソッドを呼び出します。

動的プロキシを生成します。

リフレクション関連クラス

Java リフレクション メカニズムの詳細な紹介

クラスクラス

Javaプログラムで取得したクラスオブジェクト

1. Class クラスの靜的メソッド forName(String clazzName) を使用します。このメソッドでは、文字列パラメーターを渡す必要があります。その値はクラスの完全修飾名です (完全なパッケージ名を追加する必要があります)。

2. 特定のクラスの class 屬性を呼び出して、そのクラスに対応する Class オブジェクトを取得します。

3. オブジェクトの getClass() メソッドを呼び出します。このメソッドは、java.lang.Object クラスのメソッドです。

フィールド

Field[] allFields = class2.getDeclaredFields();//獲取class對象的所有屬性
Field[] publicFields = class2.getFields();//獲取class對象的public屬性
Field ageField = class2.getDeclaredField("age");//獲取class指定屬性,可以獲得私有屬性
Field desField = class2.getField("des");//獲取class指定的public屬性

メソッド

Method[] methods = class2.getDeclaredMethods();//獲取class對象的所有聲明方法
Method[] allMethods = class2.getMethods();//獲取class對象的所有public方法 包括父類的方法
Method method = class2.getMethod("info", String.class);//返回次Class對象對應(yīng)類的、帶指定形參列表的public方法
Method declaredMethod = class2.getDeclaredMethod("info", String.class);//返回次Class對象對應(yīng)類的、
帶指定形參列表的方法

コンストラクター

Constructor<?>[] allConstructors = class2.getDeclaredConstructors();//獲取class對象的所有聲明構(gòu)造函數(shù)
Constructor<?>[] publicConstructors = class2.getConstructors();//獲取class對象public構(gòu)造函數(shù)
Constructor<?> constructor = class2.getDeclaredConstructor(String.class);//獲取指定聲明構(gòu)造函數(shù)
Constructor publicConstructor = class2.getConstructor(String.class);//獲取指定聲明的public構(gòu)造函數(shù)

リフレクションによるインスタンス オブジェクトの生成

1. Class オブジェクトの newInstance() メソッドを使用して、Class オブジェクトの対応するクラスのインスタンスを作成します。このメソッドでは、Class オブジェクトの対応するクラスにデフォルト コンストラクターがある必要があり、 newInstance() メソッドが実行されると、実際にデフォルト コンストラクターを使用してクラスのインスタンスが作成されます。

2. まず、Class オブジェクトを使用して指定された Constructor オブジェクトを取得し、次に Constructor オブジェクトの newInstance() メソッドを呼び出して、Class オブジェクトの対応するクラスのインスタンスを作成します。このようにして、指定したコンストラクターを使用してインスタンスを作成することを選択できます。

メソッドの呼び出し

1. Class オブジェクトの getMethods() メソッドまたは getMethod() メソッドを通じて指定されたメソッドを取得し、Method 配列またはオブジェクトを返します。

2. Method オブジェクトの Object invoke(Object obj, Object… args) メソッドを呼び出します。最初のパラメータはメソッドを呼び出すインスタンス オブジェクトに対応し、2 番目のパラメータはメソッドのパラメータに対応します。

コード例:

リフレクションとは何ですか?

package am;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import javax.activation.FileDataSource;
/**
 * 反射是什么:
 *    java中的反射:就是在類的加載過程中,發(fā)現(xiàn)類的屬性和方法構(gòu)造方法等信息。可以獲得類的屬性值,可以調(diào)用類的方法。
 *    
 * 
 * 反射獲得類的對象。
 *
 */
public class Demo01 {
	public static void main(String[] args) throws Exception{
		// 通過反射,獲取類的對象。
		Object obj = create("am.Foo");;
		Foo foo = (Foo)obj;
		System.out.println(foo.a);
		double dou = foo.show(12, "hello");
		System.out.println(dou);
		System.out.println("======================================");
		// 獲得類的屬性
		showField(obj);
		System.out.println("======================================");
		double a = (double)getFieldValue(obj, "b");
		System.out.println(a);
		System.out.println("========================================");
		// 通過反射調(diào)用方法。
		Object ob = getMethodValue(obj,"show",new Class[]{int.class,String.class},new Object[]{23,"abc"});
		double douValue = (double)ob;
		System.out.println(douValue);
	}
//通過反射調(diào)用方法,哪個對象,什么名稱,參數(shù)類型,參數(shù)值
	public static Object getMethodValue(Object obj,String method,Class[] paramType,Object[] param)
	throws Exception{
		Class cla = obj.getClass();
		Method me = cla.getDeclaredMethod(method, paramType);
		Object o = me.invoke(obj, param);
		return o;
	}
	// 獲取類的屬性值:
	public static Object getFieldValue(Object obj,String name)throws Exception{
		Class cla = obj.getClass();// 獲取字節(jié)碼對象。
		Field field = cla.getDeclaredField(name);// 通過屬性的名稱。獲取當前屬性。
		Object result = field.get(obj);
		return result;
	}
	// 通過反射,可以獲得類的屬性信息以及方法信息。
	public static void showField(Object obj){
		// java中對屬性類。 Field   方法類:Method
		Class cla = obj.getClass();
		System.out.println("獲取類名:"+cla.getName());
		System.out.println("======================================");
		// 獲取類的屬性:
		Field[] fields = cla.getDeclaredFields();// 獲取公開的屬性。
		for(Field field : fields){
			System.out.println("獲取類的屬性類型"+field.getType());
			System.out.println("獲取類的屬性名稱:"+field.getName());
		}
		System.out.println("======================================");
		// 獲取類的方法。
		Method[] methods = cla.getDeclaredMethods();
		for(Method method : methods){
			System.out.println("獲取方法的返回值類型:"+method.getReturnType());
			System.out.println("獲取方法名稱:"+method.getName());
			System.out.println("獲取方法的參數(shù)類型。"+Arrays.toString(method.getParameterTypes()));
		}
		System.out.println("=======================================");
		// 獲取類的構(gòu)造方法:
		Constructor[] cons = cla.getDeclaredConstructors();
		for(Constructor con : cons){
			System.out.println("構(gòu)造方法的名字:"+con.getName());
			System.out.println("構(gòu)造方法參數(shù)類型:"+Arrays.toString(con.getParameterTypes()));
		}	
	}
	// 如何反射類的實例。
	public static Object create(String name) throws Exception{
		// 反射的方法。Class.forName();
		Class cla = Class.forName(name);
		// 如何獲得Object類型對象。
		Object obj = cla.newInstance();
		return obj;
	}
}
// 模擬類。
class Foo{
	int a = 10;
	double b = 20;
	public double show(int p,String str){
		System.out.println("調(diào)用方法傳入的值是:"+str);
		return a+b+p;
	}
	public Foo(){
	}
	public Foo(int a,int b){
	}
}

関連する學習ビデオの推奨事項: Java ビデオ チュートリアル

以上がJava リフレクション メカニズムの詳細な紹介の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

HTTPミドルウェアロギングの例を例に進めます HTTPミドルウェアロギングの例を例に進めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles