ReviewDay3
JAR 文件
创建jar文件
- jar options file1 file2
jar cvf jarFileName file1 file2
jar cvf CalculatorClasses.jar *.class icon.gif
文档注释
生成注释
-
类注释
import 语句之后, 类定义之前
-
方法注释
方法注释放在所描述方法之前
-
字段注释
只需要对公共字段(通常是静态常量)
-
通用注释
@author @version 等
-
包注释
不同于上面的注释直接放于源文件,包注释有两种选择
- 提供一个 package-info.java
- 提供一个 package.html
-
抽取注释
javadoc -d docDirectory packageName1 packageName2 -d 指定html都将放置于的目录
继承
访问修饰符
- public 对外公开
- protected 对子类和同一个包中的类公开
- 默认 没有修饰符,向同一个包的类公开
- private 只有类本身可以访问,不对外公开
extends
- 父类,超类, 基类
- 子类,派生类,孩子类
方法重写(覆盖方法)
- @override
- 子类的方法和父类的方法名称、返回类型、参数一样
- 子类方法不能缩小父类方法的访问权限 public>protected>default>private
super关键字
- 访问父类非private属性与方法
- 访问父类构造器 super(参数列表)
注意
: 只能放在构造器的第一句,只能出现一句 - super 和 this 的比较
多态
- 方法的多态
方法的重写和重载体现多态
- 对象的多态
- 多态向上转型
可以调用父类中的所有成员(权限), 不能调用子类特有成员
子类对象赋给父类引用(父类引用指向了子类的对象)
父类类型 引用民 = new 子类类型();
- 多态向下转型
只能强转父类的引用,而不是对象
子类类型 引用名 = (子类类型) 父类引用
- 编译类型与运行类型
编译类型看 “=” 左边, 运行类型看 “=” 右边
- 多态向上转型
Object类:所有类的父类
-
equals 方法
- “==”: 如果判断基本类型,判断值是否相等;如果判断引用类型,判断地址是否相等
- equals 方法是object的方法(默认判断地址‘==’),子类往往重写用于判断内容是否相等
public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (this.getClass != obj.getClass) { return false; } //再向下转型 ... //使用 == 判断基本类型字段(属性),使用 Objects.equals() 比较对象字段(引用类型) return ... }
-
hashCode() 方法
- Object类的默认hashCode方法是从对象的存储地址得出散列码
- 如果重新定义了equals方法,应重新定义hashCode方法
Objects.hash()
-
toString 方法
- System.out.println(x) 会调用x.toString()
- 数组继承了object的toString方法
调用静态方法打印数组 Arrays.toString(new int[] {1,2,3})
要打印多维数组,需要调用 Arrays.deepToString 方法
抽象类
-
abstract 关键字
- abstract 修饰方法,表示这是抽象方法,没有方法体,需要子类实现
访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
- 一旦类包含了abstract方法,该类必须声明为abstract类
- 抽象类不一定要包含abstract方法
- 一个类继承了抽象类,则必须实现抽象类的所有抽象方法,除非该类也声明为abstract类
- 抽象类不能用private、final、static来修饰(与重写相违背)
- abstract 修饰方法,表示这是抽象方法,没有方法体,需要子类实现
-
模板设计模式
abstract public class Template { //抽象类-模板设计模式
public abstract void job();//抽象方法
public void calculateTime() {//实现方法,调用 job 方法
//得到开始的时间
long start = System.currentTimeMillis();
job(); //动态绑定机制
//得的结束的时间
long end = System.currentTimeMillis();
System.out.println("任务执行时间 " + (end - start));
}
}
public class AA extends Template {
//计算任务
//1+....+ 800000
@Override
public void job() { //实现 Template 的抽象方法 job
long num = 0;
for (long i = 1; i <= 800000; i++) {
num += i;
}
}