• godtrue
    2018-08-25
    本节还是比较容易理解的,也搞清楚了泛型相关的疑惑点,非常感谢。
    小结如下:
    1:Java语法糖-是一种帮助开发人员提高开发效率的小甜点,原理是将一些繁琐的事情交给编译器来处理,开发人员少做一些事情,当然,本纸上这些事情还必须要做,只是有编译器来做了

    2:Java语法糖有那几种呢?如下所示:
    2-1:包装类型和基本类型间的转换,自动装箱和拆箱的设计
    2-2:泛型的设计
    2-3:变长参数的设计
    2-4:try-with-resources,关闭资源的设计
    2-5:在同一个catch代码块中捕获多种异常
    2-6:finally代码块总是被执行的设计
    2-7:foreach循环数组的设计
    2-8:foreach循环Iterable对象的设计

    3:编译器的具体实现细节不是很清楚,猜测是识别出对应的语法然后填充上对应的代码,将语法糖还原成其本质-一些重复繁琐的代码块

    4:之前有同事问我泛型是怎么实现的?
    我讲不出来,只晓得使用泛型后,不需要写类型强转的代码了,如果类型不对也会有提示且编译失败,现在知道的多一点了,本质上类型强转的工作还是必须要做的,只是不是有开发人员来做了,由编译器来做,并且编译器会擦除掉对应的泛型信息,使用合适的父类型来代替,可能是Object类也可能是声明泛型时指定的继承的类
    展开

    作者回复: 赞

    
     29
  • 永烁星光
    2018-08-25
    直到这节课逐渐感知到了学习jvm的妙处,我想将这专栏反复看和实践终能消化为自己的知识
    
     10
  • ^_^
    2018-11-13
    C++ 是真泛型,java 较之算是伪泛型

    作者回复: 确实

    
     4
  • 东方
    2018-08-26
    var保存了泛型信息

    var定义变量必须直接初始化,基于初始化的值做类型推导,javac编译期间的语法糖

    所以不能声明函数的参数为var类型


    foreach语法糖,对于实现了迭代器Iterable<T>接口的类型,使用迭代器方法;
    foreach对于数组和变长参数的处理方式与上述略有不同,先求数组长度,再做类似while循环遍历
    展开
     1
     2
  • WL
    2018-12-14
    invokestatic Double.valueOf:(D)Ljava/lang/Double;
    想请教一下老师这个字节码中的(D)和java前的L的作用是标记什么, 查了半天都没查到, 希望老师回答一下.
     1
     1
  • 随心而至
    2019-10-16
    看老师的课,最好就在电脑边,边看边实践。
    
    
  • 随心而至
    2019-10-16
    赞,这节课的内容即便全忘了,也完全可以自己跑自己命令,看下字节码文件,知道到底是怎么回事。这就是授人以渔,谢谢老师。
    
    
  • 拯救地球好累
    2019-09-13
    大部分语法糖其实都是编译器为我们提供了一些便利,这些代码在编译后会变成一些基础代码
    自动拆装箱:编译器会插入诸如Integer.valueof方法
    泛型:编译器会根据继承关系做类型擦除
    
    
  • Zhgdbut
    2019-05-22
    老师你好,我遇到了一个这种问题
    Long a = null;
    Long rs = 1=1 ? a: 0L;
    报了空指针异常的错误,1=1只是一个条件,表明rs一定等于a!
    请问是咋回事呀?我该怎么修改?
     3
    
  • 403
    2018-08-26
    相比来看,c#的泛型是真泛型

    作者回复: ;)

    
    
  • code-artist
    2018-08-25
    每次看到示例代码的java字节码就犯懵,觉得很复杂,是不是有必要去了解下字节码

    作者回复: 字节码其实不难的。我会专门写一篇来介绍一下。

    
    
  • herome
    2018-08-25
    求老师画图啊

    作者回复: 这一篇貌似没啥地方能够画图的吧?请问你具体对哪一块有疑问?

    
    
  • godtrue
    2018-08-25
    奇怪的是,Java 并不支持对 IntegerCache.low 的更改,也就是说,对于小于 -128 的整数,我们无法直接使用由 Java 核心类库所缓存的 Integer 对象。
    这个奇怪的现象到底是为啥呢?

    作者回复: JDK认为用户不需要缓存小于-128的整数。这当然有可能是错误的。

    
    
  • 任鹏斌
    2018-08-24
    有点落后刚升级到jdk8对10还一无所知

    作者回复: Java新版本的语法糖并不多,我印象中10也只有var

    
    
  • 三木子
    2018-08-24
    从实现上说可以设计一个int类型的list,而jdk中arrayList是object类型,这样做是不是为了通用型考虑呢?

    作者回复: 对的

    
    
我们在线,来聊聊吧