Java构造时成员初始化的陷阱
让我们先来看两个类:Base和Derived类。注意其中的whenAmISet成员变量,和方法preProcess()
public class Base
{
Base() {
preProcess();
}
void preProcess() {}
}
public class Derived extends Base
{
public String whenAmISet = "set when declared";
@Override void preProcess()
{
whenAmISet = "set in preProcess()";
}
}
如果我们构造一个子类实例,那么,whenAmISet 的值会是什么呢?
public class Main
{
public static void main(String[] args)
{
Derived d = new Derived();
System.out.println ...
如何在Java中避免equals方法的隐藏陷阱
译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少。如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。原文转自http://www.artima.com/lejava/articles/equality.html 三位作者都是不同领域的大拿,有兴趣的读者可以从上面这个连接直接去阅读原文。
摘要
本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性。
在《Effective Java》的第8项中,Josh Bloch描述了当继承类作为面向对象语言中的等价关系的基础问题,要保证派生类的equal正确性语义所会面对的困难。Bloch这样写到:
除非你忘记了面向对象抽象的好处,否则在当你继承一个新类或在类中增加了一个值组件时你无法同时保证equal的语义依然正确
在《Programming in Scala》中的第28章演示了一种方法,这种方法允许即使继承了新类,增加了新的值组件,e ...
20非常有用的Java程序片段
下面是20个非常有用的Java程序片段,希望能对你有用。
1. 字符串有整型的相互转换
String a = String.valueOf(2); //integer to numeric string
int i = Integer.parseInt(a); //numeric string to an int
2. 向文件末尾添加内容
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(”filename”, true));
out.write(”aString”);
} catch (IOException e) {
// error processing code ...
OSGi和Java企业级运算的未来方向
摘要: OSGi也是译者最近才接触到的技术,但是在OSGi的发展中,它越来越收到了来自行业的关注。作为OSGi的动态部署,译者认为此项规范对于企业应用应该是非常有帮助的。特别在银行的信息化建设中将会起到很重要的作用,因为国内大多的银行业都在强调7*24小时系统,但是其业务发展又非常迅速,常常有新需求,新变更。如果每一次上线变更都将重启系统的话,对银行的服务质量和形象将会造成较大的影响。 此文只是讲述了OSGi在Java企业运算中的新动向,并没有具体的介绍OSGi的规范。关于OSGi规范的文档可以从jcp上下载
原文出处:这里
OSGi和Java企业级运算的未来方向
by Eric Newcomer
无论JCP是否完全的迷失了它的方向,它都不同程度受到来自外部活动的影响。Spring框架和Hibernate影响了EJB3,而且JPA也是一个好的例子。另外日渐感觉到的影响来自于对OSGi规范的采用和其实现,特别是实现了OSGi的开源的Eclipse Equinox,Apache Felix和Knoplerfish框架
OSGi规范为Java定义动态模组元信息系统和在其交互模组中的面向服 ...
深入浅出单实例Singleton设计模式
单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。当然,作为一个技术负责人的你,你当然有权利通过使用非技术的手段来达到你的目的。比如:你在团队内部明文规定,“XX类只能有一个全局实例,如果某人使用两次以上,那么该人将被处于2000元的罚款!”(呵呵),你当然有权这么做。但是如果你的设计的是东西是一个类库,或是一个需要提供给用户使用的API,恐怕你的这项规定将会失效。因为,你无权要求别人会那么做。所以,这就是为什么,我们希望通过使用技术的手段来达成这样一个目的的原因。
本文会带着你深入整个Singleton的世界,当然,我会放弃使用C++语言而改用Java语言,因为使用Java这个语言可能更容易让我说明一些事情。
Singleton的教学版本
这里,我将直接给出一个Singleton的简单实现,因为我相信你已经有这方面的一些 ...
OMG, Jave的JMenu居然有433个方法
Java的Swing类库中有一个类叫JMenu,这个类上面有7层的继承,加上所有被继承下来的方法,这个类一共有433个方法,虽然,很多类是从上面继承下来的,而它自己的方法并没有定义太多的方法,不过,继承体系过深,在底层类上要想知道所有的继承下来的东西并不是一样容易的事情。这个例子展示了一个滥用代码重用的反面案例。我个人认为我们应该反思一下滥用面向对象的作法。
要把Java一个类所有的方法例出来并不是一件难事,使用Javascript 利用Firefox浏览器所支持的Package来穷举JMenu的方法可以很方便的列出所有的方法。
下面是这段Javascripts程序:
jmenu = new Packages.javax.swing.JMenu( );
methods = jmenu.getClass( ).getMethods( );
regx = /j[^( ]+([^)]*)/; // match just the method
for (var i = 0, jsArray=[], name = "";
...
Java书籍Top 10
下面是Java Inside上推荐的十本不错的Java书籍。(文章来源)
1)Java Language Specification, Third Edition (by James Gosling)
本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南。如果你想知道语言之构造的精确含义,本书是最好的资源。
中文版链接:《Java编程规范》
英文版链接:《The Java Language Specification (3rd Edition) 》
2) Effective Java , Second Edition (by Joshua Bloch)
本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。.
本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。…
中文版链接:《Effect ...
Java EE6 初探
在tss上,Reza Rahman发表了一篇关于JAVA EE6《Java EE6 Overview》的文章,在文章里面他谈及一些关于JavaEE6草案的一些修改内容。
想JAVA企业级应用一路走来,从J2ee到Java EE5 在到即将要推出的Java EE6经历了一个由复杂到简单,由繁到简的过程。
Reza Rahman 文章说,Java EE6将会更简单,更轻量级,更易部署,Java EE6将会裁剪到Java EE5中不实用的部分。并且Java EE6将会为不同的用户群提供不同的规范子集。
回顾上一版本Java EE 5中,主要引入了以下改变:
1)引入了EJB3.0
2)引入了JSF作Tier framework.
3)使用JAX-WS2.0取代了JAX-RPC作新一代的SOAP的Web service API
4)使用POJO编程,零配置系统和自由的XML减轻了系统的复杂性。
而新版本的Java EE 6中,提供了一个更为简单,新型和完美整全的平台,并提供了非常丰富的技术,其包含WebBeans 1.0和JAX-RS 1.1,以及更为成熟 ...