【Java 常考题】大一期末 Java 常考题全面解析:助你轻松拿高分!

一、Java 基础语法 (必考!)

数据类型与变量:
基本数据类型 (8种): byte, short, int, long, float, double, char, boolean (考察范围、默认值)。
* 引用数据类型: 类、接口、数组 (区别于基本类型)。
* 变量声明与初始化: 语法规则、作用域 (public, private, protected, 默认)、局部变量必须初始化。
* 常量: final 关键字。
* 自动类型转换与强制类型转换: 规则、可能的数据丢失 (double -> int)、(int), (double) 的使用场景。

运算符:
* 算术运算符: +, -, *, /, %, ++, -- (区分 i++++i)。
* 关系运算符: >, <, >=, <=, ==, != (比较对象引用时 == vs equals() 是重点!)。
* 逻辑运算符: && (短路与), || (短路或), ! (非), &, |, ^ (按位亦可做逻辑)。
* 赋值运算符: =, +=, -=, *=, /=, %=
* 条件运算符 (三元运算符): 条件 ? 表达式1 : 表达式2
* 位运算符: &, |, ^, ~, <<, >>, >>> (了解即可,考得相对少)。

流程控制:
* 分支结构:
* if / else if / else: 多重判断。
* switch-caseswitch(表达式) 类型 (int, char, String-Java7+), case 值, break 作用, default 分支。
* 循环结构:
* for 循环: 标准写法 (for(初始化;条件;步进)), 增强 for-each (for(类型 变量 : 集合/数组)),常用于数组遍历。
* while 循环: while(条件)
* do-while 循环: do{...} while(条件); (至少执行一次)。
* 控制转移: break (跳出循环/switch), continue (跳过本次循环剩余代码,继续下次), return (返回值并结束方法)。


二、面向对象编程 (OOP) (重中之重!)

类与对象:
* 类 (Class) 是模板/蓝图,对象 (Object) 是类的实例。
* 成员变量 (属性/字段): 描述对象状态。
* 成员方法: 描述对象行为。
* 构造方法 (Constructor):
* 方法名与类名相同,无返回值类型 (连 void 都没有)。
* 作用:初始化对象 (为成员变量赋初值)。
* 默认无参构造方法 (如果类中没有显式定义任何构造方法,系统提供)。
* 重载 (Overloading):多个构造方法,参数列表不同。
* this 关键字: 指代当前对象,用于区分成员变量与局部变量同名的情况,在构造方法中调用其他构造方法 (this(...))。

封装 (Encapsulation):
* 核心思想:隐藏对象内部细节,仅对外提供可控的访问接口。
* 访问修饰符: private (本类可见), protected (本包+子类), 默认 (本包可见), public (所有类可见)。
* Getter/Setter 方法: 提供对 private 成员变量的安全读写访问 (public String getName(), public void setName(String name))。

继承 (Inheritance):
* extends 关键字:class SubClass extends SuperClass { ... }
* 子类继承父类非 private 的成员变量和方法。
* super 关键字:
* 访问父类的成员变量 (super.variableName)。
* 调用父类的成员方法 (super.methodName())。
* 调用父类的构造方法 (super(...),必须在子类构造方法的第一行)。
* 方法重写 (Overriding):
* 子类重新定义父类中已有的方法 (方法名、参数列表、返回类型必须相同,访问权限不能比父类更严格)。
* @Override 注解:显式声明重写,增加可读性和编译器检查。
* Object 类: 所有类的根类,常用方法:toString() (返回对象字符串表示,常重写), equals(Object obj) (比较对象内容,常重写), hashCode() (返回对象哈希码)。

多态 (Polymorphism):
* 概念: 父类引用指向子类对象 (Parent p = new Child();)。
* 表现形式:
* 编译时类型: 声明变量的类型 (Parent)。
* 运行时类型: 实际指向的对象的类型 (Child)。
* 方法调用: 运行时根据对象的实际类型调用相应的方法 (虚方法调用)。这是多态的核心机制!
* 向上转型 (Upcasting): Parent p = new Child(); (自动,安全)。
* 向下转型 (Downcasting): Child c = (Child) p; (强制,需要 instanceof 检查避免 ClassCastException)。

抽象类 (Abstract Class) 与接口 (Interface):
* 抽象类 (abstract class):
* 可以包含抽象方法 (abstract void method(); 无方法体) 和具体方法。
* 不能实例化 (new AbstractClass() 错误)。
* 用于定义通用模板,强制子类实现特定行为。
* 接口 (interface):
* 早期 (Java 7-): 只能包含 常量 (public static final) 和 抽象方法 (public abstract)。(可省略这些修饰符,默认就是)
* Java 8+: 新增 默认方法 (default)静态方法 (static)
* Java 9+: 新增 私有方法 (private)
* 接口不能实例化
* 类通过 implements 关键字实现接口,必须实现接口中的所有抽象方法 (除非自身是抽象类)。
* 一个类可以实现多个接口 (class A implements I1, I2)。
* 接口可以继承接口 (interface I3 extends I1, I2),支持多继承。


三、数组与字符串

数组 (Array):
* 声明与初始化:
java int[] arr1; // 声明 int[] arr2 = new int[5]; // 动态初始化 (默认值: int-0) int[] arr3 = {1, 2, 3, 4, 5}; // 静态初始化 String[] names = new String[]{"Alice", "Bob"}; // 静态初始化另一种形式
* 访问元素: 数组名[索引] (索引从 0 开始)。
* 长度: 数组名.length (注意是属性,不是方法 ())。
* 遍历: for 循环 (标准或 for-each)。
* 多维数组: 理解 int[][] matrix = new int[3][4];

字符串 (String):
* 不可变性 (Immutability): String 对象一旦创建,内容不可更改。str = str + "!"; 实际创建了新对象。这是重点考点!
* 创建: String s1 = "Hello"; (字符串常量池), String s2 = new String("Hello"); (堆中新建对象)。
* 常用方法: length(), charAt(int index), concat(String str) / +, equals(Object obj) / equalsIgnoreCase(), contains(CharSequence s), indexOf(String str), lastIndexOf(String str), substring(int beginIndex[, int endIndex]), toLowerCase() / toUpperCase(), trim(), replace(char old, char new) / replace(CharSequence target, CharSequence replacement), split(String regex)
* StringBuilderStringBuffer 可变字符串。StringBuilder (非线程安全,效率高) 和 StringBuffer (线程安全,效率稍低) 用于频繁修改字符串的场景 (append(), insert(), delete(), reverse())。理解与 String 的区别和应用场景是重点!


四、异常处理

异常体系: Throwable -> Error (严重错误,程序通常无法处理) / Exception (程序本身可以处理的异常)。 Exception 分类:
* 检查型异常 (Checked Exception): Exception 及其子类 (除 RuntimeException)。编译器强制要求处理 (try-catchthrows)。如 IOException, ClassNotFoundException
* 运行时异常 (RuntimeException / Unchecked Exception): RuntimeException 及其子类。编译器不强制处理,通常由程序逻辑错误引起。如 NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException, ClassCastException, IllegalArgumentException
处理机制:
* try-catch-finally
java try { // 可能抛出异常的代码 } catch (ExceptionType1 e1) { // 处理 ExceptionType1 类型的异常 } catch (ExceptionType2 e2) { // 处理 ExceptionType2 类型的异常 } finally { // 无论是否发生异常,最终都会执行的代码 (通常用于释放资源,如关闭文件流) }
* throws 声明: 在方法签名上声明该方法可能抛出的检查型异常,将异常处理的责任交给方法的调用者。
java public void readFile() throws IOException { ... }
自定义异常: 继承 Exception (检查型) 或 RuntimeException (运行时异常)。
try-with-resources (Java 7+): 自动管理资源 (实现了 AutoCloseable 接口的资源,如各种流),无需显式 finally 关闭。
java try (FileInputStream fis = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis))) { // 使用资源 } catch (IOException e) { // 处理异常 } // 资源会自动关闭


五、集合框架 (Collections Framework) (基础部分)

核心接口: Collection (单列集合), Map (双列集合,键值对)。
常用 Collection 实现类:
* List (有序、可重复):
* ArrayList: 基于动态数组,随机访问快 (get/set),插入删除中间元素相对慢。线程不安全。
* LinkedList: 基于双向链表,插入删除快 (add/remove),随机访问慢。实现了 Deque 接口,可作队列/栈使用。
* Set (无序、唯一):
* HashSet: 基于 HashMap (哈希表),查找快。元素无序。依赖 hashCode()equals() 保证唯一性。
* LinkedHashSetHashSet 的子类,维护元素的插入顺序。
* TreeSet: 基于红黑树 (自平衡二叉查找树),元素自然排序定制排序 (Comparator)。有序 (SortedSet)。
常用 Map 实现类:
* HashMap: 基于哈希表,键唯一。允许 null 键和 null 值。查找快。元素无序。依赖键的 hashCode()equals()
* LinkedHashMapHashMap 的子类,维护键值对的插入顺序或访问顺序。
* TreeMap: 基于红黑树,键自然排序定制排序 (Comparator)。键有序 (SortedMap)。
遍历集合:
* List/Setfor-each 循环, Iterator (hasNext(), next(), remove())。
* Map
* 遍历所有键: keySet() -> for-each / Iterator
* 遍历所有值: values() -> for-each / Iterator
* 遍历所有键值对: entrySet() -> for (Map.Entry entry : map.entrySet()) / Iterator
5. 泛型 (Generics): List list = new ArrayList<>();。提供类型安全,避免强制类型转换。


六、输入输出流 (I/O Streams) (基础概念)

流的分类:
* 方向: 输入流 (InputStream, Reader), 输出流 (OutputStream, Writer)。
* 数据类型: 字节流 (InputStream, OutputStream - 处理图片、视频等二进制文件), 字符流 (Reader, Writer - 处理文本文件)。
常用流:
* 文件操作:
* FileInputStream / FileOutputStream (字节流)
* FileReader / FileWriter (字符流)
* File 类: 表示文件或目录路径,用于创建、删除、重命名、判断属性等。
* 缓冲流 (提高效率):
* BufferedInputStream / BufferedOutputStream (字节缓冲)
* BufferedReader / BufferedWriter (字符缓冲)。BufferedReader.readLine() 常用。
* 转换流: InputStreamReader (字节流转字符流), OutputStreamWriter (字符流转字节流)。常用于连接字节流和字符流。
标准流: System.in (标准输入,InputStream), System.out (标准输出,PrintStream), System.err (标准错误输出)。


七、多线程 (基础概念)

线程创建方式:
* 继承 Thread 类: 重写 run() 方法,创建对象调用 start() 启动线程。
java class MyThread extends Thread { public void run() { ... } } MyThread t = new MyThread(); t.start();
* 实现 Runnable 接口: 实现 run() 方法,将 Runnable 对象作为参数传递给 Thread 对象,调用 start()更推荐 (避免单继承限制)
java class MyRunnable implements Runnable { public void run() { ... } } Thread t = new Thread(new MyRunnable()); t.start();
* (Java 5+) 实现 Callable 接口: 可返回结果,可抛出异常,配合 FutureTask / 线程池使用 (期末考得少)。
线程状态: NEW (新建), RUNNABLE (可运行/运行中), BLOCKED (阻塞), WAITING (无限等待), TIMED_WAITING (计时等待), TERMINATED (终止)。
线程同步 (解决并发问题):
* synchronized 关键字:
* 同步方法: public synchronized void method() { ... } (锁是当前对象 this)。
* 同步代码块: synchronized(锁对象) { ... } (锁对象可以是任意对象)。
* wait(), notify(), notifyAll() Object 类的方法,必须在 synchronized 块内使用,用于线程间通信协作。wait() 让当前线程等待并释放锁,notify()/notifyAll() 唤醒等待该锁的线程。
线程安全: 理解 ArrayList vs Vector (已过时), HashMap vs Hashtable (已过时), StringBuilder vs StringBuffer


八、网络编程 (基础概念)

网络模型: OSI 七层模型 / TCP/IP 四层模型 (了解层次)。
TCP vs UDP:
* TCP (传输控制协议): 面向连接、可靠、基于字节流。三次握手建立连接,保证数据顺序和完整性。速度相对慢。如 HTTP, FTP。
* UDP (用户数据报协议): 无连接、不可靠、基于数据报。速度快,不保证顺序和到达。如 DNS, 视频流。
Socket 编程 (基于 TCP):
* 服务器端: ServerSocket (监听端口) -> accept() (等待客户端连接,返回 Socket) -> Socket.getInputStream()/getOutputStream() (通信)。
* 客户端: Socket (指定服务器IP和端口) -> Socket.getInputStream()/getOutputStream() (通信)。
* 通常配合多线程处理多个客户端连接。


九、高频编程题 & 易错点

编程题常见类型:
* 递归 (阶乘、斐波那契数列)。
* 数组操作 (排序-冒泡/选择/插入排序、查找-线性/二分查找、最大值/最小值、求和/平均值)。
* 字符串操作 (反转、判断回文、统计字符出现次数、单词分割)。
* 模拟银行账户、学生信息管理等简单面向对象设计。
* 文件读写 (读取文本文件内容、写入内容到文件)。
* 单例模式 (饿汉式、懒汉式 - 注意线程安全)。
* 生产者-消费者模型 (使用 wait()/notify())。

易错点 (务必注意!):
* ==equals() 的区别 (基本类型比较值 vs 引用类型比较地址 vs 重写后比较内容)。
* String 的不可变性。
* 循环条件 (for, while) 导致死循环或数组越界 (ArrayIndexOutOfBoundsException)。
* 空指针异常 (NullPointerException) - 调用 null 引用的方法或访问字段。
* 方法重载 (Overloading) vs 方法重写 (Overriding) 的混淆。
* 多态中,成员变量的访问看编译时类型,成员方法的调用看运行时类型。
* 基本数据类型与包装类 (int vs Integer) 的自动装箱 (Autoboxing) / 拆箱 (Unboxing) 及 == 比较陷阱。
* try-catch-finallyreturn 的执行顺序 (finally 块中的代码通常在 return 之前执行)。
* 使用集合时未指定泛型导致强制类型转换错误 (ClassCastException)。


备考建议:

  1. 理解概念: 死记硬背不如理解原理,特别是 OOP、多态、异常、集合框架。
  2. 动手实践: 多写代码!课本例题、课后习题、老师布置的实验题务必亲自敲一遍。
  3. 调试能力: 学会使用 IDE (Eclipse, IntelliJ IDEA) 的调试功能,定位错误。
  4. 复习错题: 平时练习和作业中的错题是宝贵资源。
  5. 关注基础: 期末考侧重基础语法和核心概念,不要过分追求复杂难题。

祝各位同学期末顺利,Java 高分飘过!

有任何疑问,欢迎在评论区留言讨论!

(本文内容根据常见教材和考试范围整理,具体考点请以授课老师要求为准。)

你可能感兴趣的:(程序人生,java,学习方法,学习)