当前位置: 首页 > news >正文

博罗县建设局网站中国建设报网站

博罗县建设局网站,中国建设报网站,温州网站优化,网络营销作业策划方案反射和动态管理#xff08;二十-完#xff09; 反射 反射允许对字段#xff08;成员变量#xff09;#xff0c;成员方法#xff0c;构造方法的信息进行编程访问。 反射操作可分为获取和解刨。 获取不是从java文件获取#xff0c;而是从class字节码文件获取。 作用…反射和动态管理二十-完 反射 反射允许对字段成员变量成员方法构造方法的信息进行编程访问。 反射操作可分为获取和解刨。 获取不是从java文件获取而是从class字节码文件获取。 作用 获取一个类里面的所有的信息获取到后再执行其他的业务逻辑结合配置文件动态的创建对象并调用方法 获取class对象 Class.forname(“全类名”) 全类名包名类名‘该方法是最为常用的 类名.class 一般当做当前参数进行传递比如synchronized(类名.class) 对象.getclass 有该类的对象后才可使用 范例 //Student.java public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Student{name name , age age };} }//Test.java public class Test {public static void main(String[] args) throws ClassNotFoundException {Class class1 Class.forName(reflect.Student);System.out.println(class1);Class class2 Student.class;System.out.println(class2);Student studentnew Student();Class class3student.getClass();System.out.println(class3);System.out.println(class1class2);System.out.println(class2class3);} } /* class reflect.Student class reflect.Student class reflect.Student true true */获取构造方法 Class类中用于获取构造方法的方法 getConstructors Constructor?[] getConstructors() 说明返回所有公共构造方法对象的数组 getDeclaredConstructors Constructor?[] getDeclaredConstructors() 说明返回所有构造方法对象的数组 getConstructor Constructor getConstructor(Class?…parameterTypes) 说明返回单个公共构造方法对象 getDeclaredConstructor Constructor getDeclaredConstructor(Class?…parameterTypes) 说明返回单个构造方法对象 Constructor类中用于创建对象的方法 newInstance T newInstance(Object…initargs) 说明根据指定的构造方法创建对象 setAccessible setAccessible(boolean flag) 说明设置为true表示取消访问检查 范例 //Student.java public class Student {private String name;private int age;public Student() {}public Student(String name) {this.name name;}private Student(String name, int age) {this.name name;this.age age;}protected Student(int age){this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Student{name name , age age };} }//Test.java import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Parameter;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {Class clazz Class.forName(reflect.Student);//getConstructorsConstructor[] constructors1 clazz.getConstructors();for (Constructor constructor:constructors1){System.out.println(constructor);}System.out.println();//getDeclaredConstructorsConstructor[] constructors2 clazz.getDeclaredConstructors();for (Constructor constructor:constructors2){System.out.println(constructor);}System.out.println();//getConstructorConstructor constructor1 clazz.getConstructor();System.out.println(constructor1);System.out.println();//getDeclaredConstructorConstructor constructor2 clazz.getDeclaredConstructor(String.class,int.class);System.out.println(constructor2);System.out.println();System.out.println(constructor2.getModifiers());//获取权限修饰符以数字的形式表现System.out.println();Parameter[] parameters constructor2.getParameters();//获取参数for (Parameter parameter:parameters){System.out.println(parameter);}//newInstance和setAccessible//暴力反射临时取消权限校验constructor2.setAccessible(true);//使private类型的构造方法可以创建Student student(Student) constructor2.newInstance(张三,3);System.out.println(student);} } /* public reflect.Student(java.lang.String) public reflect.Student()protected reflect.Student(int) private reflect.Student(java.lang.String,int) public reflect.Student(java.lang.String) public reflect.Student()public reflect.Student()private reflect.Student(java.lang.String,int)2java.lang.String arg0 int arg1 Student{name 张三, age 3}*/获取成员变量 Class类中获取成员变量对象的方法 getFields Field[] getFields() 说明返回所有公共成员变量对象的数组 getDeclaredFields Field[] getDeclaredFields() 说明返回所有成员变量对象的数组 getField Field getField(String name) 说明返回单个公共成员变量对象 getDeclaredField Field getDeclaredField(String name) 说明返回单个成员变量对象 Field类中用于创建对象的方法 set void set(Object obj,Object value) 说明赋值 get Object get(Object obj) 说明获取值 范例 import java.lang.reflect.Field;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {Class clazzClass.forName(reflect.Student);//getFieldsField[] fields1 clazz.getFields();for (Field field:fields1){System.out.println(field);}System.out.println();//getDeclaredFieldsField[] fields2 clazz.getDeclaredFields();for (Field field:fields2){System.out.println(field);}System.out.println();//getFieldField field1clazz.getField(sex);System.out.println(field1);System.out.println();//getDeclaredFieldField field2clazz.getDeclaredField(name);System.out.println(field2);System.out.println();//getSystem.out.println(field1.getModifiers());//获取变量修饰符System.out.println(field1.getName());//获取变量名Class? type field1.getType();//获取变量类型System.out.println(type);System.out.println();Student studentnew Student(张三,18,男);field2.setAccessible(true);String s(String)field2.get(student);System.out.println(s);System.out.println();field2.set(student,李四);System.out.println(student);} } /* public java.lang.String reflect.Student.sexprivate java.lang.String reflect.Student.name private int reflect.Student.age public java.lang.String reflect.Student.sexpublic java.lang.String reflect.Student.sexprivate java.lang.String reflect.Student.name1 sex class java.lang.String张三Student{name 李四, age 18, sex 男}*/获取成员方法 Class类中用于获取成员方法的方法 getMethods Method[] getMethods() 说明返回所有公共成员方法对象的数组包括继承的 getDeclaredMethods Method[] getDeclaredMethods() 说明返回所有成员方法对象的数组不包括继承的 getMethod Method getMethods(String name,Class?…parameterTypes) 说明返回单个公共成员方法对象 getDeclaredMethod Method getDeclaredMethods(String name,Class?…parameterTypes) 说明返回单个成员方法对象 Method类中用于创建对象的方法 Object invoke(Object obj,Object…args);运行方法 参数一用obj对象调用该方法 参数二调用方法的传递的参数若无则不写 返回值方法的返回值若无则不写 范例 //Test.java import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Parameter;public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {Class clazzClass.forName(reflect.Student);//getMethodsMethod[] methods1 clazz.getMethods();for (Method method:methods1){System.out.println(method);}System.out.println();//getDeclaredMethodsMethod[] methods2clazz.getDeclaredMethods();for(Method method:methods2){System.out.println(method);}System.out.println();//getMethodMethod study clazz.getMethod(study, String.class);System.out.println(study);System.out.println();//getMethodsMethod eat clazz.getDeclaredMethod(eat, String.class,String.class);System.out.println(eat);System.out.println();System.out.println(eat.getModifiers());//获取修饰符System.out.println(eat.getName());//获取名字Parameter[] parameters eat.getParameters();for (Parameter parameter:parameters){System.out.println(parameter);}Class[] exceptionTypes study.getExceptionTypes();for (Class ex:exceptionTypes){System.out.println(ex);}System.out.println();Student studentnew Student(路人甲,8);eat.setAccessible(true);String result(String)eat.invoke(student,汉堡包,可乐);System.out.println(result);} } //Student import java.io.IOException;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}private String eat(String food,String drink){System.out.println(name正在吃food正在喝drink);return 排泄物;}private String eat(String food){System.out.println(name正在吃food);return 排泄物;}public void study(String name)throws IOException,ArrayIndexOutOfBoundsException {System.out.println(name正在学习);}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Student{name name , age age };} }/* public java.lang.String reflect.Student.toString() public java.lang.String reflect.Student.getName() public void reflect.Student.setName(java.lang.String) public int reflect.Student.getAge() public void reflect.Student.setAge(int) public void reflect.Student.study(java.lang.String) throws java.io.IOException,java.lang.ArrayIndexOutOfBoundsException 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 reflect.Student.toString() public java.lang.String reflect.Student.getName() public void reflect.Student.setName(java.lang.String) public int reflect.Student.getAge() public void reflect.Student.setAge(int) private java.lang.String reflect.Student.eat(java.lang.String) private java.lang.String reflect.Student.eat(java.lang.String,java.lang.String) public void reflect.Student.study(java.lang.String) throws java.io.IOException,java.lang.ArrayIndexOutOfBoundsExceptionpublic void reflect.Student.study(java.lang.String) throws java.io.IOException,java.lang.ArrayIndexOutOfBoundsExceptionprivate java.lang.String reflect.Student.eat(java.lang.String,java.lang.String)2 eat java.lang.String arg0 java.lang.String arg1 class java.io.IOException class java.lang.ArrayIndexOutOfBoundsException路人甲正在吃汉堡包正在喝可乐 排泄物 */范例 例1 //对于任意一个对象都可以吧对象的所有字段名和值保存到文件中去 //Test.java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field;public class Test {public static void main(String[] args) throws IOException, IllegalAccessException {Student snew Student(张三,18);Teacher tnew Teacher(李四,19999.0,3,11);//saveFile(t);//saveFIle(s)}public static void saveFile(Object obj) throws IOException, IllegalAccessException {BufferedWriter bwnew BufferedWriter(new FileWriter(a.txt));Class clazz obj.getClass();Field[] fields clazz.getDeclaredFields();for (Field field:fields){field.setAccessible(true);String name field.getName();Object value field.get(obj);bw.write(namevalue);bw.newLine();}bw.close();} }//Student.java public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Student{name name , age age };} } //Teacher.java public class Teacher {private String name;private double salary;private int id;private int age;public Teacher() {}public Teacher(String name, double salary, int id, int age) {this.name name;this.salary salary;this.id id;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return salary*/public double getSalary() {return salary;}/*** 设置* param salary*/public void setSalary(double salary) {this.salary salary;}/*** 获取* return id*/public int getId() {return id;}/*** 设置* param id*/public void setId(int id) {this.id id;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Teacher{name name , salary salary , id id , age age };} } /* 若是执行saveFile(t) a.txt内容为 name李四 salary19999.0 id3 age11*/ /* 若是执行saveFile(s) a.txt内容为 name张三 age18*/例2 //反射可以跟配置文件结合的方式动态的创建对象并调用方法 /*properties.properties classnamereflect.Teacher methodteach */ //Student.java public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name name;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Student{name name , age age };}public void study(){System.out.println(学习);} } //Teacher.java public class Teacher {private String name;private double salary;private int id;private int age;public Teacher() {}public Teacher(String name, double salary, int id, int age) {this.name name;this.salary salary;this.id id;this.age age;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}/*** 获取* return salary*/public double getSalary() {return salary;}/*** 设置* param salary*/public void setSalary(double salary) {this.salary salary;}/*** 获取* return id*/public int getId() {return id;}/*** 设置* param id*/public void setId(int id) {this.id id;}/*** 获取* return age*/public int getAge() {return age;}/*** 设置* param age*/public void setAge(int age) {this.age age;}public String toString() {return Teacher{name name , salary salary , id id , age age };}public void teach(){System.out.println(教学);} } //Test.java import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Properties;public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {Properties pronew Properties();FileInputStream fis new FileInputStream(properties.properties);pro.load(fis);fis.close();String name(String) pro.get(classname);String method(String)pro.get(method);Class clazzClass.forName(name);Constructor constructor clazz.getDeclaredConstructor();Object o constructor.newInstance();System.out.println(o);Method method1 clazz.getDeclaredMethod(method);method1.setAccessible(true);method1.invoke(o);} } /* Teacher{name null, salary 0.0, id 0, age 0} 教学 */动态代理 代理可以无侵入式不改变原有代码的给对象增强其他功能。 对象若嫌身上干的事太多可通过代理转移部分职责。 对象若有方法要被代理代理则一定要有对应的方法。 调用者调用对象的方法时是由调用者先调用代理的方法再由代理调用对象的方法。 代理长什么样代理里面是对象要被代理的方法。 java通过接口保证代理的样子后面的对象和代理需要实现同一个接口接口中就是被代理的所有方法。 Proxy java.lang.reflect.Proxy类提供为对象产生代理对象的方法: public static Object newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h) 参数一用于指定用哪个类加载器去加载生成的代理类 参数二指定接口这些接口用于指定生成的代理长什么样也就是有哪些方法 参数三用来指定生成的代理对象要干什么事情 范例 //Cinema.java public class Cinema implements CinemaExtend{private String name;public Cinema() {}Overridepublic String watchMovie(){System.out.println(进入name电影院);return 看电影;}Overridepublic void eatPopcorn(String audience){System.out.println(audience吃爆米花);}public Cinema(String name) {this.name name;}/*** 获取* return name*/public String getName() {return name;}/*** 设置* param name*/public void setName(String name) {this.name name;}public String toString() {return Cinema{name name };} } //CinemaExtend.java public interface CinemaExtend {public abstract String watchMovie();public abstract void eatPopcorn(String audience); } //ProxyUtil.java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class ProxyUtil {public static CinemaExtend createProxy(Cinema cinema){CinemaExtend cinemaExtend(CinemaExtend)Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{CinemaExtend.class}, new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if(watchMovie.equals(method.getName())){System.out.println(买电影票);}else if(eatPopcorn.equals(method.getName())){System.out.println(买爆米花);}return method.invoke(cinema,args);}});return cinemaExtend;} } //Test.java public class Test {public static void main(String[] args) {Cinema cinemanew Cinema(万达);CinemaExtend ceProxyUtil.createProxy(cinema);ce.eatPopcorn(路人甲);System.out.println();System.out.println(ce.watchMovie());} } /* 买爆米花 路人甲吃爆米花买电影票 进入万达电影院 看电影 */
http://www.zqtcl.cn/news/988594/

相关文章:

  • 网站上传用什么软件做视频教程114查询
  • 网站小图标素材网站开发需要提供哪些东西
  • 阿里巴巴国际站买家入口百度建网站多少钱
  • 为网站网站做代理怎么判wordpress 调用当前分类名称
  • 多用户网站管理系统定制网站建设与运营案例
  • 毕业设计做的网站抄袭网站开发执行文档
  • 自己做网站都要什么软件网址你懂我意思正能量不用下载
  • 网站内容的创新wordpress美食主题
  • 程序员做游戏还是做网站好雅安移动网站建设
  • wordpress伪静态大学seo诊断网站免费诊断平台
  • 企业网站模板下载软件商务网站规划与建设心得
  • 做网站的像素是多少钱郑州公司网页
  • 北京游戏网站建设特殊符号网站
  • c 网站开发技术代注册公司要多少钱
  • 设计师参考效果图网站如何写网站建设实验结果分析
  • 网站备案 营业执照做企业网站注意些啥
  • 网站建设公司济南网络教学平台昆明理工大学
  • 原网站开发新功能世赛网站开发
  • 做一款小程序需要多少钱凡科的网站做seo比较难
  • 北京网页设计与网站建设最专业的手机网站建设
  • 做一个网站广州网站备案拍照
  • 做平面图片的网站wordpress批量添加连接
  • 做ppt哪些网站的图片质量高做电商网站需要多少时间
  • 个人网站模板源码wordpress流动公告
  • html5 手机 网站盘锦建设工程信息网站
  • 高端企业网站定制公司wordpress喜欢_赏_分享
  • 网站开发推广方案策划书开发公司移交给物业资料说明
  • 做响应式网站的菜单中国造价网官网
  • 爱心捐赠网站怎么做中国机械网官网
  • 好的ftp网站微信小程序开发基础