《Java编程思想》第9章接口
1.抽象类和抽象方法2.接口3.完全解耦4.Java的多重继承1234567891011121314151617181920212223242526272829303132public interface CanFight { void fight();}public interface CanSwim { void swim();}public interface CanFly { void fly();}public class ActionCharacter { public void fight(){}}public class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { //CanFight接口和ActionCharacter类中的fight()方法的特征签名一样 public void swim() {} publ ...
《Java编程思想》第8章多态
8.1 再论向上转型对某个对象的引用视为对其基类型的引用的做法被称作向上转型。
单独创建一个奏乐符(Note)类:
1234567//: polymorphism/music/Note.java// Notes to play on musical instruments.package polymorphism.music;public enum Note { MIDDLE_C, C_SHARP, B_FLAT; // Etc.} ///:~
乐器类Instrument:
12345678910//: polymorphism/music/Instrument.javapackage polymorphism.music;import static net.mindview.util.Print.*;class Instrument { public void play(Note n) { print("Instrument.play()"); }} ///:~
12345678910 ...
《Java编程思想》第7章复用类
7.1 组合语法1234567891011121314151617181920212223242526272829303132333435//: reusing/SprinklerSystem.java// Composition for code reuse.class WaterSource { private String s; WaterSource() { System.out.println("WaterSource()"); s = "Constructed"; } public String toString() { return s; }} public class SprinklerSystem { private String valve1, valve2, valve3, valve4; private WaterSource source = new WaterSource(); private int i; priv ...
《Java编程思想》第5章初始化与清理
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。
初始化和清理(cleanup)正是涉及安全的两个问题。C++引入了”构造器(constructor)”的概念,这是一个在创建对象时被自动调用的特殊方法。Java中也采用了构造器,并额外提供了“垃圾回收器”。对于不再使用的内存资源,垃圾回收器能自动将其释放。
5.1 用构造器确保初始化1234567891011121314151617//: initialization/SimpleConstructor.java// Demonstration of a simple constructor.class Rock { Rock() { // This is the constructor System.out.print("Rock "); }}public class SimpleConstructor { public static void main(String[] args) { for(int i = ...
《Java编程思想》第2章一切都是对象
2.2 必须由你创建所有对象2.2.1 存储到什么地方2.2.2 特例:基本类型在程序设计中经常用到一系列类型,它们需要特殊对待。可以把它们想象成“基本”类型。之所以特殊对待,是因为new将对象存储在“堆”里,故用new创建一个对象,特别是小的、简单的变量,往往不是很有效。因此,对于这些类型,Java采取与C和C++相同的方法。也就是说,不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于栈中,因此更加高效。
Java要确定每种基本类型所占存储空间的大小。它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是Java程序比用其他大多数语言编写的程序更具有可移植性的原因之一。
基本类型
大小
最小值
最大值
包装器类型
boolean
Boolean
char
16位
Character
byte
8位
-128
+127
Byte
short
16位
-2^15
+2^15-1
Short
int
32位
Integer
long
64位
Long
floa ...
《Effective Java》读书笔记第12章序列化
对象序列化(object serialization)API,提供了一个框架,用来将对象编码成字节流,并从字节流编码中重新构建对象。“将一个对象编码成一个字节流”,称作将该对象序列化(serializing);相反的处理过程被称作反序列化(deserializing)。一旦对象被序列化后,它的编码就可以从一台正在运行的虚拟机被传递到另一台虚拟机上,或者被存储到磁盘上,供以后反序列化使用。
第74条:谨慎地实现Serializable接口要想使一个类的实例可被序列化,非常简单,只要在它的声明中加入“implements Serializable”字样即可。正因为太容易了,所以普遍存在这样一种误解,认为程序员毫不费力就可以实现序列化。实际的情形要复杂得多。虽然使一个类可被序列化的直接开销非常低,甚至可以忽略不计,但是为了序列化而付出的长期开销往往是实实在在的。
实现Serializable接口而付出的最大代价是,一旦一个类被发布,就大大降低了“改变这个类的实现”的灵活性。
实现Serializable的第二个代价是,它增加了出现Bug和安全漏洞的可能性。
实现Serializable的第三 ...