java反射學習總結

類的封裝類:Class類型的介紹
java

//任何一個類都是Class的實例對象,這個實例對象有三種表示方式
//第一種表示方式--->實際在告訴咱們任何一個類都有一個隱含的靜態成員變量class
		Class c1 = Foo.class;
//第二中表達方式  已經知道該類的對象經過getClass方法
		Class c2 = foo1.getClass();
//無論c1  or c2都表明了Foo類的類類型,一個類只多是Class類的一個實例對象
		System.out.println(c1 == c2);
//第三種表達方式
		Class c3 = null;
		try {
			c3 = Class.forName("com.reflect.Foo");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

方法的封裝類:Method類介紹函數

//要獲取print(int ,int )方法  1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型
		A a1 = new A();
		Class c = a1.getClass();
		/*
		 * 2. 獲取方法 名稱和參數列表來決定  
		 * getMethod獲取的是public的方法
		 * getDelcaredMethod本身聲明的方法
		 */
	    try {
			//Method m =  c.getMethod("print", new Class[]{int.class,int.class});
	    	Method m = c.getMethod("print", int.class,int.class);
	    	
	    	//方法的反射操做  
	    	//a1.print(10, 20);方法的反射操做是用m對象來進行方法調用 和a1.print調用的效果徹底相同
	        //方法若是沒有返回值返回null,有返回值返回具體的返回值
	    	//Object o = m.invoke(a1,new Object[]{10,20});
	    	Object o = m.invoke(a1, 10,20);
	    	System.out.println("==================");
	    	//獲取方法print(String,String)
             Method m1 = c.getMethod("print",String.class,String.class);
             //用方法進行反射操做
             //a1.print("hello", "WORLD");
             o = m1.invoke(a1, "hello","WORLD");
             System.out.println("===================");
           //  Method m2 = c.getMethod("print", new Class[]{});
                Method m2 = c.getMethod("print");
               // m2.invoke(a1, new Object[]{});
                m2.invoke(a1);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

對應的有code

成員變量的封裝類:Field對象

構造函數的封裝類:Constructorget

相關文章
相關標籤/搜索