【java基础】( 五 )


使用反射机制进行对象的实例化 Class提供的方法:
()
该方法可以使用其表示的类的无参构造器进行对象实例化
package reflect;/*** 使用反射机制进行对象的实例化*/public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {Person p = new Person();//硬编码,编码期间确定实例化那个类System.out.println(p);/*使用反射机制实例化1:获取要实例化类的类对象2:通过类对象的newInstance方法实例化*///1加载类对象//Class cls = Class.forName("reflect.Person");ClassLoader classLoader = ReflectDemo2.class.getClassLoader();Class cls = classLoader.loadClass("reflect.Person");//2通过类对象实例化Object o = cls.newInstance();//调用无参构造器System.out.println(o);}}
使用有参构造器实例化对象
package reflect;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;/*** 使用有参构造器实例化对象*/public class ReflectDemo3 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {Person p = new Person("刘苍松",55);System.out.println(p);//加载类对象Class cls = Class.forName("reflect.Person");//获取无参构造器//Constructor c = cls.getConstructor();//Object o= c.newInstance();//先获取指定的构造器:Person(String name,int age)Constructor c = cls.getConstructor(String.class,int.class);Object o= c.newInstance("刘苍松",55);System.out.println(o);}}
使用反射机制调用方法 调用无参数方法:
package reflect;import java.lang.reflect.Method;import java.util.Scanner;/*** 使用反射机制调用方法*/public class ReflectDemo4 {public static void main(String[] args) throws Exception {Person p = new Person();p.sayHello();Scanner scanner = new Scanner(System.in);System.out.println("请输入类名:");String className = scanner.nextLine();System.out.println("请输入方法名:");String methodName = scanner.nextLine();//实例化ClassLoader classLoader = ReflectDemo4.class.getClassLoader();//Class cls = classLoader.loadClass("reflect.Person");Class cls = classLoader.loadClass(className);Object o = cls.newInstance();//new Person()//调用方法//1通过类对象获取要调用的方法//Method method = cls.getMethod("sayHello");//获取无参方法sayHelloMethod method = cls.getMethod(methodName);//2通过方法对象执行该方法method.invoke(o);//o.sayHello()o实际上是一个Person对象}}
调用有参方法:
package reflect;import java.lang.reflect.Method;/*** 调用有参方法*/public class ReflectDemo5 {public static void main(String[] args) throws Exception {Class cls = Class.forName("reflect.Person");Object o = cls.newInstance();//say(String info)Method m = cls.getMethod("say",String.class);m.invoke(o,"hello~~");//p.say("hello~~")//say(String info,int sum)Method m2 = cls.getMethod("say",String.class,int.class);m2.invoke(o,"嘿嘿",5);}}
访问私有方法:
package reflect;import java.lang.reflect.Method;/*** 使用反射机制调用私有方法*/public class ReflectDemo6 {public static void main(String[] args) throws Exception {Person p = new Person();//p.hehe();//编译不通过!Class cls = Class.forName("reflect.Person");Object o = cls.newInstance();//获取私有方法:private void hehe()//Method m = cls.getMethod("hehe");//获取私有方法不能用getMethod,(这用来获取公开方法)Method m = cls.getDeclaredMethod("hehe");m.setAccessible(true);//强制访问m.invoke(o);//o.hehe()}}
转发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--53)(D:\桌面\bug集\扩展\-img\image-.png)]
实现:
在中定义一个方法:()
该方法中设置状态代码为302,并在响应头中包含指定需要浏览器重新发起请求的路径将原来中内部跳转页面的操作全部改为重定向 。