Java基础知识点总结
本帖最后由 Kai1222 于 2022-4-7 17:42 编辑# ReviewDay3
## JAR 文件
### 创建jar文件
- jar options file1 file2
> jar cvf jarFileName file1 file2
> > jar cvf CalculatorClasses.jar *.class icon.gif
## 文档注释
### 生成注释
- 类注释
> import 语句之后, 类定义之前
- 方法注释
> 方法注释放在所描述方法之前
- 字段注释
> 只需要对公共字段(通常是静态常量)
- 通用注释
> @AuThor@version 等
- 包注释
> 不同于上面的注释直接放于源文件,包注释有两种选择
> 1) 提供一个 package-info.java
> 2) 提供一个 package.html
- 抽取注释
```java
javadoc -d docDirectory packageName1 packageName2
-d 指定html都将放置于的目录
```
## 继承
### 访问修饰符
- public*对外公开*
- protected*对子类和同一个包中的类公开*
- 默认没有修饰符,向同一个包的类公开
- private只有类本身可以访问,不对外公开
![访问修饰符](./img/访问修饰符.png)
### extends
- 父类,超类, 基类
- 子类,派生类,孩子类
### 方法重写(覆盖方法)
- @override
- 子类的方法和父类的方法**名称、返回类型、参数一样**
- 子类方法不能缩小父类方法的访问权限 *public>protected>default>private*
### super关键字
- 访问父类**非**private属性与方法
- 访问父类构造器 **super(参数列表)**
> ```注意```: 只能放在构造器的第一句,只能出现一句
- super 和 this 的比较
!(./img/superAndThis.png)
### 多态
- 方法的多态
> 方法的重写和重载体现多态
- 对象的多态
- *多态向上转型* ```可以调用父类中的所有成员(权限), 不能调用子类特有成员```
> 子类对象赋给父类引用(父类引用指向了子类的对象)
>
> 父类类型 引用民 = new 子类类型();
>
- *多态向下转型* ```只能强转父类的引用,而不是对象```
> 子类类型 引用名 = (子类类型) 父类引用
>
- 编译类型与运行类型
> 编译类型看 “=” 左边, 运行类型看 “=” 右边
>
### Object类:所有类的父类
- equals 方法
- "==": *如果判断基本类型,判断值是否相等;如果判断引用类型,判断地址是否相等*
- equals 方法是object的方法(默认判断地址‘==’),子类往往重写用于判断内容是否相等
```java
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来修饰(与重写相违背)
- 模板设计模式
```java
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;
}
}
```
页:
[1]