本章节我们从字节码的角度来探究下return和finally到底哪个先执行。下面先来看一段简单地源码:
|
|
上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在后面:
本章节我们从字节码的角度来探究下return和finally到底哪个先执行。下面先来看一段简单地源码:
|
|
上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在后面:
本章我们来看一下,Java中字段和方法是如何参与重写的。
首先,需要明确一点,Java的字段永远不参与多态,当子类声明了与父类同名的字段时,虽然在子类的内存中两个字段都会存在,但是子类的字段会屏蔽父类的同名字段。我们来看一个简单地例子,该例子来自于《深入理解Java虚拟机》:
|
|
本章节主要来验证下是否开启压缩指针对对象头内存布局的影响,因为在其他地方看到的结论不一样,还是得眼见为实。先看下JVM版本以及默认启动参数:
|
|
由-XX:+UseCompressedClassPointers
可见,默认是开启压缩指针的。下面先引入一个依赖,用于查看对象内存布局:
|
|
众所周知,目前Java的引用分为强引用、软引用、弱引用和虚引用,这四种强度依次逐渐减弱。网上也能搜到很多相关文章,有的写的也很好,可能自身理解能力比较差,每次看过之后总觉得差点意思,本章准备通过几个小例子来加深理解。下面先简单看一下四种引用的定义:
这是从《深入理解Java虚拟机》第三版中摘抄出来的,下面就用例子来证明上述定义,同时加深对其的理解。
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。上面的术语不是很好理解,我们来看看下面的场景,就会觉得很熟悉了。
假设有下面现在需要建造一辆汽车,简单的实现方式如下: