第4章 对象与类

第4章 对象与类

4.1 面向对象程序设计概述

OOP -> 类(行为、状态、标识 )-> 对象变量 -> 对象(实例化)
类之间的关系:

  1. 依赖 (uses-a)
  2. 聚合 (has-a)
  3. 继承 (is-a)
    在这里插入图片描述

4.2 使用预定义类

new + 构造器(构造函数)()
构造器、访问器、更改器

时间点:Date类;日期:LocalDate类

Date date = new Date();
LocalDate localDate = LocalDate.now(); // 静态工厂方法
LocalDate ld = LocalDate.of(2022, 9, 10);  // 构造特定日期
// getYear getMonthValue getDayOfMonth getDayOfWeek plusDays minusDays

4.3 用户自定义类

每个类都可以有main方法(便于测试),只能有其一个公共类public(类名=文件名)。

class ClassName
{
	field1  // 状态、实例
	......
	constructor1  // 构造器
	......
	method1 // 行为
	......
}
// 编译Employee开头的源文件成类文件
javac Employee*.java
// 自动隐式编译相关源文件
javac EmployeeTest.java

隐式参数:对象(this);显式参数:括号中数值
注:对于可变对象的引用,不应直接返回(破坏封装性),应返回其克隆的副本(*.clone())!
注:方法可以访问所属类任何对象的私有特性,而不仅限于隐式参数!

// final
class Employee
{
	private final String name;  // 必须在构造器中初始化,且不能再修改
	// final针对可变类:对象引用不会再指向另一个不同的对象,而这个对象可以更改
}

4.4 静态字段和静态方法

static :字段或方法属于类,每个对象实例同时共享,可通过类直接访问(没有隐式参数),静态方法只能访问静态字段。

4.5 方法参数

  • 按值调用:方法得到参数值的副本,不可对其修改(基本数据类型);
  • 按引调用:方法接收到变量地址,得到对象引用的副本(引用同一个对象),可对其修改(对象参数)。
    注:Java方法不能让对象参数引用一个新的对象!
// 不起作用,不能替换,只是x与y交换了,
public static void swap(Employee x, Employee y)
{
	Employee temp = x;
	x = y;
	y = temp;
}

4.6 对象构造

  • 重载:多个方法有相同名字、不同参数。(编译器进行重载解析,根据参数匹配特定方法);
  • 签名:方法名以及参数类型(不含返回类型,即不能有名字相同、参数类型相同而返回类型不同的方法)。

注:

  • 局部变量不会自动初始化,类中字段可自动初始化为默认值!(0、false、null);
  • 仅当类无任何构造器时,会产生一个默认的无参数构造器。
// 调用另一个构造器
public Employee(double s)
{
	// call Employee(String, double)
	this("Employee #", s);
}
// 初始化块
class Employee
{
	private int id;
	// 初始化块,运行在构造器之前
	{
		id = 1;
	}
	public Employee()
	{
		id = 2;
	}
}

初始化字段顺序:

  1. 若构造器第一行调用了另一个构造器,则执行第二个构造器;
  2. 否则,(a) 初始化为默认值;(b) 按照声明顺序执行字段初始化方法和初始化块;
  3. 执行构造器主体代码。

4.7 包

嵌套的包之间没有任何关系,每个包都是独立的类集合
注:星号(import java.*)是导入一个包的所有内容,不是导入以java为前缀的所有包!

// 静态导入
import static java.lang.math.*;
sqrt(pow(x, 2));  // Math.sqrt(Math.pow(x, 2));

// 包中增加类,没写就是放入无名包(包名:反向路径)
package packageName;
public class Employee
{
	......
}
// Java编译器处理文件(带文件分隔符,不会实际检查目录结构)
javac com/mycompany/PayrollApp.java
// Java解释器加载类(带有.分隔符)
java com.mycompany.PayrollApp

修饰符:

  • public:所有类都可以访问;
  • private:当前类可以访问;
  • 无:(默认)包中所有类可以访问。
// 设置类路径
java -classpath <path> MyProg

4.8 JAR文件

JAR文件可以包含类文件,也可以包含图像及声音等其他类型的文件,还包括一个清单文件,用于描述归档文件的特殊特性。(类似zip压缩打包Java应用程序)

// 创建JAR文件
jar cvf jarFileName file1 file2 ...
// 启动程序
java -jar MyProgram.jar

4.9 文档注释

/**
 * 标记:以@开始
 * 自由格式文本(可用HTML修饰符)
*/
  • 类注释:放在import之后,类定义之前;
  • 方法注释:所描述的方法之前;@param variable description;@return description; @throws class description;
  • 字段注释:对公共字段(常指静态常量)建立文档;
  • 通用注释:@author name; @version text; @see reference;
  • 包注释:直接将类、方法和变量的注释放在Java源文件中;
  • 注释抽取

4.10 类设计技巧

  1. 保证数据私有,编写访问器与更改器方法;
  2. 对数据进行初始化,Java不会初始化局部变量,只会对对象的实例字段进行初始化;
  3. 不要在类中使用过多的基本类型,使用其他的类来代替;
  4. 不是所有的字段都需要单独的访问器与更改器;
  5. 分解有过多职责的类;
  6. 类名和方法名能体现它们的职责;
  7. 优先使用不可变的类,多个线程同时修改会出现不可预料的问题;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值