一、初级知识
类与对象
-
区别联系:类是抽象模板,对象是具体实例,类是对象的模板,对象是类的实例。
-
内存 布局:对象在堆中分配空间,包含属性(成员变量),栈存放基本类型,方法区存常量与类加载信息。
-
创建与访问:
Cat cat = new Cat();
创建对象,通过对象名.属性名
访问属性。
成员方法
-
定义:
访问修饰符 返回类型 方法名(形参列表) { ... }
,注意返回类型、形参列表规则。 -
传参机制:基本类型传值,引用类型传地址(影响实参)。
-
递归:方法自调,需向退出条件逼近,每次调用创建独立栈空间。
-
重载:同名方法,形参列表(类型、个数、顺序)不同,返回类型无要求。
-
可变参数:
方法名(数据类型... 形参名)
,本质数组,可与普通参数共存(放最后)。
作用域
-
全局变量(属性) :作用域为类体,有默认值,可被本类或其他类通过对象调用。
-
局部变量:定义在方法/代码块,无默认值,作用域为定义代码块。
构造方法
-
特点:方法名与类同,无返回值,初始化对象,可重载。
-
细节:无定义时系统生成默认无参构造,自定义后默认构造失效(需显式定义)。
this 关键字
- 作用:代表当前对象,区分属性与局部变量,访问本类属性、方法、构造器(
this(形参)
放构造器首行)。
二、中级知识
包
-
作用:区分类名、管理类、控制访问范围。
-
语法:
package 包名;
放类最上方,import
导包(如import java.util.Scanner
)。
访问修饰符
-
修饰范围:类、属性、方法,
public
和默认修饰类,成员方法访问规则同属性。
封装
-
步骤:私有化属性,提供公共
set
(判断赋值)和get
方法(获取值)。
继承
-
语法:
class 子类 extends 父类
,子类继承父类属性方法(私有需通过父类公共方法访问)。 -
细节:子类构造器必调父类构造器(
super(形参)
放首行),单继承,遵循is - a
关系。
super 关键字
-
作用:访问父类属性(非私有)、方法(非私有)、构造器(放构造器首行),重名时必用。
方法重写
-
规则:方法名、形参列表与父类同,返回类型相同或为子类,访问权限不缩小。
多态
-
向上转型:
父类类型 引用名 = new 子类类型()
,可调用父类成员(遵守权限),不可调子类特有成员。 -
向下转型:
子类类型 引用名 = (子类类型) 父类引用
,需父类引用指向子类对象,转型后可调子类所有成员。 -
动态绑定:方法调用与对象运行类型绑定,属性无此机制(按声明位置使用)。
Object 类
-
equals 方法:默认判地址相等,子类常重写判内容(如
String
)。 -
hashCode 方法:提高哈希容器效率,相同对象哈希值相同,不同对象哈希值不同(非绝对)。
-
toString 方法:默认
全类名+@+哈希值
,子类重写返回属性信息。 -
finalize 方法:对象回收时系统调用,子类可重写释放资源。
断点调试快捷键
-
F7
(跳入)、F8
(跳过)、shift+F8
(跳出)、F9
(执行到下一个断点)。
三、高级知识
类变量/类方法
-
类变量:
static
修饰,类加载时初始化,所有对象共享,类名.类变量名
访问。 -
类方法:
static
修饰,只能访问静态成员,类名.类方法名
调用。
代码块
-
静态代码块:
static { ... }
,类加载时执行一次。 -
普通代码块:
{ ... }
,创建对象时调用,每次创建都执行。 -
执行顺序:静态代码块/属性初始化 → 普通代码块/属性初始化 → 构造器(继承时父类先执行)。
final 关键字
-
修饰范围:类(不可继承)、属性(常量,
XX_XX_XX
命名)、方法(不可重写)、局部变量(不可修改)。 -
赋值位置:定义时、构造器、代码块(静态属性仅定义时或静态代码块)。
抽象类
-
特点:不能实例化,含
abstract
方法类必声明abstract
,抽象方法无方法体,子类必实现抽象方法(除非子类也为抽象类)。
接口
-
定义:
interface 接口名 { ... }
,类implements
接口需实现所有抽象方法(抽象类可不实现)。 -
细节:接口属性默认为
public static final
,方法可有无实现(JDK8+),可继承多接口。
内部类
-
局部内部类:定义在方法/代码块,作用域为所在代码块。
-
匿名内部类:
new 类/接口() { ... }
,可直接访问外部类所有成员,无访问修饰符,作实参传递。 -
成员内部类:定义在类成员位置,无
static
修饰。 -
静态内部类:
static
修饰,可直接访问外部类静态成员。
枚举与注解
-
枚举:
enum
定义(如enum Season { SPRING("春", "暖") }
),默认继承Enum
,对象放首行。 -
注解:
@Override
(重写验证)、@Deprecated
(过时)、@SuppressWarnings
(抑制警告),元注解(Retention
、Target
等)控制注解行为。
异常
-
分类:
Error
(虚拟机严重问题)、Exception
(编程/外部因素,分运行时异常与编译时异常)。 -
处理:
try-catch
(处理异常)、throws
(声明抛出),自定义异常继承Exception
(编译时)或RuntimeException
(运行时)。
常用类
-
包装类:基本类型对应包装类(如
Integer
对应int
),jdk5+
自动装箱拆箱(Integer.valueOf()
)。 -
String:
private final char value[]
存内容,"hsp"
先查常量池,new String("hsp")
堆中创建。 -
StringBuffer / StringBuilder:可变字符序列,
StringBuffer
线程安全,Builder
单线程高效。 -
Math:含数学运算静态方法(如
Math.sqrt()
)。
集合
-
Collection:接口,实现类可存多个对象,
Iterator
遍历(iterator()
方法),增强for
简化遍历。 -
List:有序、可重复,
ArrayList
(数组实现,线程不安全)、LinkedList
(双向链表,增删高效)、Vector
(线程安全)。 -
Set:无序、无索引、不重复,
HashSet
底层HashMap
,null
仅一个。 -
Map:键值对,
Key
不重复,Value
可重复,HashMap
(非线程安全),遍历(键集、值集、键值对)。
泛型
-
自定义 泛型类:
Class 类名<T,R...>
,静态方法不可用类泛型,类型创建对象时确定。 -
自定义 泛型 接口:
Interface 接口名<T,R...>
,实现/继承时确定类型。 -
自定义 泛型 方法:
修饰符 <T,R...> 返回类型 方法名(参数列表)
,调用时确定类型。
线程
-
创建方式:继承
Thread
重写run
,实现Runnable
重写run
(解决单继承限制)。 -
常用方法:
setDaemon(true)
(设为守护线程),线程终止(任务完成或通知方式)。 -
同步机制:
synchronized
(同步代码块/方法),互斥锁保证数据完整性,注意静态与非静态方法锁对象区别。 -
死锁:多线程互占对方锁资源且不相让。
反射
-
作用:获取类内部信息(属性、方法、构造器),操作对象属性方法,动态创建对象。
-
Class 类:类加载后生成唯一
Class
对象(存堆中),Class.forName("类路径")
获取。
类加载与 JVM 内存模型
-
类加载时机:
new
对象、子类加载、调用静态成员、反射。 -
加载阶段:字节流转二进制入内存,生成
Class
对象。 -
连接阶段:验证(文件格式等)、准备(静态变量赋默认值)、解析(符号引用转直接引用)。
-
初始化:执行类中静态变量与代码块合并的
()
) 方法,多线程加锁同步。 -
JVM ****内存 模型:堆(对象)、栈(基本类型、局部变量)、方法区(类信息、常量)。
GC 过程
- 定义:自动回收不再使用对象内存,避免泄漏,提高利用率。
- 内存 区域:堆(主要回收区,分新生代、老年代)、方法区(回收废弃常量/类)。
- 判定算法:引用计数(难处理相互引用)、可达性分析(
GC Roots
为起点,无引用链则回收)。 - 回收算法:标记 - 清除(效率低、碎片多)、标记 - 整理(无碎片)、复制(效率高、内存利用率低)、分代收集(新生代复制,老年代标记 - 清除/整理)。
- 新生代 GC (Minor GC) :Eden 区满触发,存活对象复制至 Survivor 区,多次 GC 后存活对象晋升老年代。
- 老年代 GC (Major GC / Full GC) :老年代空间不足等触发,标记 - 清除或整理,耗时较长。
- 总结:GC 减轻编程负担,了解其过程与算法助于优化程序性能。