Java 基础

· 9 min read

一、面向对象基础

1. 构造方法

构造方法在创建对象时自动调用。

语法:

public 类名(参数) {

}

特点:

  1. 无返回值
  2. new 的时候自动调用

作用: 在创建对象时,给对象设置属性信息。


构造方法的重载

作用: 可以用更多方式创建对象。

使用 this() 可以访问其他构造方法。

重载:方法名相同,参数不同即重载。


2. 封装(访问权限)

修饰符同一个类同一个包不同包的子类不同包的非子类
public✅ 可以✅ 可以✅ 可以✅ 可以
protected✅ 可以✅ 可以✅ 可以❌ 不可以
default(默认,无修饰)✅ 可以✅ 可以❌ 不可以❌ 不可以
private✅ 可以❌ 不可以❌ 不可以❌ 不可以
  • public:公共的
  • default:包访问权限,在自己包内可以随意访问
  • private:私有的

Getter 和 Setter

成员变量一般使用 private 声明,以保护其不被胡乱赋值。

  • setter:赋值
  • getter:取值

IDEA 中可右键 → Generate → Getter and Setter 快速生成。


3. 继承

子类可以自动拥有父类中除了私有内容外的其他所有内容。

public class extends 父类 {

}

作用: 简化代码开发。


构造方法调用规则

  1. 子类构造方法第一行必须调用父类构造方法(隐式或显式),否则编译器会自动插入 super();
  2. 如果子类构造方法中没有显式调用父类构造方法(如 super(...)),则默认调用父类的无参构造方法。
  3. 构造顺序:先父类 → 再子类。

方法的重写(覆盖)

重写: 子类对父类中提供的方法进行重新定义。

语法: 子类和父类中的方法的声明完全一致。


4. 多态

同一个对象拥有多种形态。

作用: 把不同的数据类型进行统一,让程序具有可扩展性。

  • 向上转型: 把子类的对象赋值给父类的引用。(缺点:会屏蔽掉子类中特有的方法)
  • 向下转型: 把父类的对象赋值给子类的引用。(Java 要求必须写强制类型转换)

5. 抽象

使用 abstract 修饰,只声明,不实现。

  • 抽象方法: 无方法体,直接以 ; 结束。
  • 抽象类: 如果一个类里有抽象方法,这个类必须是抽象类。

特点:

  1. 抽象类不可以 new 对象(通过继承的子类 new 对象)。
  2. 抽象类的子类,必须重写父类中的抽象方法。否则,子类必须也是抽象类。

通过抽象类可以强制要求子类中必须有哪些方法。


6. 接口

接口实际上是一种特殊的抽象类。

  • 接口使用 interface 定义,而不是 class
  • Java 中类只能是单继承,而接口支持多实现。
  • 接口可以把很多不相关的内容进行整合。
  • 接口和类是实现关系 implements,而不是继承 extends(能继承接口的只能是接口)。
  • 接口一样具有多态性。

特点:

  1. 所有方法都是公共的抽象方法(默认省略 public abstract)。
  2. 所有变量都是全局静态常量(默认省略 public static final)。

二、关键字

1. static

静态。在内存中只保留一份,各个对象之间共享。

特点:

  1. 数据共享
  2. 属于类,不属于对象
  3. 优先于对象产生

由于创建对象的过程在静态内容加载完成之后,在静态方法、静态块里不能用 this 关键字。

推荐使用 类名 去访问静态的内容。


2. final

  • final 修饰的变量不可以被改变。
  • final 修饰的方法不可以被重写。
  • final 修饰的不可以被继承。

3. thissuper

  • this:表示自己类中的内容。
  • super:表示父类中的内容。

superthis 可以区分父类和子类重名的内容。

super 调用父类的构造方法,必须写在子类构造方法的第一行(若父类构造方法无参数,可省略)。


4. instanceof

判断对象类型,返回 boolean


三、Object 类及其方法

Object 类

所有类默认继承 Object


equals

equalsObject 类提供的一个方法,用来判断两个对象是否相等。可以自己重写 equals

  • ==:一般用在基本数据类型上;若判断的是两个对象,比较的是内存地址是否一致。
  • 字符串比较要用 equals String 类里重写了 equals —— 从比较内存地址变为比较字符串内容。

toString

toString() 是对一个对象的字符串表示形式。Java 推荐重写。

打印一个对象时,自动执行这个对象的 toString 方法。

默认 toString 格式:包名 + 类名@内存地址


四、异常

异常的分类

  1. RuntimeException(运行时异常): 一般不手动处理,出问题后再处理。
  2. 其他 Exception 必须要经过手动处理。
  3. Error 一般指的是系统级错误。

异常处理

try...catch

try {
    // 尝试执行
} catch (Exception e) {
    // 处理异常
} finally {

}

throwsthrow

  • throws:表示方法可能会抛出异常。
  • throw:实际向外抛出异常。

产生的错误尽可能自己处理,尽可能少抛出异常。

方法 throws FileNotFoundException {
    throw new FileNotFoundException("文件不存在:" + filename);
}

自定义异常

直接继承 ExceptionRuntimeException 来自定义异常。