千锋教育-做有情怀、有良心、有品质的IT职业教育机构

当前位置:首页 > 行业动态  >  正文

杭州Java程序培训整理分享部分技术问题

时间:2018-03-22 17:26:47     来源:千锋教育 作者:千锋

  很多朋友想靠Java进阶视频来帮助自己突破瓶颈,没问题,千锋教育的视频就不错。不信?千锋杭州Java程序培训老师带你了解这些技术细节?

  1.没有检查过的异常

  那就对了! JVM不知道任何这样的事情,只有Java语言。

  今天,大家都同意检查异常是一个错误。 AsBruce Eckel在布拉格GeeCON闭幕主题演讲中表示,Java在使用已检查的异常之后没有其他语言,甚至Java 8也不再支持它们在新的Streams API中(这实际上可能有点痛苦,当 你的lambdas使用IO或JDBC)。

  你想证明JVM不知道这样的事情吗? 试试下面的代码:

QQ截图20180322172804.png

  这不仅是编译,这实际上也抛出SQLException。

  2.你可以让方法重载仅在返回类型中有所不同

  这不会编译,对吧?

QQ截图20180322172816.png

  对。 Java语言不允许两个方法在同一个类中被“重写 - 等价”,而不管它们可能有不同的Throws型或返回类型。

  但等一下。查看Javadoc ofClass.getMethod(String,Class ...)。 它写道:

  请注意,类中可能有多个匹配方法,因为虽然Java语言禁止类声明具有相同签名但返回类型不同的多个方法,但Java虚拟机不会。虚拟机中增加的灵活性可用于实现各种语言功能。 例如,协变回报可以用桥接方法来实现; 桥接方法和被覆盖的方法将具有相同的签名但不同的返回类型。

  原文:

  Note that there may be more than one matching method in a class because while the Java language forbids a class to declare multiple methods with the same signature but different return types, the Java virtual machine does not. This increased flexibility in the virtual machine can be used to implement various language features. For example, covariant returns can be implemented with bridge methods; the bridge method and the method being overridden would have the same signature but different return types.

  哇,是的,这是有道理的。事实上,当你编写以下代码时,会发生这种情况:

1.png

  检查Child中生成的字节码:

2.png

  所以,Tis真的只是对象的字节码。 这很好理解。

  合成桥接方法实际上是由编译器生成的,因为在特定的呼叫站点上,可能预期toParent.x()签名的返回类型为Object。 在没有这种桥接方法的情况下添加泛型将不可能以二进制兼容的方式进行。所以,改变JVM以允许此功能是较小的痛苦(这也允许协变覆盖作为副作用...)聪明,是吧?

  3.所有这些都是二维数组!

0.png

  对,是真的。即使你的心理分析器不能立即理解上述方法的返回类型,它们也是一样的! 类似于下面的一段代码:

11.png

  你觉得那很疯狂?想象一下在上面使用JSR-308 / Java 8类型注释。 句法可能性的数量爆炸!

5.png

  4.你没有得到条件表达式

  那么,当你使用条件表达式时,你认为你知道吗?让千锋老师告诉你,你没有。 你们大多数人会认为下面的两个片段是相同的:

  ...与此相同?

  不。让千锋老师们进行一个快 速测试。

5.png

  这个计划将打印:
123.png

  1.01

  是的!如果“需要”,条件运算符将实现数字类型提升,并在该“需要”上引用一组非常非常强大的引号。 因为,你会期望这个程序抛出一个NullPointerException吗?

 啊.png

     5.你也没有得到复合赋值操作符

  有什么古怪呢?千锋老师们来考虑以下两段代码:

9.png

  直观地说,它们应该是等价的,对吗?但猜猜怎么了。 他们不是! JLS规定:E1 op = E2形式的复合赋值表达式等价于E1 =(T)((E1)op(E2)),其中T是E1的类型,只是E1只计算一次。

  这是如此的......,千锋老师想引用Peter Lawrey的这个堆栈溢出问题:演员很好的例子是使用* =或/ =

10.png

  或者

11.png

  或者

12.png

  或者

13.png

  多精彩,仅仅在:千锋Java视频教程平台:http://video.mobiletrain.org/java/

相关文章

  • 北京天丰利校区(总部):北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226-801
    面授课程:Android培训、HTML5培训、UI交互设计培训、PHP培训、JavaEE培训、大数据开发培
                     训、VR/AR混合现实培训、Python培训、iOS培训、好程序员
  • 深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷A区B座605-619
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    咨询电话:0755-33582485-801(硅谷校区) 0755-86660670-801(大学城校区)
    面授课程:Android培训、HTML5培训、UI交互设计培训、PHP培训、JavaEE培训、大数据开发培
                     训、VR/AR混合现实培训
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-56166283/56166279
    面授课程:PHP培训、Android课程培训、HTML5课程培训、UI交互设计培训、JavaEE培训、iOS课
                     程培训、好程序员
  • 郑州地址:郑州市金水区纬五路21号河南教育综合楼(经纬中学楼)6/7/8层
    咨询电话:0371-55191750 400-654-7778
    面授课程:Android课程培训、HTML5课程培训、UI交互设计培训、JavaEE培训、iOS课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:Android课程培训、HTML5课程培训、iOS课程培训、JavaEE培训
  • 大连地址:大连市甘井子区软件园路6号B5座101室
    咨询电话:0411-39026086 400-654-7778
    面授课程:Android课程培训、HTML5课程培训、JavaEE培训、iOS课程培训
  • 武汉地址:武汉市江夏区藏龙岛杨桥湖大道15号拓创大厦15楼
    咨询电话:027-81772047
    面授课程:Android课程培训、HTML5课程培训、JavaEE培训、iOS课程培训
  • 成都旅游校区:成都市一环路西二段17号四川旅游青羊校区内
    成都华立校区:成都一环路西二段17号华立大厦3楼
    咨询电话:028-83178771 028-61967740
    面授课程:Android课程培训、HTML5课程培训、UI交互设计培训、JavaEE培训、iOS课程培训
  • 校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85260160 029-85261030 029-85260960
    面授课程:Android课程培训、HTML5课程培训、JavaEE培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226-801
    面授课程:Android课程培训、HTML5课程培训、JavaEE培训、iOS课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226-801
    面授课程:Android课程培训、HTML5课程培训、UI交互设计培训、iOS课程培训
  • 千锋动态二维码

    了解千锋动态
    关注千锋教育服务号

  • 千锋互联二维码

    扫码关注千锋互联
    身边的移动开发导师