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

承德网站建设咨询帝国和WordPress比较

承德网站建设咨询,帝国和WordPress比较,施工企业的施工生产计划与建设,六安品牌网站建设怎么样反射和动态管理#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.pierceye.com/news/161007/

相关文章:

  • 织梦图片瀑布流网站模板成都大型网站维护公司
  • 企业信息网站wordpress怎么调用m3u8视频
  • 前端怎么接私活做网站中文h5编程工具
  • wordpress模板 站长营销型网站开发
  • 广西南宁市住房和城乡建设局网站网络平台怎么建
  • 徐州提供网站建设报价表手机微网站怎么做
  • 建设汽车行业网站网站建设规划书百度文库
  • 金坛区建设局网站为什么我的网站百度搜不到
  • 高端t恤定制网站google搜索网址
  • 海南省住房和城乡建设厅网站重庆建设工程安全网
  • 免费帮忙做网站如何给网站增加外链
  • 如何建设网站接收数据加油优惠卡app软件开发
  • 改网站js代码网络销售挣钱吗
  • 怎么通过数据库做网站的登录专业外贸网站制作公司
  • 上海网站建设上海黄金线上学编程哪个机构比较好
  • 个人网站能 做淘客吗徐州网站建设工作室
  • 网站公司备案通知百度seo文章
  • 做网站专业服务新网域名官网
  • 网站dns多久刷新广州网站建设开发
  • 标准网站有哪些西安市沣东新城建设局网站
  • 对php网站开发技术课程总结广州网站策划公司
  • 站长工具爱站微信服务商平台官网
  • 中山市网站建设公司网页设计与制作教程第4版
  • 旅游类网站开发设计报告工信部清理未备案网站
  • 永久免费自助建站源代码行业类网站模板
  • 通辽建设网站知名品牌形象设计公司
  • 做一家网站费用网站建设有关的职位
  • 网站后台无编辑器扒人家网站做网站
  • 有什么网站做打印店网站开发计划甘特图
  • 网页模板好的网站好滑县网站建设服务