Core Java笔记——第4章

第四章对象与类

类之间的关系:

继承

接口继承

依赖

关联

直接关联

聚合

组合


如果一个类作为另一个类的构成部分,那么就是组合或聚合

聚合和组合的差别是:聚合的部分可以离开整体单独存在,组合却是有相同的生命周期,部分不能离开整体而单独存在——国破家亡。

Uml工具   rationalRose together  ArgoUML   GentleWare


构造器与类同名,

可以有1个或多个构造器(没有构造器的系统会生成默认构造器),

构造器参数可以有0个1个或多个

构造器没有返回值                                                                                          

构造器伴随new操作一起调用


内联方法:是否将方法设置为内联方法是java虚拟机的任务,即时编译器会监视那些简介、经常被调用、没有重载以及可优化的方法,把他们作为内联方法。


注意访问器(get方法)中不要返回一个可变类型的引用,如果需要这样,那就返回该对象的clone。

如果要返回一个可变数据域的拷贝,就要使用克隆。此处在编程中容易被忽略,千万要注意。

Return  (Date) hireDate.clone;


域修饰符   final代表首次赋值后不能被修改,static final才是常量。


静态方法不能操作对象,所以静态方法中没有this参数,也不能操作非静态域和非静态方法。只能操作静态域和调用静态方法。


Java采用值传递,也就是说,方法得到的是所有参数的拷贝,方法不能修改传递给他的任何参数变量的内容。

一个方法不能修改基本类型的参数(8种基本类型)。

一个方法可以修改对象类型的参数的状态。

一个方法不能实现让对象参数引用一个新的对象。

以上三点证明了java采用的不是引用传递。

 

对象的初始化过程是:先走域定义,再走构造器。如果域定义中赋值默认值,默认构造器中由于没有进行任何操作,所以不修改这些值。切记默认构造函数不赋值,初始值也不是默认构造器给赋的值。

当类没有任何构造器时,系统提供默认构造器。

域初始化时不一定赋值常量,也可以调用方法对域进行初始化(如静态方法)

如果构造器的第一行是this(参数列表),那么他代表调用该类的其他构造器。

初始化步骤:

0 如果有静态域和静态块,按照类中的先后顺序依次执行静态域初始化语句或静态块——只在类首次加载的时候执行,只执行一次。

1 所有数据域初始化为默认值(0、false、 null)

2 按照在类中出现的先后顺序,依次执行所有域初始化语句和初始化块。

3 如果构造器第一行调用了第二个构造器,先执行第二个构造器内容。

4 执行该构造器内容。

 

类第一次加载的时候,执行静态域初始化(只执行一次)。与实例域一样,如果没有显式设置为其他值,则默认初始化值是0、false、 null。

初始化语句需要在初始化块之前,因为必须先有声明,才能再赋值。不然初始化块中的域还没有被定义(声明)。

 

Finalize方法将在对象被垃圾回收器回收之前调用,但是你不能确定他什么时候能被回收,所以就不知道这个方法何时才能被调用。

System.ranfinalizersOnExit(true);方法可以保证finalizer方法在java关闭前被调用,不过这个方法不安全。有一种替代的方法是Runtime.addShutdownHook,添加关闭钩


如果无法确定使用的哪个包中的类,可以使用import java.util.Date;明确指出,如果同时需要两个相同的类怎么办呢?只能在每个类前边加上完整的包名了。

Java.util.Datedd = new java.util.Date();

Java.sql.Datedd2 = new java.sql.Date();

如果一个类找到了两个出处,而又没有上边这种详细说明用的哪个,就会遇到错误,而与import的先后顺序无关。

静态导入:import static java.lang.System.*;

就可以使用System类的静态方法和静态域,而不用加类名前缀。

还可以导入特定的静态方法和静态域  import staticjava.lang.System.out;

静态导入的好处是:调用静态方法不用加类名,调用静态常量也不用加类名。就是简洁的方法调用和简洁的常量调用。

 

Java编译时找的路径是先要寻找jre/lib和jre/lib/ext下的jar文件,然后再找类路径下的class。

一个源文件下必须只包括一个共有类,且源文件名称必须与共有类名称相同。


类设计技巧:

1 数据一定要私有

2 数据一定要初始化

3 不要在类中使用过多的基本数据类型

如果有多个相关的,可以用一个类代替,例如有城市、区域、街道、邮编,可以用一个Adress类替代,而把这些明细声明到Address中。

4 不是所有的域都需要独立的域访问器和更改器(有些是禁止更改的就不用提供更改器)

5 使用标准格式进行类定义

Public  default protected  private

实例方法   静态方法   实例域   静态域

6 将职责过多的类拆分

7 类名和方法名等要能体现他们的职责

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值