您的位置:首页 > 编程语言 > Java开发

再学习《Java2核心技术》读书笔记(2)

2006-10-01 17:25 239 查看

(三)第4章

1. 实现封装的关键在于绝不让方法直接访问其他类的实例字段。程序应该只能通过对象的方法与对象的数据交换。
2. cosmic superclass -》根超类,即Object类。
3. 要使用OOP要了解对象的三个特性:
(1)对象行为(behavior) -》能对对象施加什么方法。
(2)对象状态(state) -》对对象施加方法后,有什么反应。
(3)对象身份(identify) -》如何区别对象。
4. 面向过程编程从main函数开始;OOP从设计类开始,然后往每个类中加方法。认识类的简单方法:寻找问题需求分析中的名词;另外,方法与动词相对应。
5. 类与类之间常见的关系:
(1) 依赖(相互依赖的类数量要尽量少,即耦合要小)-》”use-a”-》一个类的方法操作了另一个类对象。
(2) 聚合-》”has-a”-》类A对象包含类B对象。
(3) 继承-》”is-a”-》表示更特殊的更一般的类之间关系。
6. 用构造器(constructor)了;来构造新的实例。constructor是一种专门的方法(作用:构造并初始化对象)。
类是创建对象的模板或蓝图。
new Date()-》构造了一个新的对象。
7. 可以这么使用:
System.out.println(new Date())
String s=new Date().toString()
但是这两个例子中被构造的对象只能使用一次。如果我们希望构造的对象可以被使用多次,就需要把对象存储在变量中。
8. 两种初始化对象的方法:
(1) 使用新构造的对象,如deadline=new Date()
(2) 使变量指向一个已经存在的对象,如deadline=birthday(这两个变量指向了同一个对象)
对象变量并不包含对象,对象变量只是指向一个对象。
在Java中,任何对象变量的值都是指向存储在别处的对象的一个引用。
9. deadline=null表明它当前没有指向任何对象。
10. Java对象变量看作是C++中的对象指针。
11. 所有的Java对象都存在堆(heap)中。
12. Java如要使用一个未初始化的指针,系统会产生一个运行时错误,而不是一些随机结果。Java不必担心内存管理,垃圾收集器会自动处理有关问题,而不会内存溢出。
13. Java使用clone方法得到一个对象的完全拷贝。
14. UTC:协调统一时间;GMT:格林威治标准时间。
15. 在Date类中时间是用距离一个固定点的毫秒数(可正可负)来表示。这个固定点为纪元(epoch),即UTC时间1970年1月1日00:00:00。
16. Date类:表示当前的时间点。GregorianCalendar类:用我们熟悉的日历符号表示日期。
17. GregorianCalendar类中月是从0开始计算,11指的是12月。
18. 更改方法(mutator method):set方法,add方法。访问方法(accessor method):get方法。
19. 一个.Java文件中,如果包含两个class,则只能有一个class是public的。
20. 当Java编辑器发现A.java用到B类时,就去寻找B.class,如果没有找到,则自动找B.java并编译。
21. 构造器(构造方法)与其他方法不同在于,构造器只能和new运算符一起被调用。且Java对象都是在堆中被构造的。
22. 不要在构造器中定义和实例字段名称一样的局部变量。
23. 对于一个类A的方法,如public void Method(double x)有两个参数:
(1) 方法名前出现的类型A的对象(隐式参数)
(2) 方法名后圆括号内的(显示参数)
在每个方法中,关键字this指向隐式参数。
24. 不要编写返回指向可变对象的引用的访问方法,要返回指向可变数据字段的拷贝(clone方法)。
25. 如果一个类的所有字段都是final,那么此类是不可变的(immutable),不可变的类的优点是它们不会被共享引用。
26. 对于定义static的字段,每个类中只存在一个这样的字段,它属于这个类,而不是属于单个的对象。
27. final:在构造器结束之后此值已被设定,且值不能在被改变。一般把在对象生命周期内不发生改变的字段标记为final。static final是静态常量。
28. 在Math类中PI是一个静态常量;在System类中System.out也是一个静态常量。
29. System类中有一个setOut方法,此方法是一个本地方法,并不是在Java程序中。本地方法可以绕过Java语言的访问控制机制。
30. 使用静态方法的两种情况:
(1) 该方法不能访问对象状态,所需参数通过显示参数提供
(2) 该方法要访问类的静态字段
31. static关键字的含义:表示属于一个类而不属于此类的任何特定对象的标量和函数
32. 用于产生同一类对象的方法称作工厂方法(factory method)
如NumberFortmat类中的getNumberInstance()方法,此方法返回类型为NumberFormat的对象。
33. 工厂方法可以返回该类的对象,还能返回该类继承的子类对象。
34. 每个类都可以有一个main方法,用于进行单元测试(unit testing),main方法中写上测试用例。
如要单独测试A类时,java A
如要执行具体某个应用程序时,java Application,这样类A的main不会被执行。
35. Java总是使用传值调用。Java的方法不能改变基本类型的参数。但对于对象参数来说就不一样了。
如:
public static void tripleSalary(Employee X)
{
x.raiseSalary(200);
}
调用:
harry=new Employee(….);
tripleSalary(harry)
执行步骤:
(1) x被初始化为harry值的一个拷贝,即一个对象应用。
(2) 向此对象应用raiseSalary方法。x和harry都指向那个Employee对象。
(3) 方法结束后,参数变量x不再使用。
36. Java程序设计不向对象使用引用调用,对象引用时通过值来传递的。
37. 几点建议:
(1) 方法不能改变基本的参数。
(2) 方法可以改变对象参数的状态。
(3) 方法不能让对象参数指向新的对象。
38. 只用类中没有其他构造器时,系统才会提供默认构造,如你已有一个自己写的构造器,又希望调用new ClassName()来创建实例,那就必须提供一个默认构造器(无参数),哪怕这样:
Public ClassName()
{
}
39. 方法中的参数名命名,一般有两种习惯:
(1) public Employee(String aName,double aSalary)
{
Name=aName;
Salary=aSalary;
}
(2) public Employee(String name,double salary)
{
this.name=name;
this.salary=salary;
}
40. 调用构造器后详细的执行构成:
(1) 初始化所有数据字段为默认值。
(2) 按在类声明中出现次序执行所有字段初始化语句和初始化块。
(3) 如构造器第一行调用了另一构造器,则执行被调用的构造器主体。
(4) 执行构造器主体。
41. 如静态字段需要复杂的初始化代码,用静态初始化块:
static
{
……
……
}
42. 引入包中的类对代码大小不影响,代码执行速度也不影响,但会影响编译速度。
43. 不能用import java.*或import java.*.*引入所有以java为前缀的包。
44. 如源文件中没有加入package语句,则源文件中类属于默认包(default package),默认包没有包名。
45. 对在com.mycompany包中的类PayrollApp.java从基目录
46. 类路径(class path)是所有基目录的集合,这些目录的子目录可以包含类文件。类路径所列举的目录和档案文件是进行类定位的起始点。
47. javac编译器总会在当前目录中查找文件,而java解释器只有在class path中包含了“.”目录的情况中才会查找当前目录。
48. 访问属性符:
public -》被任何类使用。
private -》只能被定义它们的类使用。
没有标明 -》可以被同一包中的所有的方法访问。
49. javadoc可以从源文件中产生HTML文档。
以/**开头,以*/结束。
每条这种文档注释在标记后都有包含着自由格式文件(free-form text)。标记以@开始。
自由格式文本首句应为一概要语句。Javac会自动提取以生成概要页。
在自由文本中允许使用HTML修饰符。
如:强调<em>…</em>
等宽字体<code>…</code>
着重强调<strong>…</strong>
图象<img ……>
如在此文档中含有其他文件的链接(如图表、图象),那应该把这些文件放入子目录doc-files中。
50. 几种注释:
(1) 类注释:在所有import语句之后,在class定义之前。
(2) 方法注释:紧靠着它所描述的方法前面。
@param -》参数描述
@return -》返回值描述
@throws -》抛出异常描述
(3) 字段注释:一般只对public static final字段描述
(4) 通用描述:
@author -》名字
@version -》版本说明
@since -》“自从”说明文本
@see link -》利用超链接指向javadoc文档其他相应部分。
(5) 包注释:要在包目录中添加package.html的文件
(6) 概要注释:要在包含所有源文件的目录之下添加overview.html文件
51. 提取注释步骤:
(1) 切换到包含所有要生成文档的源文件目录。如有嵌套包页要生成文档,比如com.horstman.corejava,那要转到包含子目录com的目录下(这也就是overview.html所在的目录)。
(2) 对于单个包,运行:
javadoc –d docDirectory nameOfPackage
对于多个包,运行:
javadoc –d docDirectory nameOfPackage1 nameOfPackage2 …
文件如果在默认包中,运行:
javadoc –d nameOfPackage *.java
52. 类的设计技巧:
(1) 一定要让数据私有。
(2) 一定要初始化数据。
(3) 不要在类中使用过多基本类型,即用其他类代替多个相关的基本类型字段。
(4) 并非所有字段都需单独的字段访问方法或更改方法。
(5) 为类定义使用标准格式
以下列顺序列出类的内容:公有特性、包作用域特性、私有特性。
每一部分中的顺序(本人习惯用Sun公司倡导的风格):实例字段、表态字段、实例方法、静态方法。
(6) 分解职责太多的类
(7) 让类和方法的名字反映它们的职责。一般用名词、前面有形容词修饰的名词、前面有动名词修饰的名词为类命名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: