一、访问控制权限修饰符是用来控制类、方法、变量能被谁访问。1. 四大访问权限修饰符public公开任何地方都能访问private私有仅当前类内部能访问封装核心protected同包 子类能访问default不写关键字默认权限同包内能访问2. 使用规范成员变量优先用private工具方法、对外接口用public子类需要继承访问用protected包内自用类 / 方法用默认权限二、类 / 对象 / 继承相关1. 基础定义1) class定义普通类使用时注意一个 java 源文件最多一个 public 类类名和文件名一致类不能嵌套定义普通类外随意层级仅支持内部类形式类不能用 private/protected 修饰顶层类2) interface定义接口3) enum定义枚举类4) abstract修饰抽象类、抽象方法使用时注意抽象类不能 new 实例化有抽象方法的类必须是抽象类抽象方法无方法体子类必须全部实现2. 创建与实例new实例化创建对象使用时注意仅用来创建实例对象不能创建静态类、抽象类、接口每次 new 都会开辟新堆内存引用赋值只会指向同一对象3. 继承实现extends类继承类单继承implements类实现接口多实现4. 指代引用1) this当前对象本身使用时注意构造方法中this(...)必须放在第一行不能在静态方法中使用 this区分成员变量和局部变量时用来指代当前对象属性2) super父类对象、父构造方法使用时注意父类构造super(...)必须在子类构造第一行静态方法不能使用 super可调用父类被重写的方法、父类公有成员5. 限定修饰abstract抽象类 / 抽象方法不能实例化final修饰类不能被继承修饰方法不能被重写修饰变量变成常量只能赋值一次6. 类型判断instanceof判断对象所属类型。使用时注意空对象判断直接返回 false不会空指针遵循向上转型规则父类引用可判断子类类型三、方法 / 静态相关static1. 使用范围static 静态 属于类不属于对象可以修饰成员变量静态变量 / 类变量方法静态方法 / 类方法代码块静态代码块2. 核心规则静态变量全类共享一份所有对象用的是同一个值。直接用类名.变量名静态方法不需要创建对象直接调用。格式类名.方法名()静态代码块类加载时执行一次最早执行比构造方法还早。用来初始化静态资源3. 4条铁律1) 静态不能直接访问非静态。静态方法里不能直接用 普通成员变量、普通成员方法、this / super原因静态是类的非静态是对象的。类加载时对象还没出生2) 非静态可以访问静态。实例方法里随便用静态变量、静态方法。3) 静态变量全类共享。一个地方改了全部地方都变。4) 静态方法不存在 “重写”。只有隐藏没有多态。4. 什么时候用 static工具类方法Math、Arrays、Collections全类共享常量public static final只需要初始化一次的资源配置、连接统计对象数量四、异常处理1. 关键字try包裹可能出异常的代码catch捕获异常finally无论是否异常一定执行常用来关闭流、释放资源throw手动抛出一个异常throws方法声明可能抛出的异常2. 关键注意点try 不能单独存在必须搭配 catch/finally执行顺序try → 异常则 catch → 必走 finallythrow 写方法内throws 写方法声明上子类重写方法抛出异常范围不能大于父类五、多线程相关重要1. synchronized作用加锁保证线程安全三种位置修饰实例方法锁当前对象 this修饰静态方法锁当前类的 Class 对象全局锁修饰代码块最常用锁自己指定对象核心特点可重入锁同一个线程可以反复获取同一把锁不会卡死独占锁一个线程拿到其他线程必须等待保证三大特性原子性 可见性 有序性自动释放锁代码执行完 / 抛异常都会释放2. volatile作用保证变量可见性禁止指令重排关键volatile 只保证可见性不保证原子性适合状态标记量flag、stop不适合计数i因为不是原子操作3. transient作用修饰成员变量序列化时忽略该字段和线程没有直接关系属于多线程 / IO 高频关键字