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

软件公司网站模版企业seo优化服务

软件公司网站模版,企业seo优化服务,网站建设基础资料,百度云搜索引擎入口手机版反射API1.反射API的介绍通过反射API可以获取Java程序在运行时刻的内部结构。比如Java类中包含的构造方法、域和方法等元素#xff0c;并可以与这些元素进行交换。按照 一般地面向对象的设计思路#xff0c;一个对象的内部状态都应该通过相应的方法来改变#xff0c;而不是直…反射API1.反射API的介绍通过反射API可以获取Java程序在运行时刻的内部结构。比如Java类中包含的构造方法、域和方法等元素并可以与这些元素进行交换。按照 一般地面向对象的设计思路一个对象的内部状态都应该通过相应的方法来改变而不是直接去修改属性的值。一般Java类中的属性设置获取方法的命名都遵循JavaBeans规范中的要求即利用setXxx和getXxx这样的的方法声明因此可以实现一个使用工具类来完成对任意对象的属性设置和获取的操作只要设置和获取属性的方法满足JavaBeans规范。使用反射API设置对象的属性值的示例public class ReflectSetter{public static void invokeSetter(Object obj,String field,Object value) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{String methodName set field.substring(0,1).toUpperCase() field.substring();Class clazz obj.getClass();Method method clazz.getMethod(methodName,value.getClass());method.invole(obj,value);}}从根本上来说反射API实际上定义了一种功能提供者和使用之间的松散契约。以方法调用为例按照Java语言的一般用法在调用方法的时候在代码中首先需要一个对象的变量作为调用的接受者再把方法的名称直接写在代码中。方法的名称不可能是变量。编译器会检查这个对象中是否确实有待调用的方法如果没有就会出现编译错误。这种一般地做法是提供者和使用者之间的一种紧密的契约由编译器来保证其合法性。而是用反射API两者的契约只需要建立在名称和参数类型这个层次上就足够了。方法名称可以是变量参数值也可以动态生成。调用的合法性由开发人员自己保证。如果方法调用不是合法的相关的异常会在运行时抛出。反射API的一个重要的使用场合是要调用的方法或者要操作的域的名称按照某种规律变化的时候。一个典型的场景就是在Servlet中用HTTP请求值来填充领域对象。比如在用户注册的时候包含在HTTP请求中的用户所填写的相关信息需要被填充到程序中定义好的领域对象中。只需要利用Servlet提供的API遍历请求中的所有参数然后用ReflectSetter类中invokeSetter方法设置领域对象中与参数名称相对应的属性的值即可。另外一个场景是在数据库操作中从SQL查询结果集中创建并填充领域对象。数据库的别名和领域对象属性名称也存在着类似的对应关系。反射API在为Java程序带来灵活性的同时也产生了额外的性能代价。由于反射API的实现机制对于相同的操作比如调用同一个方法用反射API来动态实现比直接在源代码中编写的方式大概慢到一到两个数量级。随之Java虚拟机实现的改进反射API的性能已经有了非常大的提升。但是这种性能的差距是客观存在。因此在某些对性能要求比较高的应用要慎用反射API。2.使用反射API获取构造方法通过反射API可以获取到Java类中的构造方法。通过构造方法可以在运行动态地创建Java对象而不只是通过new操作符来进行创建。在得到Class类的对象之后可以通过其中的方法来获取构造方法。相关的方法有4个其中getConstructors用来获取所有的public构造方法的列表getConstructor则根据参数类型来获取public的构造方法。另外两个对应方法getDeclaredConstructors和getDeclaredConstructor的作用类似。只不过它们会获取类中真正声明的构造方法而忽略从父类中继承下来的构造方法。得到了表示构造函数的java.lang.reflect.Constructor对象之后就可以获取关于构造方法的更多信息以及通过newInstance方法创建出的新的对象。一般地构造方法的获取和使用没有什么特殊之处需要特别说明的是对参数长度可变的构造方法和嵌套类(nested class)的构造方法的使用。如果构造方法声明了长度可变的参数在获取构造方法的时候要使用对应的数组类型的Class对象。这是因为长度可变的参数实际上是通过数组来实现的。使用反射API获取参数可变的构造方法public class VarargsConstructor{public VarargsConstructor(String... names) {}}public void useVarargsConstructor() throws Exception{Constructor constructor VarargsConstructo.class.getDeclaredConstructor(String[].class);//为了避免方法调用时的歧义这样编译器就知道把这个字符串数组作为一个可变长度的参数来传递//在调用newInstance的时候要把作为实际参数的字符串数组先转换成Object类型constructor.newInstance((Object) new String[] {A,B,C});}对嵌套类的构造方法的获取需要区分静态和非静态两种情况即是否在声明嵌套类的时候使用static关键词。静态的嵌套类并没有特别之处按照一般的方式来使用即可。而对非静态类嵌套类来说其特殊之处在于它的对象实例中都有一个隐含的对象引用指向包含它的外部类对象也正是这个隐含的对象引用的存在使得非静态类嵌套类中的代码可以直接引用外部类中的包含的私有域和方法。因此在获取非静态类的构造方式时候类型参数列表的第一个值必须是外部类的Class对象。使用反射API获取嵌套类的构造方法public class ConstNestedClass{static class StaticNestedClass{public StaticNestedClass(String name){}}class NestedClass{public NestedClass(int count){}}public void useNestedClassConstrcutor() throws Exception{Constructor sncc StaticNestedClass.class.getDeclaredConstructor(String.class);sncc.newInstance(Alex);Constructor ncc NestedClass.class.getDeclaredConstructor(ConstructorUsage.class,int.class);NestedClass nc ncc.newInstance(this,3);}}3.使用反射API获取域通过反射API可以获取到类中公开的静态域和对象中的实例域。得到表示域的java.lang.reflect.Field类的对象之后就可以获取和设置域的值。Class类中有4个方法用来获取域分别是getFields、getField、getDeclaredFields和getDeclaredField其含义与获取构造方法的4个方法类似。使用反射API获取和使用静态域和实例域public void useField() throws Exception{Field fieldCount FieldContainer.class.getDeclaredField(count);fieldCount.set(null,3);Field fieldName FieldContainer.class.getDeclaredField(name);fieldContainer fieldContainer new FieldContainer();fieldName.set(fieldContainer,Arthur);}总的来说对域的获取和设置都比较简单但是只能对类中的公开域进行操作。私有域可以通过反射API的进行获取、操作(必须知晓字段名且必须事先取消Java语言访问检查)。4.使用反射API获取方法最后一个可以通过反射API获取的元素是方法这也是最常使用反射API的场景即获取一个对象中的方法并在运行时调用该方法。与之前提到的构造方法和域类似Class类也有4个方法用来获取方法分别是getMethods、getMethod、getDeclaredMethods和getDeclaredMethod。这4个方法的含义类似于获取构造方法和域的对应方法。在得到了表示方法的java.lang.reflect.Method类的对象之后就可以查询该方法的详细信息比如方法的参数和返回值的类型等。最重要的是可以通过invoke方法来传入实际参数并调用该方法。使用反射API获取和使用公开和私有方法public void useMethod() throws Exception{MethodContainer mc new MethodContainer();Method publicMethod MethodContainer.class.getDeclaredMethod(publicMethod);publicMethod.invoke(mc);Method privateMethod MethodComtainer.class.getDeclareMethod(privateMethod);privateMethod.setAccessible(true);privateMethod.invoke(mc);}5.使用反射API操作数组使用反射API对数组进行操作的方式不同于一般的Java对象是通过专门的java.lang.reflect.Array这个实用工具类来实现的。Array类提供的方法包括创建数组和操作数组中的元素。使用反射API操作数组public void useArray(){String name (String[])Array.mewInstance(String.class,10);names[0] Hello;Array.set(names,1,World);String str (String)Array.get(names,0);int[][][] matrix1 (int[][][])Array.newInstance(int.class,3,3,3);martix1[0][0][0] 1;int[][][] martix2 (int[][][])Array.newInstance(int[].class,3,4);martix2[0][0] new int[10];martix2[0][1] new int[3];martix2[0][0][1] 1;}6.访问权限与异常处理使用反射API的一个重要好处是可以绕过Java语言中默认的访问控制权限。比如正正常的代码中一个类的对象是不能访问在另外一个类中声明的私有方法的但是通过反射API是可以做到这一点。Constructor、Field和Method都继承自java.lang.reflect.AccessibleObject,其中的方法setAccessible可以用来设置是否绕开默认的权限。在利用invoke方法来调用方法时如果方法本身抛了异常invoke方法会抛出InvocationTargetException异常来表示这种情况。在捕获到InvocationTargetException异常的时候通过InvocationTargetExeption异常的getCause方法可以获取到真正的异常信息帮助进行调试。在处理与反射相关的异常的时候可以直接捕获java.lang.ReflectiveOperationException这是所有与反射操作相关的异常类的父类。
http://www.zqtcl.cn/news/489735/

相关文章:

  • 网站公司的利润中国域名后缀
  • 梁山网站建设电话多语言网站建设
  • 网站建设的摘要做直播网站赚钱吗
  • 网站建设明细报价表模板永久免费云服务器无需注册
  • 扁平化网站设计方案大学生做的美食网站
  • wordpress前台打开速度20秒湖南正规竞价优化公司
  • 深度网营销型网站建设wordpress keywords
  • 企业官网快速建站框架物流网站源代码
  • 网站图片设置隐私保护怎么下载搭建购物网站
  • 网站运营和推广可以做mv 的视频网站
  • 成都网站建设冠辰成都关键词优化技术
  • 用什么框架做网站快哪个网站可以自己做名片
  • 免费网站建设ppt模板下载网站设计与程序专业
  • o2o网站设计方案高端定制网站开发设计建站流程
  • 杭州建设公司网站石家庄做网站比较好的公司
  • 英文网站支付怎么做产品做推广都有那些网站
  • 自己做的网站怎么加入微信支付综合性门户网站列举
  • 哪个网站 可以做快递单录入网站怎么做抽奖
  • 网站设计培训班网站域名费用怎么做分录
  • 济南做网站哪里好惠州附近公司做网站建设多少钱
  • 使用oss做静态网站网站广告牌制作教程
  • 外贸看的英文网站公众号模板编辑器
  • 做网站的数据库的步骤阅读网站模板下载
  • 建设网站要钱吗个人养老金制度是什么意思
  • 做h5的网站页面设计软文素材网站
  • 黄冈网站推广软件费用是多少手机网站弹出层插件有哪些
  • wordpress文章链接怎么改怎么优化关键词排名优化
  • 专业做包包的网站好产品网站做营销推广
  • 网站刚建好怎么做能让百度收录湖北黄石网站建设
  • 网站建设拾金手指下拉二一wordpress 插件破解