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

(三)第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,则只能有一个classpublic的。

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:在构造器结束之后此值已被设定,且值不能在被改变。一般把在对象生命周期内不发生改变的字段标记为finalstatic 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,这样类Amain不会被执行。

35.    Java总是使用传值调用。Java的方法不能改变基本类型的参数。但对于对象参数来说就不一样了。

如:

public static void tripleSalary(Employee X)

{

      x.raiseSalary(200);

}

调用:

harry=new Employee(….);

tripleSalary(harry)

执行步骤:

(1)     x被初始化为harry值的一个拷贝,即一个对象应用。

(2)     向此对象应用raiseSalary方法。xharry都指向那个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)   让类和方法的名字反映它们的职责。一般用名词、前面有形容词修饰的名词、前面有动名词修饰的名词为类命名。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值