摘要:
1、Java中“流“类库让人迷惑的主要原因:创建单一的结果流,却需要创建多个对象。2、使用层叠的数个对象为单个对象动态地、透明地添加职责的方式,称作“修饰器“模式。修饰器必须与其所修饰的对象具有相同的接口,这使得修饰器的基本应用具有透明性——我们可以想修饰过或没有修饰过的对象发送相同的消息。3、为什么使用修饰器? 在直接使用扩展子类的方法时,如果导致产生了大量的、用以满足所需的各种可能的组合的子类,这是通常就会使用修饰器——处理太多的子类已经不太实际。4、修饰器的缺点:增加代码的复杂性。5、JavaI/O类库操作不便的原因在于:我们必须创建许多类——“核心”I/O类型加上所有的修饰器,才能得到 阅读全文
随笔分类 - 《Java编程思想》
《Java编程思想》之对象的集合(数组、List、Set、Map)二
2012-02-03 22:07 by java线程例子, 253 阅读, 收藏,
摘要:
上接:《Java编程思想》之对象的集合(数组、List、Set、Map)一22、使用自己创建的类作为HashMap的“键”,需要同时覆盖hashCode()和equals()。原因如下:1).默认的hashCode()继承自Object,它默认是使用对象的地址计算散列码。因此即使俩个对象的实例的内容相同,对象的地址是不同的,所以默认的hashCode()得到的散列码是不同的。如下例子:import java.util.HashMap;
import java.util.Map;
public class TestHashMap{ private int id; public Tes... 阅读全文
《Java编程思想》之对象的集合(数组、List、Set、Map)一
2012-02-03 00:19 by java线程例子, 278 阅读, 收藏,
摘要:
1、Arrays类:提供了操作数组的一些static方法,如fill() 用于以某个值填充整个数组。sort() 用于对数组的排序,需要参数的类型实现Comparable接口binarySearch() 用于在已经排序的数组中查找元素。asList() 接受任意的数组为参数,并将其转变为List容器。……2、如果一个字符串需要多次改变其值,那么应该使用更高效的StringBuffer取代String。3、复制数组System.arraycopy(),用它复制数组比用for循环复制要快得多。4、基本类型数组和对象数组都可以复制,然而,如果复制对象数组,那么只是复制了对象的引用——而不是对象本身的 阅读全文
《Java编程思想》之类型检查(RTTI与反射机制)
2012-02-01 16:57 by java线程例子, 295 阅读, 收藏,
摘要:
1、类型时类型识别(run-timetype identification,RTTI):当之有一个指向对象的引用时,RTTI可以让你找出这个对象的确切类型。2、Java运行时识别对象和类的信息,主要有俩种方式:1).一种是“传统“RTTI,它假定我们在运行时已经知道了所有的类型。2).另一种是“放射“机制,它允许我们在运行时获得类的信息。3、Class对象:每个类都有一个Class对象,保存在一个同名的.class文件中,它包含了与类相关的信息。4、在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象是否已经加载,就会根据类名查找.clas 阅读全文
《Java编程思想》之异常处理
2012-01-30 17:20 by java线程例子, 217 阅读, 收藏,
摘要:
1、抛出异常之后1).使用new在对象上创建异常对象2).终止当前的执行路径3).从当前环境中弹出对异常对象的引用4).异常处理机制接管程序,并开始执行异常处理机制2、异常处理理论上有两种基本模型1).终止模型:一旦异常抛出,就表明错误无法挽回,也能回来继续执行。比较实用。2).恢复模型:异常处理之后继续执行程序。但是可能导致“耦合”。3、自定异常类(具有带参数的构造器)class SimpleException extends Exception{ public SimpleException(){} public SimpleException(String msg){ ... 阅读全文
《Java编程思想》之更好了解内部类的价值(一个简单的例子)
2012-01-29 19:54 by java线程例子, 330 阅读, 收藏,
摘要:
上接《Java编程思想》之为什么需要内部类?public abstract class Event{ private long eventTime; protected final long delayTime; public Event(long delayTime){ this.delayTime = delayTime; start(); } public void start(){ eventTime = System.currentTimeMillis() + delayTime; } public boo... 阅读全文
《Java编程思想》之为什么需要内部类?
2012-01-29 19:45 by java线程例子, 715 阅读, 收藏,
摘要:
上接《Java编程思想》之内部类——深奥而复杂13、为什么需要内部类?1).内部类最吸引人注意的原因是:每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个就(接口的)实现,对于内部类都没有影响。2).一个类中以某种方式实现两个接口。由于接口的灵活性,你有两种选择:使用单一类,或者使用内部类。从实现观点看,以下俩种方式没什么区别。interface A{}
interface B{} class X implements A, B{} class Y implements A{ B makeB(){ return new B(){ ... 阅读全文
《Java编程思想》之内部类——深奥而复杂
2012-01-29 19:23 by java线程例子, 268 阅读, 收藏,
摘要:
1、当将内部类向上转型为其基类,尤其是转型为一个接口的时候,内部类就有了用武之地(从实现某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样得。)这是因为此内部类——某个接口的实现——对于其他人来说能够完全不可见,并且不可用。所得到的只是指向基类或接口的引用,所以能够很方便地隐藏实现细节。interface Destination{ String readLabel();
}
interface Contents{ int value();
}
class Parce1{ private class PContents implements Con... 阅读全文
《Java编程思想》之接口(Java中实现多重继承?!)
2012-01-27 19:21 by java线程例子, 1095 阅读, 收藏,
摘要:
1、interface不仅仅只是一个极度抽象的类,因为它允许人们通过创建一个能够被向上转型为多种基类型的类,来实现某种类似C++多重继承变种的特性。2、像类一样,可以在interface关键字前面添加public关键字(但仅限于该接口在与其同名的文件中被定义),或者不添加它而使其只是具有包访问权限,这样它就只能在同一个包内可用。3、可以选择在接口中显示地将方法声明为public的,但即使你不这么做,它们也是public的。因此当实现一个接口时,在接口中被定义的方法必须被定义为public。4、Java中,在方法的继承过程中,其可访问权限不能被降低。5、接口也可以包含字段,但是它们隐式为stat 阅读全文
《Java编程思想》之多态(面向对象程序语言的第三基本特征)
2012-01-26 21:32 by java线程例子, 228 阅读, 收藏,
摘要:
1.在面向对象的程序设计语言中,多态是继承数据抽象和继承之后的第三基本特征。2.“封装”通过合并特征和行为来创建新的数据类型。3.“实现隐藏”则通过将细节“私有化”,把接口和实现分离开来。4.多态的作用则是消除类型之间的耦合关系。5.耦合就是指两个或两个以上的实体相互依赖于对方的一个量度。6.多态也称作动态绑定、后期绑定或运行时绑定。7.将一个方法调用同一个方法主体关联起来被称作“绑定”。8.“前期绑定”:程序执行前进行的绑定,由编译器和连接程序实现。面向对象的语言不需要选择就默认的绑定方式。9.Java中除了static方法和final方法(private方法属于final方法)之外,其它所 阅读全文
《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
2012-01-21 16:07 by java线程例子, 300 阅读, 收藏,
摘要:
控制对成员的访问权限有两个原因: 第一是为了使用户不要碰触那些他们不该碰触的部分,这些部分对于类内部的操作是必要的,但是它井不属于客户端程序员所需接口的一部分。因此,将方法和域指定成private,对客户端程序员而言是一种服务。因为这样他们可以很清楚地看到什么对他们重要,什么是他们可以忽略的。这样简化了他们对类的理解。 第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。例如,最初可能会以某种方式创建一个类,然后发现如果更改程序结构,可以大大提高运行速度。 如果接口和实现可以被明确地隔离和加以保护,那么就可以实现这一目的... 阅读全文
《java编程思想》之垃圾回收器如何工作
2012-01-18 23:00 by java线程例子, 559 阅读, 收藏,
摘要:
忙了几天,无关学习。旁晚才又看起书来,想想自己还有10来本。呵。这寒假过得会很局促。以下内容摘自《java编程思想》,再稍作整理 在以前所用过的程序语言中,在堆上分配对象的代价十分高昂,因此读者自然会觉得Java中所有对象(基本类型除外)都在堆上分配的方式也非常高昂。然而,垃圾回收器对于提高对象的创建速度,却具有明显的效果。听起来很奇怪——存储空间的释放竟然会影响存储空间的分配,但这确实是某些Java虚拟机的工作方式。这也意味着,Java从堆分配空间的速度,可以和其他语言从堆栈上分配空间的速度相媲美。 打个比方,您可以把C++里的堆想象成一个院子,里面每个对象都负责管理自己的地盘。一段时间以后 阅读全文
《java编程思想》之java对象的存储
2012-01-14 15:16 by java线程例子, 223 阅读, 收藏,
摘要:
以下内容摘自《java编程思想》第三版:程序运行时,对象是怎么进行放置安排的呢?特别是内存是怎么分配的呢?有六个不同的地方可以用来存储数据:1、寄存器:这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器根据需求进行分配。你不能直接控制,也不能再程序中感觉到寄存器存在的迹象。2、堆栈:位于通用RAM(随即访问存储器)中,但通过“堆栈指针”可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那里的内存。这是一种快速有效的分配存储方法,仅次与寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以 阅读全文
《Java编程思想》之对象的创建、使用、生命期(简单比较java与C++的不同之处)
2012-01-11 21:17 by java线程例子, 335 阅读, 收藏,
摘要:
这个寒假有不少书要看呀。。今天开始拜读起《java编程思想》。写写博客记录读书点滴的同时激励自己继续努力!第一章、对象导论 这一章是对面向程序设计的一个综述,介绍了接口与实现、抽象与封装、消息与函数。继承与数组,以及多态等等。以下内容摘自《Java编程思想》第三版: 对象最重要的要素之一便是它们生成和销毁。对象数据位于何处?怎么控制对象的生成周期?对此存在着不同的处理哲学。 C++认为效率控制最重要的议题,所以给程序员提供了选择的权力。为了追求更大的执行效率,对象的存储空间和生命周期可以在编写程序时确定。这可以通过对象置于栈堆(它们有时被称为自动变量(automatic v... 阅读全文