文章目录 一 基础概念 1 什么是方法重写 2 什么是接口接口? 3 什么是抽象类?什么是抽象方法? 4常见异常类及继承关系 5常用API类整理(表格) 一、字符串相关类 二、集合框架类 2.1 List接口实现类 2.2 Set接口实现类 2.3 Map接口实现类 三、输入输出类(I/O) 四、日期时间类(Java 8+) 五、数学工具类 六、系统相关类 七、包装类(Wrapper Classes) 八、并发工具类(Java 5+) 6 集合整理(List,ArrayList,LinkedList,Hashset,HashMap) 一、Java主要集合类核心特性对比 二、ArrayList vs LinkedList 详细对比 三、HashSet vs HashMap 详细对比 7 权限修饰符关键字 8 instanceof关键字 二、面向对象的三大特性 1 封装(Encapsulation) 2 继承(Inheritance) 3 多态(Polymorphism) 一 基础概念 1 什么是方法重写 在Java中,方法重写(Override) 是指子类重新定义父类中已有的方法,以提供特定的实现。这是实现运行时多态的关键机制。
2 什么是接口接口? 接口是Java中一种完全抽象的类,它定义了一组规范或契约,但不提供具体实现。接口指定了"做什么",而不关心"怎么做"。
3 什么是抽象类?什么是抽象方法? 抽象类(Abstract Class) 抽象类是不能被实例化的类,用于被其他类继承。它介于普通类和接口之间: 可以包含抽象方法(没有实现的方法) 也可以包含具体方法(有实现的方法) 可以有成员变量、构造方法、静态方法等
抽象方法(Abstract Method) 抽象方法是只有声明而没有实现的方法: 使用 abstract 关键字修饰 没有方法体(没有 {}) 必须在抽象类或接口中声明 子类必须重写所有抽象方法(除非子类也是抽象类)
4常见异常类及继承关系 markdown
Java异常体系完整对比表 异常类别 类名 继承关系 检查类型 常见触发场景 中文名称 顶级父类 Throwable 所有异常的根类 - 所有异常的超类 可抛出的 ⬇️ 错误 Error Throwable → Error 非检查异常 严重系统错误,程序无法恢复 错误 ↳ 虚拟机错误 VirtualMachineError Error → VirtualMachineError 非检查异常 虚拟机内部错误 虚拟机错误 ↳↳ 内存错误 OutOfMemoryError VirtualMachineError → OutOfMemoryError 非检查异常 堆内存耗尽 内存溢出错误 ↳↳ 栈错误 StackOverflowError VirtualMachineError → StackOverflowError 非检查异常 方法调用栈溢出 栈溢出错误 ↳ 链接错误 LinkageError Error → LinkageError 非检查异常 类加载链接问题 链接错误 ↳↳ 类定义错误 NoClassDefFoundError LinkageError → NoClassDefFoundError 非检查异常 编译时有类,运行时找不到 类定义未找到错误 ⬇️ 异常 Exception Throwable → Exception - 所有异常的超类 异常 ↳ 运行时异常 RuntimeException Exception → RuntimeException 非检查异常 编程错误,可避免 运行时异常 ↳↳ 空指针异常 NullPointerException RuntimeException → NullPointerException 非检查异常 调用null对象的方法或属性 空指针异常 ↳↳ 数组越界异常 ArrayIndexOutOfBoundsException RuntimeException → IndexOutOfBoundsException → … 非检查异常 访问不存在的数组索引 数组索引越界异常 ↳↳ 类型转换异常 ClassCastException RuntimeException → ClassCastException 非检查异常 错误的类型转换 类转换异常 ↳↳ 算术异常 ArithmeticException RuntimeException → ArithmeticException 非检查异常 除数为零等算术错误 算术异常 ↳↳ 参数异常 IllegalArgumentException RuntimeException → IllegalArgumentException 非检查异常 方法参数不合法 非法参数异常 ↳↳↳ 数字格式异常 NumberFormatException IllegalArgumentException → NumberFormatException 非检查异常 字符串转数字格式错误 数字格式异常 ↳↳ 状态异常 IllegalStateException RuntimeException → IllegalStateException 非检查异常 对象状态不正确 非法状态异常 ↳↳ 不支持操作异常 UnsupportedOperationException RuntimeException → UnsupportedOperationException 非检查异常 不支持的方法调用 不支持的操作异常 ↳ 受检异常 Checked Exception Exception → [各种受检异常] 检查异常 外部因素导致,必须处理 受检异常 ↳↳ IO异常 IOException Exception → IOException 检查异常 输入输出操作失败 IO异常 ↳↳↳ 文件未找到异常 FileNotFoundException IOException → FileNotFoundException 检查异常 文件不存在 文件未找到异常 ↳↳↳ 文件结束异常 EOFException IOException → EOFException 检查异常 读取到文件结尾 文件结束异常 ↳↳ SQL异常 SQLException Exception → SQLException 检查异常 数据库操作失败 SQL异常 ↳↳ 类未找到异常 ClassNotFoundException Exception → ClassNotFoundException 检查异常 类加载时找不到类 类未找到异常 ↳↳ 中断异常 InterruptedException Exception → InterruptedException 检查异常 线程被中断 中断异常 ↳↳ 解析异常 ParseException Exception → ParseException 检查异常 解析字符串失败 解析异常
5常用API类整理(表格) 一、字符串相关类 类名 所在包 主要用途 特性 常用方法 String java.lang 不可变字符串 线程安全,不可变 length(), charAt(), substring(), indexOf(), equals(), split(), replace() StringBuilder java.lang 可变字符串 非线程安全,性能高 append(), insert(), delete(), reverse(), toString() StringBuffer java.lang 可变字符串 线程安全,性能稍低 同StringBuilder,但方法加synchronized StringTokenizer java.util 字符串分割 已过时,推荐用String.split() hasMoreTokens(), nextToken()
二、集合框架类 2.1 List接口实现类 类名 特性 使用场景 时间复杂度 ArrayList 基于数组,动态扩容 随机访问频繁 查/改: O(1),增/删: O(n) LinkedList 基于双向链表 增删频繁,队列操作 查: O(n),增/删: O(1) Vector 线程安全的ArrayList 多线程环境(已过时) 同ArrayList,但方法同步 CopyOnWriteArrayList 写时复制,线程安全 读多写少的并发场景 写时复制整个数组
2.2 Set接口实现类 类名 特性 实现原理 使用场景 HashSet 无序,不重复 基于HashMap 快速去重,不关心顺序 LinkedHashSet 按插入顺序 基于LinkedHashMap 需要保持插入顺序 TreeSet 有序,可排序 基于红黑树 需要自然排序或自定义排序
2.3 Map接口实现类 类名 特性 实现原理 使用场景 HashMap 键值对,无序 数组+链表/红黑树 最常用的Map实现 LinkedHashMap 按插入/访问顺序 基于HashMap+双向链表 需要保持顺序 TreeMap 按键排序 红黑树 需要按键排序 Hashtable 线程安全 数组+链表(已过时) 多线程(被ConcurrentHashMap替代) ConcurrentHashMap 线程安全,分段锁 分段数组+链表/红黑树 高并发场景
三、输入输出类(I/O) 3.1 字节流 类名 用途 父类 常用方法 FileInputStream 读取文件字节 InputStream read(), available(), close() FileOutputStream 写入文件字节 OutputStream write(), flush(), close() BufferedInputStream 缓冲字节输入流 FilterInputStream 提供缓冲功能 BufferedOutputStream 缓冲字节输出流 FilterOutputStream 提供缓冲功能
3.2 字符流 类名 用途 父类 常用方法 FileReader 读取文件字符 InputStreamReader read(), ready(), close() FileWriter 写入文件字符 OutputStreamWriter write(), flush(), close() BufferedReader 缓冲字符输入流 Reader readLine(), read() BufferedWriter 缓冲字符输出流 Writer write(), newLine(), flush()
3.3 其他I/O类 类名 用途 说明 File 文件/目录操作 创建、删除、重命名文件/目录 RandomAccessFile 随机访问文件 可读写任意位置 Scanner 解析基本类型和字符串 从输入流读取数据 PrintStream 格式化输出 System.out就是PrintStream
四、日期时间类(Java 8+) 类名 包 用途 不可变性 LocalDate java.time 日期(年月日) 是 LocalTime java.time 时间(时分秒) 是 LocalDateTime java.time 日期+时间 是 ZonedDateTime java.time 带时区的日期时间 是 Instant java.time 时间戳(1970-01-01至今) 是 Duration java.time 时间间隔(秒/纳秒) 是 Period java.time 日期间隔(年/月/日) 是 DateTimeFormatter java.time.format 日期时间格式化 是
注意:旧版日期类(Date、Calendar、SimpleDateFormat)已过时,存在线程安全问题
五、数学工具类 类名 包 主要用途 常用方法/字段 Math java.lang 数学运算 abs(), sqrt(), pow(), random(), PI, E Random java.util 随机数生成 nextInt(), nextDouble(), nextBoolean() BigInteger java.math 大整数运算 add(), subtract(), multiply(), divide() BigDecimal java.math 精确小数运算 同上,解决浮点数精度问题
六、系统相关类 类名 包 主要用途 常用方法 System java.lang 系统级操作 currentTimeMillis(), arraycopy(), getProperty(), exit() Runtime java.lang 运行时环境 freeMemory(), totalMemory(), exec() Class java.lang 类信息 getName(), getMethods(), newInstance() ClassLoader java.lang 类加载器 loadClass(), getResource()
七、包装类(Wrapper Classes) 基本类型 包装类 缓存范围 常用方法 byte Byte -128~127 parseByte(), valueOf() short Short -128~127 parseShort(), valueOf() int Integer -128~127 parseInt(), valueOf(), toBinaryString() long Long -128~127 parseLong(), valueOf() float Float 无 parseFloat(), valueOf() double Double 无 parseDouble(), valueOf() char Character 0~127 isDigit(), isLetter(), toUpperCase() boolean Boolean true/false parseBoolean(), valueOf()
八、并发工具类(Java 5+) 类名 包 主要用途 Thread java.lang 线程创建和管理 Runnable java.lang 线程任务接口 Callable java.util.concurrent 可返回结果的线程任务 ExecutorService java.util.concurrent 线程池管理 ThreadPoolExecutor java.util.concurrent 线程池实现 Future java.util.concurrent 异步计算结果 CountDownLatch java.util.concurrent 同步辅助类 Semaphore java.util.concurrent 信号量 ReentrantLock java.util.concurrent.locks 可重入锁
6 集合整理(List,ArrayList,LinkedList,Hashset,HashMap) 一、Java主要集合类核心特性对比 特性 ArrayList LinkedList HashSet HashMap List接口 实现接口 List List, Deque Set Map 集合接口 数据结构 动态数组 双向链表 哈希表(基于HashMap) 数组+链表/红黑树(JDK8+) 抽象接口 是否有序 插入顺序 插入顺序 无序 无序(LinkedHashMap有序) 有序 是否可重复 是 是 否 Key不可重复,Value可重复 是 线程安全 否 否 否 否 否 增删效率 低(需移动元素) 高(直接修改指针) 高 高 依赖实现类 查询效率 高(下标访问O(1)) 低(遍历O(n)) 高(O(1)) 高(O(1)) 依赖实现类 内存占用 连续内存,紧凑 节点+指针,占用更高 哈希表结构 哈希表结构 - 扩容机制 初始容量10,1.5倍扩容 无需扩容 0.75负载因子触发扩容 0.75负载因子触发扩容 - null值处理 允许 允许 允许一个null Key/Value均允许null 允许 主要用途 随机访问频繁、读多写少 频繁增删、队列/栈操作 快速去重 键值对存储、快速查找 有序集合抽象定义
二、ArrayList vs LinkedList 详细对比 对比项 ArrayList LinkedList 内部结构 Object[] 动态数组 Node节点(双向链表) 初始容量 10 0(无初始容量) 随机访问 O(1) - 通过索引直接访问 O(n) - 需遍历链表定位 头部插入 O(n) - 移动后续元素 O(1) - 直接修改指针 尾部插入 O(1)(均摊,扩容时O(n)) O(1) - 直接修改尾指针 中间插入 O(n) - 移动后续元素 O(n) - 先遍历定位节点 内存占用 仅存储元素,内存紧凑 存储元素+前后指针,占用更高 适合场景 读多写少、随机访问频繁 写多读少、频繁增删操作
三、HashSet vs HashMap 详细对比 对比项 HashSet HashMap 底层实现 基于HashMap(仅存Key) 数组+链表/红黑树(JDK8+) 存储内容 仅存储Key(Value为固定占位符) 存储Key-Value键值对 重复判断 基于Key的equals()+hashCode() 基于Key的equals()+hashCode() 遍历方式 迭代器遍历所有Key KeySet/Values/EntrySet遍历 默认容量 16(同底层HashMap) 16 负载因子 0.75(同底层HashMap) 0.75 哈希冲突 依赖HashMap的链表/红黑树解决 链表(长度>8转红黑树)解决 同步版本 Collections.synchronizedSet() Collections.synchronizedMap()
7 权限修饰符关键字 Java四种访问权限修饰符对比
修饰符 同类 同包 不同包子类 不同包非子类 作用范围 public ✅ ✅ ✅ ✅ 公共的,所有地方可访问 protected ✅ ✅ ✅ ❌ 受保护的,包内+子类可访问 (default) ✅ ✅ ❌ ❌ 默认的,仅同包可访问(无修饰符) private ✅ ❌ ❌ ❌ 私有的,仅同类可访问
8 instanceof关键字 instanceof 是Java的一个二元运算符,用于检查对象是否是特定类的实例(或该类的子类/接口的实现类的实例)。
二、面向对象的三大特性 1 封装(Encapsulation) 封装(Encapsulation) 定义:将数据(属性)和行为(方法)包装在一起,隐藏内部实现细节,仅对外暴露必要的接口。 核心思想:数据隐藏:私有化属性 公开接口:提供getter/setter方法 保护数据完整性:通过方法控制数据访问
优点 安全性:防止数据被非法修改 易维护:修改内部实现不影响外部调用 模块化:代码组织更清晰
2 继承(Inheritance) 定义 子类继承父类的属性和方法,实现代码复用和层次化设计。 核心思想代码复用:子类自动拥有父类功能 扩展增强:子类可以添加新功能 方法重写:子类可以修改父类行为
优点 代码复用:减少重复代码 易于扩展:添加新功能方便 维护性好:公共代码在父类中维护
3 多态(Polymorphism) 它指同一个行为具有多种不同表现形式或形态的能力。具体来说: 多态是指: 同一个方法调用 作用于不同的对象 会产生不同的执行结果