类与对象
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。对象可以来自标准库,也可以自定义。传统的结构化设计是通过一系列的过程(算法)来求解问题,只要确定了过程,就需要考虑存储数据的方式,所以就得先确定如何操作数据,然后才能组织数据,这也为什么有《算法+数据结构=程序》的原因。而面向对象编程,则相反,每个对象相对独立,只关注对象本身即可。
什么是类
类(class)是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。
封装(encapsulation),跟对象有关,是将数据和行为组合起来,对对象的使用者隐藏了数据的具体实现。对象包含属性和方法。封装的关键便是不可以直接访问某个类的属性。
一般设计类,都是提取名词,动词。
什么是对象
对象具有三个特征:
对象的行为
对象的状态
对象的标识
重载:相同的方法名,不同的参数(参数类型,参数个数,参数顺序)
类之间的关系
在类之间,最常见的关系:
依赖(use-a)
聚合(has-a)
继承(is-a)
依赖是最常见,最明显的一种关系,。通常应该尽可能减少类之间的依赖,做到某个类改变不影响别的类,是一种降低耦合度表现。
聚合,也叫关联,是一种具体且易于理解的关系。如类A的对象包含类B的对象。
继承,表示特殊与一般的关系。通常继承的类,都比较具体。
初始化块
不带static块
带static块
不带static的初始化块,在每次创建对象时,初始化一次。
带static的初始化块,在类加载时只初始化一次。
对象析构和finalize方法
如c++有显式的析构方法,其中放入一些当对象不再使用时需要执行的清理代码,常见析构操作,便是回收对象所占存储空间。
Java有自己的垃圾回收机制,不需要人工回收,也不支持析构。当年,如果使用了内存之外的资源,如文件读写,将其回收还是有必要的。通常会为类添加finalize方法,该方法会在垃圾回收器回收对象之前调用,但在实际应用中,不使用finalize,因为很难知道这个方法什么时间会被调用。有两种方式:
System.runFinalizersOnExit(true),不安全
Runtime.addShutdownHook(Thrad hook),注册jvm关闭的钩子
如果需要立刻关闭,使用close清理