First, the previous two files have already printed the results
package ref.lect; import java.util.Date; public class Exe1 { public void publicMethod(String str){ System.out.println( "Called :: common method, parameter is :: " + str); } protected void protectedMethod(String str){ System.out.println( "Called :: protected method with parameter :: " + str); } void xMethod(String str){ System.out.println( "Called :: protected method with parameter :: " + str); } private int privateMethod(int num){ System.out.println( "Called :: protected method with arguments :: " + num); return num; } private int id; public String name; protected Date birthday; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
package ref.lect.invok; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Date; import ref.lect.Exe1; public class Envok1 { public static void main(String[] args) { try { System.out.println( "================Get class object===============" ); Class<?> exe1 = Class.forName("ref.lect.Exe1"); System.out.println("类名 :: "+exe1.getName()); System.out.println( "================Get method name===============" ); Method[] ms = exe1.getMethods(); for (int i = 0; i < ms.length; i++) { System.out.println("方法名"+i+":: "+ms[i]); } System.out.println( "================Get member name===============" ); Field[] fs = exe1.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { System.out.println("成员名"+i+":: "+fs[i]); } System.out.println("================= 设置列 private protected public ==============="); Object obj = Class.forName("ref.lect.Exe1").getConstructor().newInstance(); Field fn = Class.forName("ref.lect.Exe1").getField("name"); // public fn.set(obj, "刘德华"); Exe1 e1 = (Exe1)obj; System.out.println( "1:: Name value after set:: "+ e1.getName()); System.out.println( "1:: The set birthday value:: "+ e1.getBirthday()); System.out.println( "1:: id value after set:: "+ e1.getId()); Field fb = Class.forName("ref.lect.Exe1").getDeclaredField("birthday"); // protected fb.setAccessible(true); // 暴力反射 fb.set(obj, new Date()); Exe1 e2 = (Exe1)obj; System.out.println( "2:: Name value after set:: "+ e2.getName()); System.out.println( "2:: The set birthday value:: "+ e2.getBirthday()); System.out.println( "2:: id value after being set:: "+ e2.getId()); Field fi = Class.forName("ref.lect.Exe1").getDeclaredField("id"); // private fi.setAccessible(true); // 暴力反射 fi.set(obj, 10086); Exe1 e3 = (Exe1) obj; System.out.println( "3:: Name value after set:: "+ e3.getName()); System.out.println( "3:: The set birthday value:: "+ e3.getBirthday()); System.out.println( "3:: id value after set:: "+ e3.getId()); System.out.println("=======================调用method======================"); Object mPublic = Class.forName("ref.lect.Exe1").getConstructor().newInstance(); Method m1 = Class.forName("ref.lect.Exe1").getMethod("publicMethod",String.class); System.out.println(m1); Exe1 exe4 = (Exe1)mPublic; m1.invoke(exe4, "Zhang San" ); Object mPrivate = Class.forName("ref.lect.Exe1").getConstructor().newInstance(); Method m2 = Class.forName("ref.lect.Exe1").getDeclaredMethod("privateMethod",int.class); System.out.println(m2); m2.setAccessible(true); Exe1 exe5 = (Exe1)mPrivate; int num = (Integer) m2.invoke(exe5, 666); System.out.println( "Return result ==> num ==> :: " + num ); } catch (ClassNotFoundException e) { e.printStackTrace (); } catch (SecurityException e) { e.printStackTrace (); } catch (NoSuchMethodException e) { e.printStackTrace (); } catch (IllegalArgumentException e) { e.printStackTrace (); } catch (InstantiationException e) { e.printStackTrace (); } catch (IllegalAccessException e) { e.printStackTrace (); } catch (InvocationTargetException e) { e.printStackTrace (); }catch (NoSuchFieldException e) { e.printStackTrace (); } } }
Execution result:
=================Get class object================ classname::ref.lect.Exe1 ================Get method name============== Method name 0:: public java.lang.String ref.lect. Exe1.getName() method name 1:: public int ref.lect.Exe1.getId() method name 2:: public void ref.lect.Exe1.setName(java.lang.String) Method name 3:: public java.util.Date ref.lect.Exe1.getBirthday() Method name 4:: public void ref.lect.Exe1.publicMethod(java.lang.String) method name 5:: public void ref.lect.Exe1.setId( int ) Method name 6:: public void ref.lect.Exe1.setBirthday(java.util.Date) 方法名7:: public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException 方法名8:: public final void java.lang.Object.wait() throws java.lang.InterruptedException 方法名9:: public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException 方法名10:: public boolean java.lang.Object.equals(java.lang.Object) method name 11:: public java.lang.String java.lang.Object.toString() Method name 12:: public native int java.lang.Object.hashCode() 名 名 13 :: public final native java.lang.Class java.lang.Object.getClass () Method name 14 :: public final native void java.lang.Object.notify () Method name 15:: public final native void java.lang.Object.notifyAll() =================Get member name============ === MemberName0 :: private int ref.lect.Exe1.id membername1 :: public java.lang.String ref.lect.Exe1.name Member name 2:: protected java.util.Date ref.lect.Exe1.birthday ================= Set column private protected public ========== ===== 1 :: Name value after set:: Andy Lau 1:: Birthday value after set :: null 1:: id value after being set:: 0 2 :: Name value after being set:: Andy Lau 2:: Birthday value after being set:: Tue May 08 16:35:33 CST 2018 2:: id value after being set:: 0 3 :: Name value after being set:: Andy Lau 3:: Birthday value after being set:: Tue May 08 16:35:33 CST 2018 3:: id value after being set:: 10086 ======================== call method======================== public void ref.lect.Exe1.publicMethod(java.lang.String) The :: common method is called, the parameter is :: Zhang San private int ref.lect.Exe1.privateMethod(int) ::protected method called with arguments :: 666 return result ==> num ==> ::666