突破Java异常处理规则
突破Java异常处理规则[@more@] 问题: 我在我的应用程序中调用了外部方法并且想捕获它可能抛出的异常。我能捕获java.lang.Exception吗? 答案: 通过一个给定的方法去处理所有运行时和检测异常对于预防外部错误是不充分的。 你可以去读目前 JavaWorld文章 – “Java Tip 134: When Catching Exception, Don’t Cast Your Net Too Wide”。这篇文章警告了捕获java.lang.Exception和java.lang.Throable是不好的。捕获你能指定的异常对于代码的可维护性是十分重要的。然而这个规则依赖于特殊的环境。如果你不打算你的程序崩溃并且保
用Java实现断点续传(HTTP)
用Java实现断点续传(HTTP)[@more@] (一)断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-A
我的面向对象程序观
我的面向对象程序观[@more@] 一、面向对象概念的一些误解 “面向对象”是一个如今被人叫烂的词汇,就像去年人们都喜欢把自己的公司打上“.com”的标记一样。其实有多少人能真正理解这个词汇呢,很难说。我喜欢这样来比喻人们对“对象”一词的滥用。“对象”就好比人们经常说的“酷”和“爽”,很多人并不仔细考虑这两个词的差别,在很多情况下他们是通用的,“酷”和“爽”通常表达“心情不错”的意思,你可以在你玩的高兴的时候,大声的叫嚷“太酷了,太爽了”,这个时候两个词汇是通用的。但是你可以说“这个人很酷啊”,但是你不
编写高效的线程安全类
编写高效的线程安全类[@more@] Java 编程语言为编写多线程应用程序提供强大的语言支持。但是,编写有用的、没有错误的多线程程序仍然比较困难。本文试图概述几种方法,程序员可用这几种方法来创建高效的线程安全类。 并发性 只有当要解决的问题需要一定程度的并发性时,程序员才会从多线程应用程序中受益。例如,如果打印队列应用程序仅支持一台打印机和一台客户机,则不应该将它编写为多线程的。一般说来,包含并发性的编码问题通常都包含一些可以并发执行的操作,同时也包含一些不可并发执行的操作。例如,为多个客户机和一个
浅析Java语言中的内部类
浅析Java语言中的内部类[@more@] 提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦。学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计
对象引用是怎样严重影响垃圾收集器的
对象引用是怎样严重影响垃圾收集器的[@more@] 果您认为 Java 游戏开发人员是 Java 编程世界的一级方程式赛车手,那么您就会明白为什么他们会如此地重视程序的性能。 游戏开发人员几乎每天都要面对的性能问题,往往超过了一般程序员考虑问题的范围。哪里可以找到这些特殊的开发人员呢?Java 游戏社区就是一个好去处(参见 参考资料)。 虽然在这个站点可能没有很多关于服务器端的应用,但是我们依然可以从中受益,看看这些“惜比特如金”的游戏开发人员每天所面对的,我们往往能从中得到宝贵的经验。让我们开始游戏吧! 对象泄漏
J2EE学习经验和流程
J2EE学习经验和流程[@more@] 在这里我谈谈我在学习j2ee流程,并谈到在此过程中领会的经验和教训。以便后来者少走弯路。 Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE。这三块相互补充,应用范围不同。 J2SE就是Java2的标准版,主要用于桌面应用软件的编程; J2ME主要应用于嵌入是系统开发,如手机和PDA的编程; J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 先学习j2SE 要学习j2EE就要先学习j2SE,刚开始学习j2se先建议不要使用IDE,然后渐渐的过渡到使用
Java嵌入式开发讲座(第一讲)
Java嵌入式开发讲座(第一讲)[@more@] 简介使用Java编写Palm OS程序的解决方案 现在,使用Java语言为 Palm OS编写程序的领域还没有完全统一,并且也有许多程度上的差异,目前,市面上有好几种不同的可用的应用程序接口,每种应用程序接口都给出了一个到当前的Palm OS应用程序不同程度的访问权限。也许这其中大家最熟悉的是Sun微系统出品的产品;但是能够为Palm OS写程序的绝不只有这一种产品。本文这一部分并不是介绍使用Java编写Palm程序的教程--因为每种我们将要讨论的解决方案都有自己的要求和值得注意的地方--而是一篇向开发者
12个最重要的J2EE最佳实践
12个最重要的J2EE最佳实践[@more@] 最佳实践 1、始终使用 MVC 框架。 2、在每一层都应用自动单元测试和测试管理。 3、按照规范来进行开发,而不是按照应用服务器来进行开发。 4、从一开始就计划使用 J2EE 安全性。 5、创建您所知道的。 6、当使用 EJB 组件时,始终使用会话 Facades。 7、使用无状态会话 bean,而不是有状态会话 bean. 8、使用容器管理的事务。 9、将 JSP 作为表示层的首选。 10、当使用 HttpSession 时,尽量只将当前事务所需要的状态保存其中,其他内容不要保存在 HttpSessi
Java嵌入式开发讲座(第二讲)
Java嵌入式开发讲座(第二讲)[@more@] 第一节 引言 J2ME概述 到目前为止,大部分人都已非常熟悉 Java 2平台,以及 Sun如何把 Java技术分成三个版本(标准版、袖珍版以及企业版),Sun 在1999年6月时推出了 Java 2袖珍版 (J2ME)来满足消费电子和嵌入设备的需要。J2ME是为了那些使用有限的能源、有限的网络连接 (常常是无线连接)以及有限图形用户界面能力的设备开发的。它最初的目标是 16位或 32位处理器,16 MHz时钟频率,512K或更少内存的设备。乍一看之下,J2ME就像一个没有绑定明显主题的松散的应用程序接口和技术规范。我们想通
Java嵌入式开发讲座(第三讲)
Java嵌入式开发讲座(第三讲)[@more@] 无论学习什么新事物,都讲究循序渐进。学习J2ME也不例外,在此我想先介绍一下使用J2ME开发Palm上的一个小的应用程序,再深入探讨开发更加复杂的应用程序,好,那我么就开始吧。 第一节 获得 J2ME 你可以从Sun网站上下载到 J2ME CLDC文件。第一个文件是 j2me_cldc_-1_0-src.winsol.zip,它包括所有开发 CLDC应用程序时需要的类库。除了包括类库以外,它还包括源代码以及 Windows和 UNIX下的可执行代码,用于 MIDP规定的 Java虚拟机引用实现。看了前几篇文章的读者肯定都知道,这里提到的J
破除java神话之线程按优先级唤醒
破除java神话之线程按优先级唤醒[@more@] 在编写多线程代码的时候经常发生多个线程等待一个事件的情况。这种情况多发生于多个线程在同步方法或者同步块内调用wait方法等待同一个被锁住的对象。当另一个锁住该对象的线程从同步方法或者同步块中调用notify或者notifyAll方法时这些等待线程被唤醒。notify调用仅仅唤醒一个线程,因此如果有多个线程正处于等待状态,那么不会有对锁的竞争。另一方面,notifyAll调用唤醒所有的等待线程而造成竞争,然而只有一个线程能够得到锁,其它的都会被阻塞。 当多个线程处于等待状态时的问题是当调
小议学习Java的浮躁心态
小议学习Java的浮躁心态[@more@] 引出篇 “切忌浮躁”——我想这是在任何学习方法中,都会特意提出来的。 在国内的几个论坛也混了几年,甚至眼看着曾经轰轰烈烈的javaunion从成长到消失。在javaunion ,chinajavaworld,dev2dev,javaresearch,cn-java等论坛上,也相遇或结识了很多java爱好者,有经验丰富者,也有初出茅庐者。 其实,国内技术论坛,是个很奇怪很有意思的地方。从这里成长了一批批的开发者,但也从这里消失了一批批的开发者。犹记得javaunion论坛曾经的一篇名为“为什么两年前的问题,依然在今天还在重复的问”的
为什么Java中继承是有害的
为什么Java中继承是有害的[@more@] 概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系)。实际上80%的代码应该完全用interfaces写,而不是通过extends。“JAVA设计模式”一书详细阐述了怎样用接口继承代替实现继承。这篇文章描述设计者为什么会这么作。 Extends是有害的;也许对于Charles Manson这个级别的不是,但是足够糟糕的它应该在任何可能的时候被避开。“JAVA设计模式”一书花了很大的部分讨论用interface继承代替实现继承。 好的设计者在他的代码中,大部分用interface,而不是具体的基类。本文
深入浅出Java设计之备忘录模式
深入浅出Java设计之备忘录模式[@more@] 一、引子 俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。 但是在我们手指下的程序世界里,却有的后悔药买。今天我们要讲的备忘录模式便是程序世界里的“月光宝盒”。 二、定义与结构 备忘录(Memento)模式又称标记(Token)模式。GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部
Java虚拟机类装载:原理、实现与应用
Java虚拟机类装载:原理、实现与应用[@more@] 一、引言 Java虚拟机(JVM)的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程。JVM的类动态装载技术能够在运行时刻动态地加载或者替换系统的某些功能模块, 而不影响系统其他功能模块的正常运行。本文将分析JVM中的类装载系统,探讨JVM中类装载的原理、实现以及应用。 二、Java虚拟机的类装载实现与应用 2.1 装载过程简介 所谓装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的class对象的过程,其中
Java 理论与实践: 关于异常的争论
Java 理论与实践: 关于异常的争论[@more@] 关于在 Java 语言中使用异常的大多数建议都认为,在确信异常可以被捕获的任何情况下,应该优先使用检查型异常。语言设计(编译器强制您在方法签名中列出可能被抛出的所有检查型异常)以及早期关于样式和用法的著作都支持该建议。最近,几位著名的作者已经开始认为非检查型异常在优秀的 Java 类设计中有着比以前所认为的更为重要的地位。在本文中,Brian Goetz 考察了关于使用非检查型异常的优缺点。 与 C++ 类似,Java 语言也提供异常的抛出和捕获。但是,与 C++ 不一样的是,Java 语言支
全面认识JAVA
全面认识JAVA[@more@] 作SCJP培训已经有一段时间了,到我这学习的有在校的大学生,也有在职的开发人员。通常这些学员此前都对Java已有一些了解,但普遍对Java缺乏总体的认识。于是学员总是问,Java应该怎么学?Java能做什么?什么是Applet?什么是Servlet、Jsp、EJB?还有Webspere、Weblogic又是做什么的等等。之所以学员会有这些疑问,是因为大家普遍对Java相关概念听说的太多而了解的又相对少的缘故。 学通Java语言需要一个过程,所有Java相关的概念都会在学习的过程中逐渐变得清昕。这个过程的开始就是要先学会标准的Java技术(J2
垃圾收集器与Java编程
垃圾收集器与Java编程[@more@] 垃圾收集器(Garbage Collector,GC)对Java程序员来说,基本上是透明的,但是一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能。本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能。 GC的基本原理 Java的内存管理实际上就是对象的管理,其中
Java 异常处理六
Java 异常处理六[@more@] “throw”语句 所有的方法都使用“throw”语句来抛出一个异常。Throw语句需要一个单独throwable对象,这个对象是任意Throwable类的子类。如下类所示: throw someThrowableObject; 让我们在程序的上下文中来看一下throw语句。下面的pop方法把来自于一个公共堆栈中的一个执行类给删除。这个方法从堆栈上面的元素,并且返回被删除的对象。 public Object pop() throws EmptyStackException { Object obj; if (size == 0) { throw new EmptyStackException(); } obj