【自学】Java核心技术卷1_4对象与类

  • 实例instance:由类构造对象的过程称为创建类的实例
  • 实例域instance field:对象中的数据称为实例域
  • 方法:操纵数据的“过程”称为方法(这里是面向过程编程的“过程”)
  • 状态:对象的实例域的值集合称为对象当前的状态(只能通过调用方法改变状态)

类之间的关系:

  • 依赖(A uses-a B):A类的方法要使用B类的对象——尽量减少依赖关系,降低类间耦合
  • 聚合(A has-a B):A类的对象包含B类的对象,即B类对象是A类的实例数据
  • 继承(A is-a B):父类、子类
  • 关联
  • 直接关联
  • 接口实现

【自学】Java核心技术卷1_4对象与类

  • 先从设计类开始,再往类中添加方法:分析问题中的名词、动词,负责完成动作的对象
  • 构造对象、指定其初始状态、应用方法
  • 构造器constructor:与类同名的用于构造、初始化对象实例的方法。
  • 对象变量:构造好的对象可放在对象变量中,以便多次使用,对象变量的值只是对对象的引用而非对象本身的实例域,没有实际包含对象(此处的引用区别于C++的变量引用别名,而是类似于指针的存在,不过java没有指针)。对象变量没有引用对象时不能调用方法
  • 【自学】Java核心技术卷1_4对象与类

【自学】Java核心技术卷1_4对象与类

  • Java类库将保存时间与给时间点命名分开,类库包含表示时间点的Date类、日历表示法的LocalDate类,LocalDate类使用静态工厂方法构造对象
  • 更改器方法mutator method:能修改对象状态的方法。(默认的)
  • 访问器方法accessor method:只访问对象状态的方法。(要带有const)
  • Java所有方法都必须在类的内部定义,但方法是否内联由Java虚拟机决定

【自学】Java核心技术卷1_4对象与类

【自学】Java核心技术卷1_4对象与类

static

  • 静态域:属于类不属于对象,类的所有实例(对象)共享静态实例域(对象的数据)
  • 静态常量:static final
  • 静态方法:没有隐式参数this,不能操作对象的实例,可以访问类的静态域,类名、对象名均可调用静态方法

【自学】Java核心技术卷1_4对象与类

  • 【自学】Java核心技术卷1_4对象与类

工厂方法模式

  • 处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂通常是一个用来创建其他对象的对象。工厂是构造方法抽象,用来实现不同的分配方案。
//定义几个类
class Button{/* ...*/}
class WinButton extends Button{/* ...*/}
class MacButton extends Button{/* ...*/}
//定义工厂接口ButtonFactory
interface ButtonFactory{
    abstract Button createButton();//接口的抽象方法
}
//实现接口的不同的类
class WinButtonFactory implements ButtonFactory{
    Button createButton(){
        return new WinButton();
    }
}
class MacButtonFactory implements ButtonFactory{
    Button createButton(){
        return new MacButton();
    }
}
  • 按值调用(call by value) :方法接收的是调用者提供的值。不能修改传值调用所对应的变量值,即不能修改形参对应变量的值。
  • 按引用调用(call by reference):方法接收的是调用者提供的变量地址(对某个变量的引用)。方法可以修改传递引用所对应的变量值,即可以修改形参这个引用所指变量的值。 (按引用调用时:形参也是引用,不过是实参的拷贝,所以按引用调用其实也是按(引用)值调用。形参和实参二者引用同一个对象/变量,可以通过形参这个拷贝引用改变其所引对象的状态,但形参无法改变实参这个引用的值,让其引用一个新对象)
  • Java 程序设计语言总是采用按值调用,方法得到的是所有参数值的一个拷贝,不能修改传递给它的任何参数变量的内容。
  • 方法的签名:方法名和参数类型称为方法的签名。
  • 实例域若没在构造器中初始化,则默认初始化为0,false,null等值,而局部变量必须显示初始化
  • 仅当类没有提供任何构造器的时候,系统才会提供一个默认的无参构造器

【自学】Java核心技术卷1_4对象与类

  • 初始化实例数据域的方法:在构造器中设置值、在声明中赋值、初始化块
  • 初始化块(initializationblock):在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。
  • finalize:Java有自动的垃圾回收器,不需要人工回收内存,所以不支持析构器,但当对象使用了内存之外的其他资源(如文件,如使用了系统资源的另外一个对象的句柄)时,需要用finalize方法在垃圾回收器清除对象之前回收资源。
  • close:如果某个资源需要在使用完后立刻被关闭,则应人工调用close方法完成相应清理操作

  • 一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。标记为public 的部分可以被任意的类使用;标记为 private 的部分只能被定义它们的类使用。如果没有指定 public或private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。
  • 访问另一个包中的公有类:1)类名前添加完整包名;2)import包或者特定类
  • import:可以导入包、类、包中所有类(*)、静态域、静态方法
  • 打包:将包名放在源文件开头、包中定义类的代码之前,并把属于包的文件都放在与包名匹配的子目录中
  • 【自学】Java核心技术卷1_4对象与类
  • 类路径:所有包含类文件的路径的集合。类路径列出的目录和归档文件是搜寻类的起始点
  • 【自学】Java核心技术卷1_4对象与类  【自学】Java核心技术卷1_4对象与类

【自学】Java核心技术卷1_4对象与类

【自学】Java核心技术卷1_4对象与类

【自学】Java核心技术卷1_4对象与类  【自学】Java核心技术卷1_4对象与类【自学】Java核心技术卷1_4对象与类

  • 设置类路径:java –classpath …、设置CLASSPATH环境变量(整个指令写在一行)

文档注释

  • 在源代码中添加注释(用定界符/**开始),再用JDK的javadoc工具由源文件生成HTML文档
  • javadoc命令支持通配符,例如使用*.java来代表当前路径下的所有java源文件,javadoc常用的选项有如下几个:
  1. -d : 该选项指定一个路径,用于将生成的API文档放到指定的目录下
  2. -windowtitle : 该选项指定一个字符串,用于设置API文档的浏览器窗口标题
  3. -doctitle: 该选项指定一个HTML格式的文本,用于指定概述页面的标题(只有对处于多个包下的源文件来生成API文档时,才有概述页面)
  4. -header: 该选项指定一个HTML格式的文本,包含每个页面的页眉。
  • 类注释:放import之后,类定义之前
  • 方法注释:方法之前。@param、@return、@throws
  • 域注释:只有公有域需要,通常用于静态常量
  • 通用注释:@author,@version,@since,@deprecated弃用,@see超链接

【自学】Java核心技术卷1_4对象与类

OOP技巧(OOP:object oriented programming)

  • 保证数据私有
  • 对数据初始化:最好显示地初始化所有的数据(类定义或构造器中提供默认值)、
  • 不要在类中使用过多的基本类型:用其他的类代替多个相关的基本类型,便于理解
  • 不是所有的域都需要访问器和更改器:对象中也有不想被使用的实例域
  • 将职责过多的类分解
  • 优先使用不可变的类:即不修改对象状态的类(便于多个线程间安全共享对象)
  • 类和方法命名要能顾名思义
  • 【自学】Java核心技术卷1_4对象与类