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

在线logo设计商标免费鄂州网站seo

在线logo设计商标免费,鄂州网站seo,如何制作精美的ppt,在阿里巴巴网站上怎么做贸易slf4j 桥接与被桥接如果您曾经玩过反射并执行了getDeclaredMethods()您可能会感到惊讶。 您可能会获得源代码中不存在的方法。 或者#xff0c;也许您看了一些方法的修饰符#xff0c;发现其中一些特殊方法是易变的。 顺便说一句#xff1a;对于Java采访来说#xff0c;这是… slf4j 桥接与被桥接 如果您曾经玩过反射并执行了getDeclaredMethods()您可能会感到惊讶。 您可能会获得源代码中不存在的方法。 或者也许您看了一些方法的修饰符发现其中一些特殊方法是易变的。 顺便说一句对于Java采访来说这是一个令人讨厌的问题“当方法易变时这意味着什么” 正确的答案是方法不能是易变的。 同时在getDeclaredMethods()甚至getMethods()返回的方法中可能存在某些方法对于这些方法 Modifier.isVolatile(method.getModifiers())为true。 这是项目转换器的用户之一发生的 。 他意识到交换器本身会深入挖掘Java的黑暗细节生成的Java源代码无法使用关键字volatile作为方法的修饰符进行编译。 结果它也不起作用。 那里发生了什么事 桥接和合成方法是什么 能见度 创建嵌套或嵌入式类时可以从顶级类访问嵌套类的私有变量和方法。 这由不可变的嵌入式构建器模式使用 。 这是语言规范中定义的Java的明确定义的行为。 JLS76.6.1确定可访问性 …如果成员或构造函数被声明为私有则访问为 当且仅当它出现在顶级类的主体中时才允许第7.6节 包含成员或构造函数的声明… package synthetic;public class SyntheticMethodTest1 {private A aObj new A();public class A {private int i;}private class B {private int i aObj.i;}public static void main(String[] args) {SyntheticMethodTest1 me new SyntheticMethodTest1();me.aObj.i 1;B bObj me.new B();System.out.println(bObj.i);} } JVM如何处理它 JVM不知道内部或嵌套类。 对于JVM所有类都是顶级外部类。 所有类都被编译为顶级类这就是那些不错的方法...$. .class ...$. .class文件已创建。 $ ls -Fart ../ SyntheticMethodTest2$A.class MyClass.java SyntheticMethodTest4.java SyntheticMethodTest2.java SyntheticMethodTest2.class SyntheticMethodTest3.java ./ MyClassSon.java SyntheticMethodTest1.java 如果创建嵌套或内部类它将被编译为完整的顶级类。 外层如何提供私有字段 如果这些人进入了真正的顶级阶层并且是私人的那么他们如何从外部阶层得到呢 javac解决此问题的方式是对于任何私有字段但从顶级类使用的字段方法或构造函数它都会生成综合方法。 这些合成方法用于到达原始私有字段/方法/构造函数。 这些方法的生成以巧妙的方式完成仅生成真正需要并从外部使用的那些方法。 package synthetic;import java.lang.reflect.Constructor; import java.lang.reflect.Method;public class SyntheticMethodTest2 {public static class A {private A(){}private int x;private void x(){};}public static void main(String[] args) {A a new A();a.x 2;a.x();System.out.println(a.x);for (Method m : A.class.getDeclaredMethods()) {System.out.println(String.format(%08X, m.getModifiers()) m.getName());}System.out.println(--------------------------);for (Method m : A.class.getMethods()) {System.out.println(String.format(%08X, m.getModifiers()) m.getReturnType().getSimpleName() m.getName());}System.out.println(--------------------------);for( Constructor? c : A.class.getDeclaredConstructors() ){System.out.println(String.format(%08X, c.getModifiers()) c.getName());}} } 由于生成的方法的名称取决于实现方式因此不能保证对上述程序的输出最多的是在我执行该程序的特定平台上它会产生以下输出 2 00001008 access$1 00001008 access$2 00001008 access$3 00000002 x -------------------------- 00000111 void wait 00000011 void wait 00000011 void wait 00000001 boolean equals 00000001 String toString 00000101 int hashCode 00000111 Class getClass 00000111 void notify 00000111 void notifyAll -------------------------- 00000002 synthetic.SyntheticMethodTest2$A 00001000 synthetic.SyntheticMethodTest2$A 在上面的程序中我们为字段x赋值并且还调用了相同名称的方法。 这些是触发编译器生成综合方法所必需的。 您可以看到它生成了三种方法大概是字段x的setter和getter以及方法x()的综合方法。 但是这些综合方法未在getMethods()返回的下一个列表中列出因为它们是综合方法因此不适用于通用调用。 从这个意义上讲它们是私有方法。 十六进制数字可以用作解释器查看类java.lang.reflect.Modifier定义的常量 00001008 SYNTHETIC|STATIC 00000002 PRIVATE 00000111 NATIVE|FINAL|PUBLIC 00000011 FINAL|PUBLIC 00000001 PUBLIC 00001000 SYNTHETIC 列表中有两个构造函数。 有一个私人的和一个合成的。 私有存在因为我们定义了它。 另一方面合成的存在是因为我们从外部调用了私有的。 到目前为止桥接方法还没有。 泛型和继承 到目前为止还不错但是我们仍然没有看到任何“易变”的方法。 查看java.lang.reflec.Modifier的源代码您可以看到常量0x00000040被定义了两次。 一次是VOLATILE 一次是BRIDGE 后者是私有程序包不用于一般用途。 要拥有这样一种方法一个非常简单的程序就可以做到 package synthetic;import java.lang.reflect.Method; import java.util.LinkedList;public class SyntheticMethodTest3 {public static class MyLink extends LinkedListString {Overridepublic String get(int i) {return ;}}public static void main(String[] args) {for (Method m : MyLink.class.getDeclaredMethods()) {System.out.println(String.format(%08X, m.getModifiers()) m.getReturnType().getSimpleName() m.getName());}} } 我们有一个链表该链表的方法get(int)返回String 。 我们不要讨论干净的代码问题。 这是演示该主题的示例代码。 干净的代码中也会出现同样的问题尽管更复杂更难在出现问题时解决。 输出显示 00000001 String get 00001041 Object get 我们有两个get()方法。 一个出现在源代码中另一个出现在源代码中并且是合成的。 反编译器javap表示生成的代码是 public java.lang.String get(int);Code:Stack1, Locals2, Args_size20: ldc #2; //String2: areturnLineNumberTable:line 12: 0public java.lang.Object get(int);Code:Stack2, Locals2, Args_size20: aload_01: iload_12: invokevirtual #3; //Method get:(I)Ljava/lang/String;5: areturn 有趣的是这两种方法的签名是相同的只是返回类型不同。 JVM允许这样做即使Java语言无法做到这一点。 bridge方法不执行其他任何操作而是调用原始方法。 为什么需要这种合成方法 谁来使用它。 例如想要使用类型MyLink的变量来调用方法get(int)的MyLink List? a new MyLink();Object z a.get(0); 它不能调用返回String的方法因为List没有这样的方法。 为了使其更具说明性让我们重写方法add()而不是get() package synthetic;import java.util.LinkedList; import java.util.List;public class SyntheticMethodTest4 {public static class MyLink extends LinkedListString {Overridepublic boolean add(String s) {return true;}}public static void main(String[] args) {List a new MyLink();a.add();a.add(13);} } 我们可以看到桥接方法 public boolean add(java.lang.Object);Code:Stack2, Locals2, Args_size20: aload_01: aload_12: checkcast #2; //class java/lang/String5: invokevirtual #3; //Method add:(Ljava/lang/String;)Z8: ireturn 不仅叫原版。 它还检查类型转换是否正确。 这是在运行时完成的而不是由JVM本身完成的。 如您所料它确实出现在第18行中 Exception in thread main java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringat synthetic.SyntheticMethodTest4$MyLink.add(SyntheticMethodTest4.java:1)at synthetic.SyntheticMethodTest4.main(SyntheticMethodTest4.java:18) 下次在面试中遇到关于不稳定方法的问题时您可能比面试官了解的更多。 参考 Java Deep博客中JCG合作伙伴 Peter Verhas的合成方法和桥接方法 。 翻译自: https://www.javacodegeeks.com/2014/03/synthetic-and-bridge-methods.htmlslf4j 桥接与被桥接
http://wiki.neutronadmin.com/news/96348/

相关文章:

  • 互助县公司网站建设每平每屋设计家官网
  • 医院网站php源码windows用什么wordpress
  • 青岛做网站青岛做网站c2c有哪些电商平台
  • 做网站的软件公司网站策划是干什么的
  • 郑州定制网站建设网站免费软件下载
  • 营销网站建设公司推荐哈尔滨网站优化排名
  • wordpress一定要本地建站吗自己做网站什么类型的比较好
  • 网站建设制作首页流程汽车网站开发背景
  • 网站建设 鼠标网站服务器怎么查询
  • 嘉兴建设网站asp.net企业网站建设
  • 网站建设费用如何做账做民宿加盟哪些网站比较好
  • 郴州网站建设方案策划什么是优化网站
  • 怎么做国际货运代理外贸网站做企业网站排名
  • 南宁做网站推广nnsomapp制作程序
  • 设计公司网站制作wordpress换主题出错字幕办
  • 电子商城网站建设 模板wordpress主题图片丢失
  • 河南自助建站建设代理酷万网站建设
  • 嘉兴云推广网站如何设计个人网站
  • 福清建设银行网站电商平台项目商业计划书
  • 佛山微网站建设 天博网站后端架构如何做
  • 网站建设经典教材怎么 从头开始建设一个网站
  • wordpress网站360搜索收录内链好的网站
  • 济南网站seo报价外贸soho网站
  • 网站建设策划书主要内容网页制作实训心得
  • 无线路由器做中继手机能连接但无法访问网站wordpress软件最低要求
  • 医院建设网站中国建设教育协会的网站查询
  • 科技成果转化网站建设无远低代码开发平台
  • 火车头wordpress数据库网站优化文章怎么做
  • 太原制作公司网站老网站权重低的原因
  • 嘉定网站网站建设关键词排名优化顾问