thinking in java
gedoua
这个作者很懒,什么都没留下…
展开
-
第一章 对象导论
Alan Kay曾经总结了第一个成功的面向对象语言,Smalltalk的五个基本特性1.万物皆为对象。2.程序师对象的集合,它们通过发送消息来告知彼此所要做的。3.每个对象都有自己的的由其他对象所构成的存储。4.每个对象都拥有其类型。5.某一特定类型的所有对象都可以接受同样的消息。[color=blue]每个对象都提供服务[/color][color=red...原创 2011-10-07 19:42:00 · 93 阅读 · 0 评论 -
第十四章 类型信息3.0
[color=blue]类型转换前先做检查[/color]迄今为止,我们已知的RTTI形式包括:1.传统的类型转换,如“(Shape)”,由RTTI确保类型转换的正确性,如果你执行了一个错误的类型转换,就会抛出一个ClassCastException异常。 2.代表对象类型的Class对象。通过查询Class对象可以获取运行期所需的信息。 3. RTTI在Java中...原创 2011-10-14 13:53:22 · 64 阅读 · 0 评论 -
第十四章 类型信息2.0
[color=blue]类字面常量[/color]Java 还提供了另一种方法来生成Class对象的引用:使用“类字面常量(class literal)”。对上述程序来说,看起来就象下面这样:FancyToy.class;这样做不仅更简单,而且更安全,因为它在编译期就会受到检查。并且它无需方法调用,所以也更高效。类字面常量不仅可以应用于普通的类,也可以应用于接口、数...原创 2011-10-14 13:23:19 · 93 阅读 · 0 评论 -
第十四章 类型信息1.0
运行时类型信息使得你可以在程序运行时发现和使用类型信息。本章将讨论 Java 是如何允许我们在运行期识别对象和类的信息。主要有两种方式:一种是传统的RTTI,它假定我们在编译期和运行期已经知道了所有的类型;另一种是“反射机制(reflection)”,它允许我们在运行期获得类的信息。我们先讨论“传统”的RTTI,再讨论反射。使用RTTI,你可以查询某个Shape引用所指向的对象的确...原创 2011-10-14 10:02:17 · 79 阅读 · 0 评论 -
第十三章 字符串
[color=blue]不可变String[/color][code="java"]public class Immutable { public static String upcase(String s) { return s.toUpperCase(); } public static void main(String[] args) { String q ...原创 2011-10-11 21:25:09 · 64 阅读 · 0 评论 -
第十二章 通过异常处理错误
[color=blue]异常参数[/color]throw new NullPointerException("t = null");关键字throw将触发许多十分奇妙的事情。通常,你首先使用new来创建对象,用以表示错误情况,此对象的引用将传给throw。尽管返回的异常对象其类型通常与方法设计的返回类型不同,但从效果上看,它就像是从方法“返回”的。此外,你能抛出任意类型的Th...原创 2011-10-11 13:55:47 · 84 阅读 · 0 评论 -
第十一章 持有对象
首先给出一个整体类图结构:常用的容器用黑色粗线框表示,点线框表示接口,实线框表示普通的类,带有空心箭头的点线表示一个特定的类实现了一个接口,实心箭头表示某个类可以生成箭头所指向类的对象。[img]http://dl.iteye.com/upload/attachment/567821/2371652b-d857-3583-8ffe-bef379b0705f.jpg[/img][...原创 2011-10-11 12:05:27 · 81 阅读 · 0 评论 -
第十章 内部类
如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像在下面这个例子中的一样:[code="java"]OutClass o = new OutClass();OutClass.InnerClass p = o.getInnerClass();[/code][color=blue]连接到外部类[/color]内部类能访问外围对象的所有成员,而不需要任何特殊...原创 2011-10-09 18:09:31 · 58 阅读 · 0 评论 -
第九章 接口
[color=blue]接口[/color]可以在interface关键字前面添加public关键字。如果不添加public关键字,则它具有包访问权限。[color=red]接口也可以包含域,但是这些域隐式地是static和final的[/color]。可以选择在接口中显式地将方法声明为public的,但即使你不这么做,它们也是public的。因此,当要实现一个接口时,在接口中被定...原创 2011-10-09 12:18:46 · 47 阅读 · 0 评论 -
第八章 多态
[color=blue]方法调用绑定[/color]将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定,叫做前期绑定。读者可能以前从来没有听说过这个术语,因为它是面向过程的语言中不需要选择就默认的绑定方式。上面问题的解决办法就是后期绑定,它的含义就是在运行时根据对象的类型进行绑定。后期绑定也就做动态绑定或运行时绑定。如果一种语言想实现后期绑定,就必须具有某种机制...原创 2011-10-09 10:44:21 · 55 阅读 · 0 评论 -
第七章 复用类
第一种方法非常直观,就是组合。第二种方法就是继承。组合只需将对象的引用置于新类中即可。[color=blue]初始化基类[/color]当创建了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建对象是一样的。二者区别就是后者是来自于外部,前者来自于内部。构建过程是从基类向外扩散的,所以基类在导出类构造器可以访问它之前,就已经完成了初始化。...原创 2011-10-09 10:20:46 · 80 阅读 · 0 评论 -
第六章 访问权限控制
如果将两个含有相同名称的类库以“*”形式同时引入,将会出现什么情况呢?如果同时引用了一个类,那么就会产生冲突。如:Vactor v = new Vactor(); 但是如果改成:java.util.Vactor()冲突就解决了。[color=blue]定制工具库[/color]可以使用import static 语句在你的系统上使用静态的方法:import static ...原创 2011-10-08 16:42:51 · 66 阅读 · 0 评论 -
第五章 初始化与清理
[color=blue]用构造器确保初始化[/color]注意,由于构造器的名称必须与类名完全相同,所以“每个方法首字母小写”的编码风格并不适合于构造器。[color=blue]区分重载方法[/color]参数顺序不同也足以区分两个方法。不过一般情况下不要这么做。[color=blue]设计基本类型的重载[/color]如果传入方法内部的数据类型小于方法中声...原创 2011-10-08 14:20:36 · 51 阅读 · 0 评论 -
第四章 控制执行流程
[color=blue]臭名昭著的goto[/color][code="java"]public class LabeledFor { public static void main(String[] args) { int i = 0; outer: for(;true;) { inner: for(; i原创 2011-10-08 14:12:29 · 60 阅读 · 0 评论 -
第三章 操作符
[color=blue]提升[/color]如果对基本数据类型执行算术运算或按位运算,大家会发现,只要类型比int小(即char byte short),那么在运算之前,这些值会自动转化成int。这样一来,最终生成的结果就是int类型。如果想把结果赋值给较小的类型,就必须使用类型转换。通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。当两个足够大的int类型进行相加...原创 2011-10-08 14:05:00 · 62 阅读 · 0 评论 -
第二章 一切都是对象
[color=blue]储存到什么地方[/color]栈放引用,堆放对象。基本类型的变量不用new来创建,而是创建一个并非是引用的自动变量。这个变量直接存储“值”,并置于栈中,因此更加高效。[color=blue]基本成员默认值[/color]若[color=red]类的某个成员是基本数据类型[/color],即使没有进行初始化,java也会确保它获得一个默认值,如...原创 2011-10-07 20:23:51 · 56 阅读 · 0 评论 -
第十四章 类型信息4.0
[color=blue]动态代理[/color]Java的动态代理比代理的思想更向前迈进了一步,因为它可以动态地创建代理并动态地处理对所代理方法的调用。在动态代理上所做的所有调用都会被重定向到单一的调用处理器上,它的工作是揭示调用的类型并确定相应的对策。下面是代码:1.被代理类 的接口 Proxied[code="java"]// 被代理类 需实现的 接口public in...原创 2011-10-14 14:47:16 · 164 阅读 · 0 评论