摘要 本文先给出一个看似很简单实则有深意的Java笔试面试题,引出JDK内部的缓存. JDK内部的缓存,主要是为了提高Java程序的性能. 你能答对这道"看似简单,实则有深意"的Java题目? 我们首先来看一个简单的程序: public class IntCacheDemo { /** * 一道经典的Java笔试面试题 */ public static void main(String[] args) { Integer a = 2013; Integer b = 2013; if (…
在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件  // 字节码文件User.class String userClass = "C:/User.class"; File file = new File(userClass); 2.构造输入流 FileInputStream fin = new FileInputStream(file);…
前14篇文章,分享了JDK中值得学习和借鉴的编码和设计方法. 每个硬币都是有两面的.Every coin has two sides. 当然,JDK中也有很多值得改进或者说富有争议的设计. 本篇,就来详细吐槽下JDK中的10个富有争议的设计. 网友指出1.求和抛异常,错误提示不合理. 在OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常这篇文章中,有个网友指出:"第三个if的提示信息有点问题.前两个if说明了position和size都不可能为负,求和通常不可能为负…
本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法.  这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode.toString等. 2.禁止默认构造函数,防止实例化.    private Arrays() {    }   这个类只包含了一些静态的工具方法,实例化没有任何意义. 更严格一点,还可以将类定义为 public final Arrays. 3.把针对数组的工具方法,统一放到一个工具类中,方便管…
可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可亲的异常 但是,如果我们反过来看,异常可是非常好的错误提示. 在JDK中,定义了大量的异常,只要程序抛出了异常,我们根据异常的名字就能知道程序大概出了什么问题. 比如看到NullPointerException,我们就知道方法所属的对象是Null. 看到IndexOutOfBoundsExcepti…
Comparable和Comparator是JDK中定义的2个比较接口,很相似,但又有所不同. 这2个接口的作用和区别也是Java中的常见经典面试题. 下面我们就来详细介绍下这2个接口的定义.作用.区别.模式.应用场景和代码案例. 定义 public interface Comparable<T> { public int compareTo(T o); } public interface Comparator<T> { int compare(T o1, T o2); bool…
OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会.收获.看法. 把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同学带来一些启发. 我打算每篇只讲解一点,这样篇幅较小,读起来没有太大压力. 写起来压力也小,抽出10到20分钟就可以写1篇. 本篇简要介绍,方法(函数)体内的参数检查,遇到不合法的输入参数时,抛出带关键错误提示信息的异常. /** * Initializes a new instance of th…
可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可亲的异常 但是,如果我们反过来看,异常可是非常好的错误提示. 在JDK中,定义了大量的异常,只要程序抛出了异常,我们根据异常的名字就能知道程序大概出了什么问题. 比如看到NullPointerException,我们就知道方法所属的对象是Null. 看到IndexOutOfBoundsExcepti…
最近在看OpenJDK源码的过程中,顺便看了Java编译器(javac)的源码. 为了理解javac的源码,需要先搞懂Java字节码文件(.class)的结构. 于是,我就认真看了下OpenJDK中Java字节码文件的相关源码,结合大学期间对JVM的研究,参考JVM规范第2版(英文原版),特意整理下. JVM规范中定义的类文件的结构 注:使用是类似于C语言的表示方法 u1: unsigned one-byte  无符号一个字节 u2: unsigned two-byte  无符号两个字节 u4:…
在研究OpenJDK,Java编译器javac源码的过程中,发现以下代码. 顿时发现枚举类竟然也有如此"高端大气上档次"的用法. 沙场点兵(用法源码) com.sun.tools.javac.file.JavacFileManager.SortFiles protected enum SortFiles implements Comparator<File> { FORWARD { public int compare(File f1, File f2) { return…