public java.lang.String com.tao.Student.toString()
public java.lang.String com.tao.Student.method3(java.lang.String,int)
public void com.tao.Student.method2(java.lang.String)
public void com.tao.Student.method1()
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 java.lang.String com.tao.Student.toString()
private void com.tao.Student.function()
public java.lang.String com.tao.Student.method3(java.lang.String,int)
public void com.tao.Student.method2(java.lang.String)
public void com.tao.Student.method1()
-------------------------------
method
public void com.tao.Student.method1()
public java.lang.String com.tao.Student.method3(java.lang.String,int)
(八)反射获取成员方法并使用练习
练习:通过反射实现如下操作 Student s = new Student(); s.method1(); s.method2(“林青霞”); String ss = s.method3(“林青霞”,30); System.out.println(ss); s.function();
publicclassReflectDemo{publicstaticvoidmain(String[] args)throwsException{//获取Class对象Class<?> c =Class.forName("com.tao.Student");//Student s = new Student();Constructor<?> con = c.getConstructor();Object obj = con.newInstance();//s.method1()Method m1 = c.getMethod("method1");m1.invoke(obj);//method//s.method2Method m2 = c.getMethod("method2",String.class);m2.invoke(obj,"林青霞");//method:林青霞//String ss = s.method3("林青霞",30)'//System.out.println(ss)Method m3 = c.getMethod("method3",String.class,int.class);Object o = m3.invoke(obj,"林青霞",30);System.out.println(o);//林青霞,30//s.function()Method m4 = c.getDeclaredMethod("function");m4.setAccessible(true);m4.invoke(obj);//function}}
(九)反射练习
练习1:我有一个ArrayList集合,现在我想在这个集合中添加一个字符串数据,如何实现?
importjava.lang.reflect.Method;importjava.util.ArrayList;publicclassDemo{publicstaticvoidmain(String[] args)throwsException{//创建集合ArrayList<Integer> array =newArrayList<>();Class<?extendsArrayList> c = array.getClass();Method m = c.getMethod("add",Object.class);m.invoke(array,"hello");m.invoke(array,"world");m.invoke(array,"java");//反射可以越过泛型的检查,获取到原始的方法所需要的参数类型System.out.println(array);//[hello, world, java]}}
练习2:通过配置文件运行类中的方法
className=com.tao.Student
methodName=study
importjava.io.FileReader;importjava.lang.reflect.Constructor;importjava.lang.reflect.Method;importjava.util.Properties;classStudent{publicvoidstudy(){System.out.println("好好学习天天向上");}}classTeacher{publicvoidteach(){System.out.println("用爱成就学生");}}publicclassDemo{publicstaticvoidmain(String[] args)throwsException{/*在class.txt中配置我们要使用的类,以及类中的方法className=xxxmethodName=xxx*///加载数据Properties prop =newProperties();FileReader fr =newFileReader("qfnu\\class.txt");prop.load(fr);fr.close();String className = prop.getProperty("className");String methodName = prop.getProperty("methodName");//通过反射使用Class<?> c =Class.forName(className);Constructor<?> con = c.getConstructor();Object obj = con.newInstance();Method m = c.getMethod(className);m.invoke(obj);}}