[Java] Javaのリフレクションメカニズム

Javaのリフレクションメカニズム

効果:

  • JAVAリフレクションメカニズムは実行状態にあり、どのクラスでも、このクラスのすべての属性とメソッドを知ることができます。
  • 任意のオブジェクトについて、任意のメソッドと属性を呼び出すことができます。
  • 動的に情報を取得し、オブジェクトメソッドを動的に呼び出す機能は、Java言語のリフレクションメカニズムと呼ばれます。

具体操作:

例:

package test;
 
public class Student {
    
    
	public Student(){
    
    
		
	}
	public Student(int num,String name){
    
    
		
	}
	private int num;
	
	public String name;
	
	protected String address;
}

リフレクションを使用してクラスを取得します。

  • クラスのオブジェクトを取得するには、object.getclass();を使用します。

      Student st=new Student();
    
          st.getclass();
    
  • クラスname.class;

     Student.class;
    
  • Class.forName( "パッケージ名、クラス名");

    Class.forName("test、Student");
    

リフレクションを使用して、クラスのコンストラクター、属性、およびメソッドを取得します。

  • クラスのコンストラクターを取得する
    //测试类中的代码
        Class c=Student.class;
		//getConstructors只能获得公共构造器//getDeclaredConstructors获得所有构造器
        //constructor是获取构造器时所用
		Constructor[] cs= c.getConstructors;
		for (Constructor constructor : cs) {
    
    
		Student st=(Student)constructor.newInstance();
		System.out.println(st);
}
 
  • クラスの属性を取得する

    public class Test{
          
          
        
           public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
          
          
            //获得反射,获取属性的关键代码
     
            Class c=Student.class;
    		Field[] fs=	c.getDeclaredFields();
    		for (Field field : fs) {
          
          
    			System.out.println(field);
    		}
           //输出的结果为
           /*   private int com.qm.test.Student.num
            *   public java.lang.String com.qm.test.Student.name
            *   protected java.lang.String com.qm.test.Student.address
            */
    }
    }
    
  • クラスのメソッドを取得する

    public class Test{
          
          
        
           public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
          
          
         //获取方法的关键代码
     
            Class c=Student.class;
    		Method[] ms=c.getMethods();
    		for (Method method : ms) {
          
          
    			System.out.println(method);
    		}
     
        //此段代码将会输出Student类中继承了Object类的一些方法
     
    }
    }
    


    *免責事項:このブログ投稿は学習ノートです。新人チュートリアルおよびその他のネットワークリソースを参照してください。違反やエラーがある場合は、プライベートメッセージでお知らせください。*

おすすめ

転載: blog.csdn.net/qq_42380734/article/details/105395719