この記事では、クラスの動的ロード、メンバー変数の取得、コンストラクター情報など、Java リフレクション機構に関連する内容を主に紹介します。必要な方は参照してください。
Java プログラムを実行するには、Java 仮想マシンによって Java クラスがロードされる必要があることは誰もが知っています。 Java クラスは、Java 仮想マシンによってロードされないと正常に実行できません。これで、実行するすべてのプログラムは、必要なクラスがコンパイル中にロードされたことを認識します。
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=(User)c1.newInstance(); }
2. クラスの動的ロード class
Class.forName (クラスの完全名) このメソッドはクラスの型を表すだけでなく、動的にロードされたクラス。コンパイル時にロードされるクラスは静的にロードされ、実行時にロードされるクラスは動的にロードされます。
3. メソッド情報を取得する
基本的なデータ型と void キーワードは、get
ame(); を通じてクラスの名前を取得できます。
Class c1=String.class; Class c2=int.class; 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()); /** * 一个成员方法就是一个method对象 * getMethod()所有的 public方法,包括父类继承的 public * getDeclaredMethods()获取该类所有的方法,包括private ,但不包括继承的方法。 */ Method[] methods=c.getMethods();//获取方法 //获取所以的方法,包括private ,c.getDeclaredMethods(); for(int i=0;i<methods.length;i++){ parametertypes="methods[i].getParameterTypes();" pre="" returntype="methods[i].getReturnType();"></methods.length;i++){>
public class ReflectTest { public static void main(String[] args){ String s="ss"; ClassUtil.printClassInfo(s); } }
Run:
类的名称:java.lang.String booleanequals(java.lang.Object,) java.lang.StringtoString() inthashCode() …
4番目に、メンバー変数の情報を取得します
あなたクラスのメンバー変数情報も取得できます
public static void printFiledInfo(Object o){ Class c=o.getClass(); /** * getFileds()获取public * getDeclaredFields()获取所有 */ Field[] fileds=c.getDeclaredFields(); for(Field f:fileds){ //获取成员变量的类型 Class filedType=f.getType(); System.out.println(filedType.getName()+" "+f.getName()); } }
public static void main(String[] args){ String s="ss"; //ClassUtil.printClassInfo(s); ClassUtil.printFiledInfo(s); }
実行:
[C value int hash long serialVersionUID [Ljava.io.ObjectStreamField; serialPersistentFields java.util.Comparator CASE_INSENSITIVE_ORDER int HASHING_SEED int hash32
5. コンストラクター情報を取得します
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); }
走る:
6. メソッドリフレクションの操作
メソッドの取得: メソッドを決定するには、メソッドの名前とメソッドのパラメータを取得する必要があります。
メソッドのリフレクション操作:
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()); } }
Run:
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(); } }
この記事ではJavaの基本的な使い方を説明しました。 OK クラスを決定します。実行時に任意のオブジェクトが属するもの、実行時に任意のクラスのメンバー変数とメソッドを決定する、動的プロキシを生成する。
以上がJavaのリフレクション機構に関する注意点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
