
期末临近Java 课程复习时间紧张很多同学面对厚厚的教材和零散的知识点不知从何下手。本文用最直白的语言、最精炼的讲解带你快速梳理 Java 期末最核心的 20 个考点每个考点配代码示例和记忆口诀适合零基础突击、考前查漏补缺。一小时高效速成帮你稳住期末基本盘。1. Java 基础概念与运行原理1.1 Java 平台特点与跨平台原理Java 的核心特点是一次编写到处运行这得益于 JVMJava 虚拟机机制。Java 源代码编译成字节码.class 文件字节码在不同平台的 JVM 上执行。JVM 相当于一个翻译官把统一的字节码翻译成当前系统能理解的机器指令。关键记忆点编译型语言如 C直接编译成机器码执行快但平台相关解释型语言如 Python逐行解释执行跨平台但执行慢Java 折中方案编译成字节码 JVM 解释执行兼顾跨平台和性能1.2 JDK、JRE、JVM 关系图解这是必考选择题考点三者关系如下JVMJava 虚拟机负责执行字节码JREJava 运行环境 JVM 核心类库JDKJava 开发工具包 JRE 编译工具javac等记忆口诀JDK 最大包 JREJRE 包含 JVM 跑环境变量配置常考简答题# Windows 系统环境变量配置 JAVA_HOME C:\Program Files\Java\jdk1.8.0_291 Path %JAVA_HOME%\bin;原有路径2. 基本语法与数据类型2.1 八种基本数据类型Java 有 8 种基本数据类型考试必考填表题类型字节数取值范围默认值byte1-128 ~ 1270short2-32768 ~ 327670int4-2^31 ~ 2^31-10long8-2^63 ~ 2^63-10Lfloat4约 ±3.4e380.0fdouble8约 ±1.7e3080.0dchar2\u0000 ~ \uffff\u0000boolean1true/falsefalse记忆技巧整数4种byte,short,int,long浮点2种float,double字符1种char布尔1种boolean2.2 自动装箱与拆箱基本数据类型与对应包装类的自动转换// 自动装箱基本类型 → 包装类 Integer i 10; // 相当于 Integer.valueOf(10) // 自动拆箱包装类 → 基本类型 int j i; // 相当于 i.intValue() // 面试常考陷阱题 Integer a 100, b 100; System.out.println(a b); // true因为-128~127有缓存 Integer c 200, d 200; System.out.println(c d); // false超出缓存范围3. 面向对象三大特性3.1 封装Encapsulation将数据和行为包装在一起隐藏实现细节public class Student { // 私有化属性封装 private String name; private int age; // 提供公共访问方法 public String getName() { return name; } public void setName(String name) { if(name ! null !name.trim().isEmpty()) { this.name name; } } // 年龄校验封装业务逻辑 public void setAge(int age) { if(age 0 age 150) { this.age age; } else { throw new IllegalArgumentException(年龄不合法); } } }3.2 继承Inheritance子类继承父类的属性和方法class Animal { String name; public void eat() { System.out.println(name 正在吃东西); } } class Dog extends Animal { // Dog 继承 Animal public void bark() { System.out.println(name 汪汪叫); // 直接使用父类的name } } // 测试 Dog dog new Dog(); dog.name 小黑; dog.eat(); // 继承自Animal的方法 dog.bark(); // 自己的方法3.3 多态Polymorphism同一操作作用于不同对象产生不同行为class Animal { public void makeSound() { System.out.println(动物发出声音); } } class Cat extends Animal { Override public void makeSound() { System.out.println(喵喵喵); } } class Duck extends Animal { Override public void makeSound() { System.out.println(嘎嘎嘎); } } // 多态体现 Animal animal1 new Cat(); Animal animal2 new Duck(); animal1.makeSound(); // 输出喵喵喵 animal2.makeSound(); // 输出嘎嘎嘎多态实现条件继承 重写 父类引用指向子类对象4. 抽象类与接口4.1 抽象类Abstract Class包含抽象方法的类不能实例化abstract class Shape { // 抽象方法没有方法体 public abstract double calculateArea(); // 普通方法 public void display() { System.out.println(这是一个形状); } } class Circle extends Shape { private double radius; public Circle(double radius) { this.radius radius; } Override public double calculateArea() { return Math.PI * radius * radius; } }4.2 接口Interface纯抽象的设计契约Java 8 后可以有默认方法interface Flyable { // 默认都是 public abstract void fly(); // Java 8 默认方法 default void land() { System.out.println(正在降落); } // 静态方法 static int getMaxHeight() { return 10000; } } class Bird implements Flyable { Override public void fly() { System.out.println(鸟儿在飞翔); } }4.3 抽象类 vs 接口对比特性抽象类接口方法可有抽象方法和具体方法默认抽象方法Java8有默认方法变量可有各种变量默认 public static final继承单继承多实现设计is-a 关系has-a 关系构造器有无记忆口诀抽象类单继承接口多实现抽象类有构造器接口只有常量5. 异常处理机制5.1 异常体系结构Throwable ├── Error系统错误不可处理 └── Exception异常可处理 ├── RuntimeException运行时异常 └── 其他Exception编译时异常常见异常类型NullPointerException空指针异常ArrayIndexOutOfBoundsException数组越界ClassCastException类型转换异常IOException输入输出异常5.2 try-catch-finally 使用public class ExceptionDemo { public static void main(String[] args) { try { int[] arr new int[5]; System.out.println(arr[10]); // 这里会抛出异常 } catch (ArrayIndexOutOfBoundsException e) { System.out.println(数组越界异常 e.getMessage()); } catch (Exception e) { System.out.println(其他异常 e.getMessage()); } finally { System.out.println(无论是否异常都会执行); } } }5.3 自定义异常// 自定义业务异常 class AgeException extends Exception { public AgeException(String message) { super(message); } } class Person { public void setAge(int age) throws AgeException { if (age 0 || age 150) { throw new AgeException(年龄必须在0-150之间); } } }6. 集合框架核心考点6.1 List 接口及实现类import java.util.*; // ArrayList数组实现查询快增删慢 ListString arrayList new ArrayList(); arrayList.add(Java); arrayList.add(Python); System.out.println(arrayList.get(0)); // 输出Java // LinkedList链表实现增删快查询慢 ListString linkedList new LinkedList(); linkedList.add(C); linkedList.addFirst(Go); // 链表特有方法6.2 Set 接口及实现类// HashSet无序不允许重复 SetString hashSet new HashSet(); hashSet.add(apple); hashSet.add(apple); // 重复元素不会添加 System.out.println(hashSet.size()); // 输出1 // TreeSet有序自然顺序 SetInteger treeSet new TreeSet(); treeSet.add(5); treeSet.add(2); treeSet.add(8); System.out.println(treeSet); // 输出[2, 5, 8]6.3 Map 接口及实现类// HashMap键值对键不允许重复 MapString, Integer hashMap new HashMap(); hashMap.put(张三, 20); hashMap.put(李四, 22); System.out.println(hashMap.get(张三)); // 输出20 // 遍历HashMap for (Map.EntryString, Integer entry : hashMap.entrySet()) { System.out.println(entry.getKey() : entry.getValue()); }7. 泛型编程7.1 泛型类定义// 泛型类 class BoxT { private T content; public void setContent(T content) { this.content content; } public T getContent() { return content; } } // 使用 BoxString stringBox new Box(); stringBox.setContent(Hello); BoxInteger intBox new Box(); intBox.setContent(100);7.2 泛型方法class GenericMethod { // 泛型方法 public static T T getMiddle(T[] array) { return array[array.length / 2]; } // 使用 public static void main(String[] args) { String[] words {Apple, Banana, Orange}; String middle getMiddle(words); // 输出Banana } }8. 输入输出流I/O8.1 文件读写操作import java.io.*; // 文件读取 try (BufferedReader reader new BufferedReader(new FileReader(test.txt))) { String line; while ((line reader.readLine()) ! null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } // 文件写入 try (BufferedWriter writer new BufferedWriter(new FileWriter(output.txt))) { writer.write(Hello Java I/O); writer.newLine(); } catch (IOException e) { e.printStackTrace(); }8.2 字节流与字符流区别字节流InputStream/OutputStream处理二进制数据字符流Reader/Writer处理文本数据自动处理编码记忆技巧文本用字符流图片音频用字节流9. 多线程编程9.1 线程创建两种方式// 方式1继承Thread类 class MyThread extends Thread { Override public void run() { System.out.println(线程运行中 Thread.currentThread().getName()); } } // 方式2实现Runnable接口 class MyRunnable implements Runnable { Override public void run() { System.out.println(Runnable线程运行); } } // 使用 Thread thread1 new MyThread(); thread1.start(); Thread thread2 new Thread(new MyRunnable()); thread2.start();9.2 线程同步与锁class Counter { private int count 0; // 同步方法 public synchronized void increment() { count; } // 同步代码块 public void decrement() { synchronized(this) { count--; } } }10. 反射机制10.1 反射基本使用import java.lang.reflect.*; class Person { private String name; public Person(String name) { this.name name; } public void sayHello() { System.out.println(Hello, name); } } // 反射操作 public class ReflectionDemo { public static void main(String[] args) throws Exception { // 获取Class对象 Class? personClass Class.forName(Person); // 创建实例 Constructor? constructor personClass.getConstructor(String.class); Object person constructor.newInstance(张三); // 调用方法 Method method personClass.getMethod(sayHello); method.invoke(person); } }11. 注解Annotation11.1 内置注解// Override检查方法重写 class Animal { public void eat() {} } class Dog extends Animal { Override // 编译器检查是否正确重写 public void eat() { System.out.println(狗吃骨头); } } // Deprecated标记过时方法 class OldClass { Deprecated public void oldMethod() { System.out.println(过时的方法); } }11.2 元注解// 自定义注解 Target(ElementType.METHOD) // 注解作用目标方法 Retention(RetentionPolicy.RUNTIME) // 注解保留策略运行时 interface MyAnnotation { String value() default 默认值; int count() default 1; } // 使用自定义注解 class TestClass { MyAnnotation(value 测试, count 5) public void testMethod() { System.out.println(测试方法); } }12. Lambda 表达式12.1 基本语法import java.util.*; // 传统方式 ListString list Arrays.asList(a, b, c); Collections.sort(list, new ComparatorString() { Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); // Lambda 表达式方式 Collections.sort(list, (s1, s2) - s1.compareTo(s2)); // 更简洁的写法 list.sort((s1, s2) - s1.compareTo(s2));12.2 函数式接口// 自定义函数式接口 FunctionalInterface interface Calculator { int calculate(int a, int b); } // 使用 Calculator add (a, b) - a b; Calculator multiply (a, b) - a * b; System.out.println(add.calculate(5, 3)); // 输出8 System.out.println(multiply.calculate(5, 3)); // 输出1513. 字符串处理13.1 String、StringBuilder、StringBuffer// String不可变线程安全 String str1 Hello; String str2 str1 World; // 产生新对象 // StringBuilder可变非线程安全性能高 StringBuilder sb new StringBuilder(); sb.append(Hello).append( World); String result sb.toString(); // StringBuffer可变线程安全性能较低 StringBuffer sbf new StringBuffer(); sbf.append(Hello).append( World); // 使用场景 // 单线程大量字符串操作 → StringBuilder // 多线程字符串操作 → StringBuffer // 字符串不经常修改 → String13.2 字符串常用方法String text Java Programming; System.out.println(text.length()); // 16 System.out.println(text.charAt(5)); // P System.out.println(text.substring(5, 16)); // Programming System.out.println(text.indexOf(Pro)); // 5 System.out.println(text.toUpperCase()); // JAVA PROGRAMMING System.out.println(text.replace(a, A)); // JAvA ProgrAmming14. 数组与集合转换14.1 数组转集合// 数组 → List String[] array {a, b, c}; ListString list Arrays.asList(array); // 注意asList返回的List大小固定不能add/remove // list.add(d); // 会抛出UnsupportedOperationException // 如果需要可修改的List ListString modifiableList new ArrayList(Arrays.asList(array)); modifiableList.add(d); // 正常执行14.2 集合转数组// List → 数组 ListString list new ArrayList(); list.add(Java); list.add(Python); // 方式1转换为Object[] Object[] objArray list.toArray(); // 方式2转换为指定类型数组 String[] strArray list.toArray(new String[0]);15. 日期时间处理15.1 Java 8 新日期APIimport java.time.*; // 当前日期时间 LocalDate today LocalDate.now(); LocalTime now LocalTime.now(); LocalDateTime current LocalDateTime.now(); System.out.println(今天日期 today); System.out.println(当前时间 now); System.out.println(当前日期时间 current); // 日期计算 LocalDate nextWeek today.plusWeeks(1); LocalDate lastMonth today.minusMonths(1); // 日期比较 boolean isAfter today.isAfter(LocalDate.of(2023, 1, 1));15.2 日期格式化import java.time.format.DateTimeFormatter; LocalDateTime now LocalDateTime.now(); // 格式化 DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); String formatted now.format(formatter); System.out.println(格式化后 formatted); // 2024-01-15 14:30:25 // 解析 String dateStr 2024-12-25 18:30:00; LocalDateTime parsed LocalDateTime.parse(dateStr, formatter);16. 枚举类型16.1 枚举定义与使用// 枚举定义 enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } // 使用枚举 Weekday today Weekday.MONDAY; System.out.println(today); // 输出MONDAY // 枚举常用方法 Weekday[] days Weekday.values(); for (Weekday day : days) { System.out.println(day.name() ordinal: day.ordinal()); }16.2 带属性的枚举enum Color { RED(#FF0000), GREEN(#00FF00), BLUE(#0000FF); private String hexCode; Color(String hexCode) { this.hexCode hexCode; } public String getHexCode() { return hexCode; } } // 使用 Color red Color.RED; System.out.println(red.getHexCode()); // 输出#FF000017. 内存管理与垃圾回收17.1 JVM 内存结构堆内存存放对象实例GC 主要区域栈内存存放局部变量和方法调用方法区存放类信息、常量、静态变量17.2 垃圾回收机制// 对象变为垃圾的示例 public class GCDemo { public static void main(String[] args) { // obj1 引用对象 Object obj1 new Object(); // obj1 指向新对象原对象无引用成为垃圾 obj1 new Object(); // 显式建议GC不保证立即执行 System.gc(); } }18. 设计模式基础18.1 单例模式// 饿汉式单例 class Singleton { // 类加载时创建实例 private static final Singleton instance new Singleton(); // 私有构造器 private Singleton() {} // 全局访问点 public static Singleton getInstance() { return instance; } } // 懒汉式单例线程安全 class LazySingleton { private static volatile LazySingleton instance; private LazySingleton() {} public static LazySingleton getInstance() { if (instance null) { synchronized (LazySingleton.class) { if (instance null) { instance new LazySingleton(); } } } return instance; } }18.2 工厂模式// 产品接口 interface Shape { void draw(); } // 具体产品 class Circle implements Shape { Override public void draw() { System.out.println(绘制圆形); } } class Rectangle implements Shape { Override public void draw() { System.out.println(绘制矩形); } } // 工厂类 class ShapeFactory { public Shape createShape(String type) { if (circle.equalsIgnoreCase(type)) { return new Circle(); } else if (rectangle.equalsIgnoreCase(type)) { return new Rectangle(); } return null; } }19. 常用工具类19.1 Arrays 工具类import java.util.Arrays; int[] numbers {3, 1, 4, 1, 5, 9, 2, 6}; // 排序 Arrays.sort(numbers); System.out.println(Arrays.toString(numbers)); // [1, 1, 2, 3, 4, 5, 6, 9] // 二分查找必须先排序 int index Arrays.binarySearch(numbers, 4); System.out.println(数字4的位置 index); // 数组填充 int[] filled new int[5]; Arrays.fill(filled, 10); System.out.println(Arrays.toString(filled)); // [10, 10, 10, 10, 10]19.2 Collections 工具类import java.util.*; ListInteger list new ArrayList(); list.add(5); list.add(2); list.add(8); list.add(1); // 排序 Collections.sort(list); System.out.println(排序后 list); // [1, 2, 5, 8] // 反转 Collections.reverse(list); System.out.println(反转后 list); // [8, 5, 2, 1] // 查找最大值最小值 int max Collections.max(list); int min Collections.min(list); System.out.println(最大值 max , 最小值 min);20. 期末高频考题解析20.1 概念辨析题题目 和 equals() 的区别答案 比较基本数据类型时比较值比较引用类型时比较内存地址equals() 默认比较地址但可重写用于比较内容String 类重写了 equals() 用于比较字符串内容String s1 new String(hello); String s2 new String(hello); System.out.println(s1 s2); // false地址不同 System.out.println(s1.equals(s2)); // true内容相同20.2 代码分析题题目以下代码输出什么为什么public class Test { public static void main(String[] args) { Integer i1 100; Integer i2 100; Integer i3 200; Integer i4 200; System.out.println(i1 i2); System.out.println(i3 i4); } }答案truefalse原因Integer 对 -128~127 的数值有缓存100 在缓存范围内返回同一对象200 超出范围创建新对象20.3 编程实现题题目用单例模式实现一个配置管理器参考答案class ConfigManager { private static volatile ConfigManager instance; private Properties config; private ConfigManager() { config new Properties(); // 加载配置... } public static ConfigManager getInstance() { if (instance null) { synchronized (ConfigManager.class) { if (instance null) { instance new ConfigManager(); } } } return instance; } public String getConfig(String key) { return config.getProperty(key); } }21. 期末复习策略与答题技巧21.1 选择题答题技巧排除法先排除明显错误的选项关键词定位关注不正确错误的是等关键词语法检查注意分号、括号等语法细节内存分析对于对象引用题画内存图分析21.2 编程题得分要点规范命名使用有意义的变量名和方法名注释清晰关键步骤添加简要注释异常处理考虑边界情况和异常处理代码完整确保大括号匹配方法有返回值21.3 简答题答题模板概念题定义 特点 示例比较题相同点 不同点 使用场景原理题机制说明 流程图 优势分析考前最后检查清单[ ] 基本语法和数据类型掌握[ ] 面向对象三大特性理解[ ] 异常处理机制熟悉[ ] 集合框架常用类会使用[ ] 多线程基础概念清楚[ ] 常见设计模式能识别记住Java 期末考注重基础概念和编程实践不要死记硬背要理解原理。遇到编程题先分析需求再设计结构最后编码实现。保持代码简洁清晰注释到位就能拿到理想分数。