存档: ‘Java Core’ 分类

Java Concurrency Annotations

没有评论 2011年6月7日

在JGroups源码中发现了GuardedBy这个注解:

1
2
3
4
5
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface GuardedBy {
    String value();
}

该注解的Retention的value为RetentionPolicy.SOURCE,这个很少见。一般该值都是设为RetentionPolicy.RUNTIME(这个见得更多)或RetentionPolicy.CLASS

继续阅读…

commons-lang-1.0中的EqualsBuilder和HashCodeBuilder

没有评论 2011年2月26日

CompareToBuilder是对jdk中compareTo的一个扩展,提供了一个很好的compareTo()方法,来比较两个对象是否相等。
同样EqualsBuilder和HashCodeBuilder分别是对equals和hashCode方法的扩展。其实,参照CompareToBuilder的实现方式应该很容易理解EqualsBuilder和HashCodeBuilder方式,他们三者都是一种Builder,差别的是具体的实现方式或功能不一样而已,抽象出不同点,他们三者在结构上就是大同小异了。
继续阅读…

commons-lang-1.0中的CompareToBuilder

没有评论 2011年2月26日

CompareToBuilder是对jdk中compareTo的一个扩展,提供了一个很好的compareTo()方法,来比较两个对象是否相等。
这个类通常与EqualsBuilder(对equals方法的扩展)和HashCodeBuilder(对hashcode的扩展)两个类配合使用。
用这个类比较两个对象是否相等的时候,static和transient成员变量会被忽略。
该类中有一个reflectionCompare方法,使用反射决定哪些属性需要被用于测试或是比较两个对象是否相等。对于对象的私有属性,需要用Field.setAccessible()方法修改属性的可见性。除非拥有合适的权限,否则在java的权限管理器下比较会失败。当然,使用反射会比直接比较两个对象是否相等要慢。
继续阅读…

SAX解析XML的一点介绍

没有评论 2010年12月4日

SAX (Simple API for XML) 和 DOM (Document Object Model) 是当前两个主要的XML API,几乎所有商用的xml 解析器都同时实现了这两个接口。
DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用 DOM 的标准接口来操作这个树结构。但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的。
Simple API for XML(简称SAX)是个循序存取XML的解析器API。SAX提供一个机制从XML文件读取资料。它是除了文档对象模型(DOM)的另外一种流行选择。
SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是“民间”的事实标准。实际上,它是一种社区性质的讨论产物。
SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件的API ,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。
XML属性也作为传给元素事件资料的一部份。

SAX 处理是单方向性的;解析过的资料无法在不重新开始的情况下再次读取。 继续阅读…

Java ClassLoader

没有评论 2010年12月4日

Java的类装载器是Java动态性的核心,是用来把类(class)装载进JVM的。VM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。所有user-defined的class loader都是java.lang.ClassLoader的子类。jvm内置的class loader有3种,分别是 Bootstrap ClassLoader, Extension ClassLoader(即ExtClassLoader),System ClassLoader(即AppClassLoader)
bootstrap是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。
Extension ClassLoader是用来加载扩展类,即/lib/ext中的类。
AppClassLoader用来加载Classpath的类,是和我们关系最密切的类。
URLClassLoader用来加载网络上远程的类,暂且不讨论。 继续阅读…

对Java Collections Framework 的一些理解

没有评论 2010年10月20日

最近在读Java Collections Framework 的源码,读到了ArrayList类,还需努力抓紧时间读完所有的集合类,当然在读源码的过程中有必要逐渐消化掉读到的代码并加以理解。

对Java Collections Framework中最熟悉的类莫过于Collection接口了,打开这个类一看,他继承了Iterable接口。

继续阅读…