java反射學習demo

反射的簡單的例子練習

	package reflect;
	import java.lang.reflect.Constructor;
	import java.lang.reflect.Field;
	import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
	
	/**
	 * 反射的學習
	 * @author hjsjy
	 *
	 */
	public class Test01 {
		public int a;
		private int b;
		private String cString;
		public String name;
		protected String dString;
		int d;
		public Test01() {
			System.out.println("構造方法");
		}
		private Test01(int a) {
			System.out.println("私有的構造方法"+a);
		}
		public Test01(int a,int b) {
			System.out.println("構造方法兩個參數");
		}
		//**************成員方法***************//
		public void show1(String s){
			System.out.println("調用了:公有的,String參數的show1(): s = " + s);
		}
		protected void show2(){
			System.out.println("調用了:受保護的,無參的show2()");
		}
		void show3(){
			System.out.println("調用了:默認的,無參的show3()");
		}
		private String show4(int age){
			System.out.println("調用了,私有的,並且有返回值的,int參數的show4(): age = " + age);
			return "abcd";
		}
		@Override
		public String toString() {
			return "Test01 [a=" + a + ", b=" + b + ", cString=" + cString + ", name=" + name + ", dString=" + dString
					+ ", d=" + d + "]";
		}
		public static void main(String[] args) throws Exception{
			Class<?> class1 = Class.forName("reflect.Test01");
			 System.out.println("------------------獲取構造方法並使用-----------------------------------");
			 Constructor<?>[] constructors = class1.getConstructors();
			 for(Constructor aConstructor :constructors) {
				 System.out.println(aConstructor);
			 }
			 System.out.println("---------------------------------------------------------------------------");
			 constructors = class1.getDeclaredConstructors();
			for(Constructor constructor: constructors) {
				System.out.println(constructor);
			}
			System.out.println("---------------------------------------------------------------------------");
			Constructor<?> declaredConstructor = class1.getDeclaredConstructor(int.class);
			System.out.println(declaredConstructor);
			declaredConstructor.setAccessible(true);
			Object newInstance = declaredConstructor.newInstance(1);
			System.out.println("--------------------獲取成員變量並調用----------------------------------------");
			Field[] fields = class1.getFields();
			for(Field f:fields) {
				System.out.println(f);
			}
			System.out.println("---------------------------------------------------------------------------");
			Field[] declaredFields = class1.getDeclaredFields();
			for(Field field :declaredFields) {
				System.out.println(field);
			}
			Field field = class1.getField("name");	
			System.out.println(field);
			Object newInstance2 = class1.getConstructor().newInstance();
			field.set(newInstance2, "hjsjy");
			Test01 test01=(Test01)newInstance2;
			System.out.println(test01.name);
			System.out.println("---------------------------------------------------------------------------");
			Field declaredField = class1.getDeclaredField("b");
			System.out.println(declaredField);
			declaredField.setAccessible(true);
			declaredField.set(newInstance2, 188);
			System.out.println(newInstance2);
			System.out.println("-------------------------獲取方法並掉調用-----------------------------------");
			Method[] methods = class1.getMethods();
			for(Method method:methods) {
				System.out.println(method);
			}
			Method[] declaredMethods = class1.getDeclaredMethods();
			for(Method method: declaredMethods) {
				System.out.println(method);
			}
			Method method = class1.getMethod("show1", String.class);
			System.out.println(method);
			Object newInstance3 = class1.getConstructor().newInstance();
			method.invoke(newInstance3, "hjsjy");
			Method declaredMethod = class1.getDeclaredMethod("show4", int.class);
			System.out.println(declaredMethod);
			declaredMethod.setAccessible(true);
			Object invoke = declaredMethod.invoke(newInstance3, 500);
			System.out.println(invoke);	
		}
	}



輸出結果

------------------獲取構造方法並使用-----------------------------------
public reflect.Test01(int,int)
public reflect.Test01()
---------------------------------------------------------------------------
public reflect.Test01(int,int)
private reflect.Test01(int)
public reflect.Test01()
---------------------------------------------------------------------------
private reflect.Test01(int)
私有的構造方法1
--------------------獲取成員變量並調用----------------------------------------
public int reflect.Test01.a
public java.lang.String reflect.Test01.name
---------------------------------------------------------------------------
public int reflect.Test01.a
private int reflect.Test01.b
private java.lang.String reflect.Test01.cString
public java.lang.String reflect.Test01.name
protected java.lang.String reflect.Test01.dString
int reflect.Test01.d
public java.lang.String reflect.Test01.name
構造方法
hjsjy
---------------------------------------------------------------------------
private int reflect.Test01.b
Test01 [a=0, b=188, cString=null, name=hjsjy, dString=null, d=0]
-------------------------獲取方法並掉調用-----------------------------------
public static void reflect.Test01.main(java.lang.String[]) throws java.lang.Exception
public java.lang.String reflect.Test01.toString()
public void reflect.Test01.show1(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public static void reflect.Test01.main(java.lang.String[]) throws java.lang.Exception
public java.lang.String reflect.Test01.toString()
public void reflect.Test01.show1(java.lang.String)
protected void reflect.Test01.show2()
void reflect.Test01.show3()
private java.lang.String reflect.Test01.show4(int)
public void reflect.Test01.show1(java.lang.String)
構造方法
調用了:公有的,String參數的show1(): s = hjsjy
private java.lang.String reflect.Test01.show4(int)
調用了,私有的,並且有返回值的,int參數的show4(): age = 500
abcd

本文參考:https://blog.csdn.net/sinat_38259539/article/details/71799078?tdsourcetag=s_pcqq_aiomsg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章