Java 基础
一、面向对象基础
1. 构造方法
构造方法在创建对象时自动调用。
语法:
public 类名(参数) {
}
特点:
- 无返回值
- 在
new的时候自动调用
作用: 在创建对象时,给对象设置属性信息。
构造方法的重载
作用: 可以用更多方式创建对象。
使用 this() 可以访问其他构造方法。
重载:方法名相同,参数不同即重载。
2. 封装(访问权限)
| 修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 |
|---|---|---|---|---|
public | ✅ 可以 | ✅ 可以 | ✅ 可以 | ✅ 可以 |
protected | ✅ 可以 | ✅ 可以 | ✅ 可以 | ❌ 不可以 |
default(默认,无修饰) | ✅ 可以 | ✅ 可以 | ❌ 不可以 | ❌ 不可以 |
private | ✅ 可以 | ❌ 不可以 | ❌ 不可以 | ❌ 不可以 |
public:公共的default:包访问权限,在自己包内可以随意访问private:私有的
Getter 和 Setter
成员变量一般使用 private 声明,以保护其不被胡乱赋值。
setter:赋值getter:取值
IDEA 中可右键 → Generate → Getter and Setter 快速生成。
3. 继承
子类可以自动拥有父类中除了私有内容外的其他所有内容。
public class 类 extends 父类 {
}
作用: 简化代码开发。
构造方法调用规则
- 子类构造方法第一行必须调用父类构造方法(隐式或显式),否则编译器会自动插入
super();。 - 如果子类构造方法中没有显式调用父类构造方法(如
super(...)),则默认调用父类的无参构造方法。 - 构造顺序:先父类 → 再子类。
方法的重写(覆盖)
重写: 子类对父类中提供的方法进行重新定义。
语法: 子类和父类中的方法的声明完全一致。
4. 多态
同一个对象拥有多种形态。
作用: 把不同的数据类型进行统一,让程序具有可扩展性。
- 向上转型: 把子类的对象赋值给父类的引用。(缺点:会屏蔽掉子类中特有的方法)
- 向下转型: 把父类的对象赋值给子类的引用。(Java 要求必须写强制类型转换)
5. 抽象
使用 abstract 修饰,只声明,不实现。
- 抽象方法: 无方法体,直接以
;结束。 - 抽象类: 如果一个类里有抽象方法,这个类必须是抽象类。
特点:
- 抽象类不可以
new对象(通过继承的子类new对象)。 - 抽象类的子类,必须重写父类中的抽象方法。否则,子类必须也是抽象类。
通过抽象类可以强制要求子类中必须有哪些方法。
6. 接口
接口实际上是一种特殊的抽象类。
- 接口使用
interface定义,而不是class。 - Java 中类只能是单继承,而接口支持多实现。
- 接口可以把很多不相关的内容进行整合。
- 接口和类是实现关系
implements,而不是继承extends(能继承接口的只能是接口)。 - 接口一样具有多态性。
特点:
- 所有方法都是公共的抽象方法(默认省略
public abstract)。 - 所有变量都是全局静态常量(默认省略
public static final)。
二、关键字
1. static
静态。在内存中只保留一份,各个对象之间共享。
特点:
- 数据共享
- 属于类,不属于对象
- 优先于对象产生
由于创建对象的过程在静态内容加载完成之后,在静态方法、静态块里不能用
this关键字。
推荐使用 类名 去访问静态的内容。
2. final
- 被
final修饰的变量不可以被改变。 - 被
final修饰的方法不可以被重写。 - 被
final修饰的类不可以被继承。
3. this 和 super
this:表示自己类中的内容。super:表示父类中的内容。
用 super 和 this 可以区分父类和子类重名的内容。
super调用父类的构造方法,必须写在子类构造方法的第一行(若父类构造方法无参数,可省略)。
4. instanceof
判断对象类型,返回 boolean。
三、Object 类及其方法
Object 类
所有类默认继承 Object。
equals
equals 是 Object 类提供的一个方法,用来判断两个对象是否相等。可以自己重写 equals。
==:一般用在基本数据类型上;若判断的是两个对象,比较的是内存地址是否一致。- 字符串比较要用
equals:String类里重写了equals—— 从比较内存地址变为比较字符串内容。
toString
toString() 是对一个对象的字符串表示形式。Java 推荐重写。
打印一个对象时,自动执行这个对象的
toString方法。
默认 toString 格式:包名 + 类名@内存地址。
四、异常
异常的分类
RuntimeException(运行时异常): 一般不手动处理,出问题后再处理。- 其他
Exception: 必须要经过手动处理。 Error: 一般指的是系统级错误。
异常处理
try...catch
try {
// 尝试执行
} catch (Exception e) {
// 处理异常
} finally {
}
throws 和 throw
throws:表示方法可能会抛出异常。throw:实际向外抛出异常。
产生的错误尽可能自己处理,尽可能少抛出异常。
方法 throws FileNotFoundException {
throw new FileNotFoundException("文件不存在:" + filename);
}
自定义异常
直接继承 Exception 或 RuntimeException 来自定义异常。