前14篇文章,分享了JDK中值得学习和借鉴的编码和设计方法. 每个硬币都是有两面的.Every coin has two sides. 当然,JDK中也有很多值得改进或者说富有争议的设计. 本篇,就来详细吐槽下JDK中的10个富有争议的设计. 网友指出1.求和抛异常,错误提示不合理. 在OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常这篇文章中,有个网友指出:"第三个if的提示信息有点问题.前两个if说明了position和size都不可能为负,求和通常不可能为负…
友情提示 本文主要参考了51CTO上的一篇文章,代码经过自己的模仿和整理,还算凑合. 本文中的代码注释比较多,不再过多解释. 更多用法,还是得看JDK的API或者看原文http://developer.51cto.com/art/201007/208812.htm. 1.可用的脚本引擎 /** * Java内置只支持JavaScript一种脚本 * 打印Script引擎的一些信息 */ public static void printBuildInScriptEngine() { ScriptE…
在研究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…
元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaData) 分别封装了数据库产品名字等数据库信息.查询参数的个数等参数信息.结果集的列数等结果集信息. 数据库元数据 /** *数据库的整体综合信息. */ public interface Dat…
在阅读Javac源码的过程中,发现一个上下文对象Context. 这个对象用来确保一次编译过程中的用到的类都只有一个实例,即实现我们经常提到的"单例模式". 今天,特意对这个上下文容器进行解析,主要是讲解上下文容器.单例模式和延迟创建. 通过对OpenJDK和Javac源码的一点点解析,希望自己能够搞懂JDK和Javac的实现. 1.OpenJDK源码示例 a.上下文容器 public class com.sun.tools.javac.util.Context{ //构造函数 pub…
在研究OpenJDK源码过程中,我发现常用的设计方法就是2种:接口,接口-抽象类-具体实现类 . 在一些其它开源框架和业务开发中,经常存在着第3种设计,接口-具体实现类. 1.只有接口,没有实现类. 定义接口,制定标准. 在Java中,这个最典型的案例是JDBC的API的设计. Connection.Statement.PreparedStatement.CallableStatement.ResultSet等都是接口,没有任何实现方法. 这些接口就是一个标准,具体的实现,都是由数据库厂商自行实…
类名 扩展的类型 方法名 参数 作用 XmlNodeExtensions XmlNode GetAttributeValueOrNull attributeName Gets an   attribute's value from an Xml node. JsonExtensions object ToJsonString bool   camelCase bool   indented Converts   given object to JSON string. StreamExtensi…
摘要 本文先给出一个看似很简单实则有深意的Java笔试面试题,引出JDK内部的缓存. JDK内部的缓存,主要是为了提高Java程序的性能. 你能答对这道"看似简单,实则有深意"的Java题目? 我们首先来看一个简单的程序: public class IntCacheDemo { /** * 一道经典的Java笔试面试题 */ public static void main(String[] args) { Integer a = 2013; Integer b = 2013; if (…
可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可亲的异常 但是,如果我们反过来看,异常可是非常好的错误提示. 在JDK中,定义了大量的异常,只要程序抛出了异常,我们根据异常的名字就能知道程序大概出了什么问题. 比如看到NullPointerException,我们就知道方法所属的对象是Null. 看到IndexOutOfBoundsExcepti…
本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法.  这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode.toString等. 2.禁止默认构造函数,防止实例化.    private Arrays() {    }   这个类只包含了一些静态的工具方法,实例化没有任何意义. 更严格一点,还可以将类定义为 public final Arrays. 3.把针对数组的工具方法,统一放到一个工具类中,方便管…