習得する必要があるJavaリフレクションメカニズムに関する知識のまとめ
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。【翻译于 官方文档】
この記事では、次の側面からリフレクションの知識について説明します:
クラスの使い方
メソッドのリフレクション
コンストラクターのリフレクション
メンバー変数のリフレクション
1. クラスとは何か クラス
オブジェクト内-指向の世界では、すべてがオブジェクトです。クラスはオブジェクトであり、クラスは java.lang.Class クラスのインスタンス オブジェクトです。また、クラス class は Java 仮想マシンによってのみ新規作成できます。すべてのクラスは Class クラスのインスタンス オブジェクトです。このインスタンス オブジェクトには 3 つの式メソッドがあります:
public class User{
}
public class ClassTest{
User u=new User();
//メソッド 1:
Class c1=User.class;
//メソッド 2 :
Class c2=u.getClass();
//メソッド 3:
Class c3=Class.forName("com.forezp.User");
//型を通じてクラスのインスタンス オブジェクトを作成できますクラス
のユーザー user=(User)c1.newInstance();
}
2. クラスの動的ロードclasses
Class.forName (クラスの完全名) このメソッドは、クラスのタイプを表すだけではありません。 class ですが、動的にロードされた class も表します。コンパイル時にロードされるクラスは静的にロードされ、実行時にロードされるクラスは動的にロードされます。
クラス c1=String.class;
クラス c2=int.class;
クラス c3=void.class;
System.out.println(c1.getName());
System.out.println(c2.getSimpleName( ));
クラスのすべてのメソッドを取得して出力します:
public static void printClassInfo(Object object){
Class c=object.getClass();
System.out.println("クラスの名前: "+ c .getName());
mes=c. 0; i & lt;methods.Length; i ++) {
// 取得メソッドのメソッド
クラス ReturnType = メソッド [i] .GetRespe ();
SYSTEM.OUT.print ( ntype.getName () ;
(クラス class1:parameterTypes){
System.out.print(class1.getName()+",") ;
}
System.out.println(")");
}
}
public class Reflect Test {
public static void main (string [] args) {
string s = "ss"
classutil.printclassinfo; (s); メンバー変数情報
public static void printFiledInfo(Object o){
Class c=o.getClass();
' ' のメンバー変数情報
'' ‐ アウトアウトオーバーズ ‐ オーバー‐ ‐ ‐ ‐ and ‐ ‐ ‐ ‐ ‐ ‐ ‐ for (Field f:fileds){
// メンバー変数の型を取得します
Class filedType=f.getType();
-- System.out.println (filedType.getName()+" "+f.getName());
}
public static void main(String[] args){
String s="ss";
fo(s);
を使用する } }
実行:
[C value int hash long serialVersionUID [Ljava.io.ObjectStreamField; serialPersistentFields java.util.Comparator CASE_INSENSITIVE_ORDER int HASHING_SEED int hash32
五、获取构造函数的信息
public static void printConstructInfo(Object o){
Class c=o.getClass();
Constructor[] constructors=c.getDeclaredConstructors();
for (Constructor con:constructors){
System.out.print(con.getName()+”(“);
Class[] typeParas=con.getParameterTypes();
for (Class class1:typeParas){
System.out.print(class1.getName()+” ,”);
}
System.out.println(“)”);
}
}
public static void main(String[] args){
String s="ss";
//ClassUtil.printClassInfo(s);
//ClassUtil.printFiledInfo(s);
ClassUtil.printConstructInfo(s);
}
运行:
java.lang.String([B ,) java.lang.String([B ,int ,int ,) java.lang.String([B ,java.nio.charset.Charset ,) java.lang.String([B ,java.lang.String ,) java.lang.String([B ,int ,int ,java.nio.charset.Charset ,) java.lang.String(int ,int ,[C ,) java.lang.String([C ,boolean ,) java.lang.String(java.lang.StringBuilder ,) java.lang.String(java.lang.StringBuffer ,) ...
六、方法反射的操作
获取一个方法:需要获取方法的名称和方法的参数才能决定一个方法。
方法的反射操作:
method.invoke(对象,参数列表);
举个例子:
class A{
public void add(int a,int b){
System.out.print(a+b);
}
public void toUpper(String a){
System.out.print(a.toUpperCase());
}
}
public static void main(String[] args) {
A a=new A();
Class c=a.getClass();
try {
Method method=c.getMethod("add",new Class[]{int.class,int.class});
//也可以 Method method=c.getMethod("add",int.class,int.class);
//方法的反射操作
method.invoke(a,10,10);
}catch (Exception e){
e.printStackTrace();
}
}
运行:
20
本篇文章已经讲解了java反射的基本用法, 它可以在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
以上が習得する必要があるJavaリフレクションメカニズムに関する知識のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Java リフレクション メカニズムの代替手段には次のものがあります。 1. 注釈処理: 注釈を使用してメタデータを追加し、コンパイル時に情報を処理するコードを生成します。 2. メタプログラミング: 実行時にコードを生成および変更し、動的にクラスを作成して情報を取得できます。 3. プロキシ: 既存のクラスと同じインターフェイスを持つ新しいクラスを作成します。これにより、実行時の動作を強化または変更できます。

Java リフレクション メカニズムを使用すると、プログラムはソース コードを変更せずにクラスの動作を動的に変更できます。 Class オブジェクトを操作することで、newInstance() によるインスタンスの作成、プライベート フィールドの値の変更、プライベート メソッドの呼び出しなどが可能になります。ただし、リフレクションは予期しない動作やセキュリティ上の問題を引き起こす可能性があり、パフォーマンスのオーバーヘッドがあるため、注意して使用する必要があります。

Java は世界で最も広く使用されているプログラミング言語の 1 つであり、例外処理は Java プログラミング プロセスの非常に重要な部分です。この記事では、Java の NoSuchFieldException 例外の発生方法と対処方法を紹介します。 1. NoSuchFieldException の定義 NoSuchFieldException は Java のチェック例外であり、指定されたフィールドが見つからない場合にスローされます。

Java リフレクション メカニズムは、Spring フレームワークで次の側面で広く使用されています。 依存関係の注入: Bean のインスタンス化と、リフレクションによる依存関係の注入。型変換: リクエストパラメータをメソッドパラメータの型に変換します。永続化フレームワークの統合: エンティティ クラスとデータベース テーブルのマッピング。 AspectJ サポート: メソッド呼び出しをインターセプトし、コードの動作を強化します。動的プロキシ: プロキシ オブジェクトを作成して、元のオブジェクトの動作を強化します。

回答: リフレクション メカニズムにより、Java プログラムはリフレクション API を通じて実行時にクラスとオブジェクトを検査および変更できるようになります。これを使用して、Java 同時実行で柔軟な同時実行メカニズムを実装できます。アプリケーション: スレッドを動的に作成します。スレッドの優先順位を動的に変更します。依存関係を注入します。

リフレクションは通常、プログラムが実行中にそれ自体を検査し、ロジックを変更する機能として定義されます。あまり専門的ではない用語で言うと、リフレクションとは、オブジェクトにそのプロパティとメソッドを伝えるように要求し、それらのメンバー (プライベート メンバーも含む) を変更することです。このコースでは、これを実現する方法と、それがいつ役立つかを詳しく見ていきます。ちょっとした歴史 プログラミング時代の初めに、アセンブリ言語が登場しました。アセンブリ言語で書かれたプログラムは、コンピュータ内の物理レジスタに存在します。その構成、メソッド、および値は、レジスタを読み取ることでいつでも確認できます。さらに、実行中にこれらのレジスタを変更するだけでプログラムを変更できます。実行中のプログラムに関する深い知識が必要ですが、本質的には反映的なものです。他のクールなおもちゃと同じように

Java リフレクションは、動的なサービス検出 (サービス レジストリからサービス クラスを取得し、メソッドを呼び出す)、自動拡張と縮小 (システム インジケータを監視し、サービス インスタンスの数を調整する)、動的な構成の読み込み、コードなど、クラウド コンピューティングで広く使用されています。生成とカスタム例外処理。リフレクションを通じて、プログラムはクラウド コンピューティング環境の動的で分散された特性に簡単に適応し、自動展開などの自動タスクを実装できます。

PHP リフレクションは、ランタイム コードの構造情報を取得するための強力なメカニズムです。1. クラスとメソッドの構造を確認します。3. 新しいクラスのインスタンスを作成します。メソッドのパラメータ情報を取得します。 6. 属性値を変更します。 7. プライベート メソッドを呼び出します。リフレクションを通じて、コードのスケーラビリティと柔軟性を強化し、より強力な PHP アプリケーションを開発できます。
