リフレクション (リフレクション) は、動的言語としてみなされるための鍵です。リフレクション メカニズムにより、プログラムは実行中にリフレクション API を通じて任意のクラスの内部情報を取得できます。任意のオブジェクト、内部プロパティおよびメソッドを直接操作できます。クラスがロードされると、ヒープ メモリのメソッド領域に Class 型オブジェクトが生成されます (クラスには Class オブジェクトが 1 つだけあります)。このオブジェクトには、クラスの完全な構造情報が含まれています。このオブジェクトを通してクラスの構造を見ることができます。このオブジェクトは鏡のようなものです。この鏡を通してクラスの構造を見ることができるので、これを反射と呼びます。
java.lang.Class
: クラス
#java.lang.reflect.Method## を表します# : クラス
java.lang.reflect.Fieldのメソッドを表します: クラス
java.lang.reflectのメンバー変数を表します。 Constructor: クラスを表すコンストラクター
static Class forName(String name) 指定されたクラス名 name の Class オブジェクトを返します
Object newInstance( ) なしパラメータ コンストラクタを呼び出し、クラス オブジェクトのインスタンスを返します。
getName() エンティティの名前を返します (クラス、インターフェイス、配列クラス、基本型、または void)。この Class オブジェクトによって表されます
Class getSuperClass() 現在の Class オブジェクトの親クラスの Class オブジェクトを返します
現在の Class オブジェクトのインターフェイスを取得します
このクラスのクラス ローダーを返します
戻り値このクラスによって表されるエンティティのスーパークラスを表すクラス
特定の Constructor オブジェクトを含む配列を返します
Field オブジェクトの配列を返します Array Method
Method オブジェクトを返します。このオブジェクトの正式パラメータ タイプは paramType です。 例:
public class Person { private String name; private int age; public Person() { System.out.println("Person类被初始化了。。。。。^_^"); } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Reflection
public class ClassDemo { public static void main(String[] args) throws Exception { // 1. 创建Class对象 //Class<Person> clazz = (Class<Person>) Class.forName("Person"); Class<?> clazz =Class.forName("Person"); // 2. 通过Class对象调用其方法 // 2.1. 通过反射来实例化对象 //Person person = clazz.newInstance(); Object o = clazz.newInstance(); // 此名就相当于 Person p = new Person() // 2.2. 获取类的完整类名称(包名+类名) String name = clazz.getName(); System.out.println(name); // 2.3. 获取类的简单名称,就是类的名称,不含包名 System.out.println(clazz.getSimpleName()); // 2.4. 获取构造器 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor.getName()); } // 2.5. 获取字段 Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); } // 2.6. 获取方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } } }
3. クラス オブジェクトを作成する 4 つの方法
public class Demo { public static void main(String[] args) throws Exception { // 第一种方式:调用Class.forName() Class clazz =Class.forName("java.lang.String"); // 第二种方式:通过类的字节码文件来创建 Class clazz1 = String.class; // 第三种方式:通过调用对象的getClass()方法来创建 String str = new String(); Class clazz2 = str.getClass(); // 第四种:通过类装载器来创建 ClassLoader loader =String.class.getClassLoader(); Class<?> clazz3 =loader.loadClass("java.lang.String"); } }
以上がJavaにおけるリフレクションの意味と役割は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。