By BarryZed
杂项
导入类与导入包
导入类:import java.util.Scanner;
导入包:import java.util.*;
一个 .java 文件里,最多只能有一个 public 类,并且类名必须和文件名一致
命名规范
类型 | 规范 | 示例 |
类 | 大驼峰 | StudentInfo |
方法 | 小驼峰+动词 | getName |
变量 | 小驼峰 | userAge |
常量 | 全大写+_ | MAX_SIZE |
包 | 全小写 | com.example |
枚举类 | 大驼峰 | Color |
枚举值 | 全大写 | RED |
成员方法
修饰符 | 类内 | 同包 | 子类 | 其他包 |
private | ✔ | ❌ | ❌ | ❌ |
default | ✔ | ✔ | ❌ | ❌ |
protected | ✔ | ✔ | ✔ | ❌ |
public | ✔ | ✔ | ✔ | ✔ |
static
重写、重载与隐藏
重写(Override)
- 方法名相同
- 参数列表相同
- 返回类型相同(或兼容)
- 权限不能变小
protected → public✔protected → private❌
- 不能重写
final方法
- 调用时看实际对象类型(等号后面的,运行时决定)
- 不能重写
static方法(是隐藏)
隐藏(Hiding)
处理static 方法同名冲突,子类与父类有相同名字的static 方法时触发
static 没有多态
重载(Overload)
同一个类中,方法名相同,但参数列表不同
编译时决定具体调用那个
多态(Polymorphism)
同一个调用形式,在不同的情况下行为不同
父类引用指向子类对象,调用方法时表现出不同子类行为
类的继承
此时B 是子类(subclass),A 是父类(superclass)
相当于B是完全升级的A,A有的、能做的,B都可以用(也可以override),而且B有其他更新的属性和方法
父类中private 的子类能继承,但是看不见也用不了
构造器不参与继承体系(构造器不是方法)
子类不能改父类的字段,必须通过父类构造器(super)来初始化
如果子类构造器没有调用super(...) ,那么编译器会默认自动加一行super(); ,但是如果父类有没有无参构造方法,那么就会导致报错
如果父类写了有参构造,子类必须显式写构造器(并调用父类构造)
父类与子类的代码位置没有要求(在同一文件里即可)
- 单继承
Java一个类只能继承一个父类
只能有一个爹,但是可以有多个儿子,也就可以有孙子/多个孙子……
- 方法重写(Override)
子类可以改父类的方法
- 子类也是一种父类
(B也是一种A)
Java语言所有类的父类(大爹):Object
this, super, final
this
this.name :指发起该函数的对象的成员变量name
在普通方法里,局部变量(方法里)和形参没有和成员变量重名,即可不写this. ,编译器会默认加上
this()
在一个构造方法里,去调用“同一个类里的另一个构造方法”(a.k.a. 构造方法复用)
必须在第一行且只能有一次
不能循环
super
它专门用来访问直接父类(superclass)里的内容
super.属性名 :访问父类属性
super.fun() :调用父类方法
final
不可修改、最终状态
final变量 = 常量,不可修改
final 引用类型:修饰引用本身(那座桥) → 固定对象是谁,无法更换;但对象里面的东西仍然可以正常修改等
final 方法:不能被重写,但是能被重载
操作 | 是否允许 | 本质 |
重写 | ❌ | 改“原方法内容” |
重载 | ✔ | 新增“同名不同参数方法”
可以不是 |
final 类:不能被继承(不能当爹)
抽象类(Abstract Class)
抽象类 = 不能直接造对象的类 + 可以有完整方法 + 也可以有未完成方法
- 不能实例化
可以有 抽象方法:abstract void sound();
可以有 普通方法
在子类继承抽象类后:
必须实现所有抽象方法 或 成为抽象类
继承抽象类:class Dog extends Animal
“这些类有共同本质,但具体行为不同”
接口(Interface)
- 方法默认是
public abstract(抽象方法)
void sound(); 自动等价于public abstract void sound();
之后子类实现时必须public void :接口本质是“公共契约”,实现必须保持同样可见性
接口里的抽象方法可以写形参,在实现时参数类型、数量必须一致
jdk8+可以有普通方法,但是必须手动写成 default 或static 方法
- 变量默认是
public static final(常量)
int x = 10; 自动等价于public static final int x = 10;
即,接口里不能有非 final 变量
实现接口:class Dog implements Animal
- 接口可以继承,也支持多继承
- 一个类可以实现多个接口
- 接口不能被实例化,但是可以创建“接口类型的数组”
异常(Exception)
核心体系
Error
OutOfMemoryError 、StackOverflowError 等
不处理、不捕获
Exception
RuntimeException(运行时异常)
ArithmeticException、ArrayIndexOutOfBoundsException 等
编译器不强制处理,可以不写try-catch
非RuntimeException(受检异常)
IOException、FileNotFoundException 等
编译器强制要求处理、要try-catch
throws / throw
throws
声明有可能抛异常
在前面
throw
真正抛异常
集合
Set, List, Queue; Map
forEach()方法
Stream API
中间操作(Intermediate Operations)
返回Stream
方法 | 作用 |
filter | 筛选 |
map | 转换 |
sorted | 排序 |
distinct | 去重 |
终止操作(Terminal Operation)
方法 | 作用 |
forEach | 遍历 |
collect | 收集成 List |
count | 计数 |
reduce | 汇总 |
执行顺序
每一个元素走完整个处理链/在某层被丢弃后,下一个元素才开始。
- 作者:BarryZed
- 链接:
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

























