数据类型与变量:
基本数据类型 (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-case
: switch(表达式)
类型 (int
, char
, String
-Java7+), case
值, break
作用, default
分支。
* 循环结构:
* for
循环: 标准写法 (for(初始化;条件;步进)
), 增强 for-each
(for(类型 变量 : 集合/数组)
),常用于数组遍历。
* while
循环: while(条件)
。
* do-while
循环: do{...} while(条件);
(至少执行一次)。
* 控制转移: break
(跳出循环/switch
), continue
(跳过本次循环剩余代码,继续下次), return
(返回值并结束方法)。
类与对象:
* 类 (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)
。
* StringBuilder
与 StringBuffer
: 可变字符串。StringBuilder
(非线程安全,效率高) 和 StringBuffer
(线程安全,效率稍低) 用于频繁修改字符串的场景 (append()
, insert()
, delete()
, reverse()
)。理解与 String
的区别和应用场景是重点!
异常体系: Throwable
-> Error
(严重错误,程序通常无法处理) / Exception
(程序本身可以处理的异常)。 Exception
分类:
* 检查型异常 (Checked Exception): Exception
及其子类 (除 RuntimeException
)。编译器强制要求处理 (try-catch
或 throws
)。如 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) { // 处理异常 } // 资源会自动关闭
核心接口: Collection
(单列集合), Map
(双列集合,键值对)。
常用 Collection
实现类:
* List
(有序、可重复):
* ArrayList
: 基于动态数组,随机访问快 (get/set
),插入删除中间元素相对慢。线程不安全。
* LinkedList
: 基于双向链表,插入删除快 (add/remove
),随机访问慢。实现了 Deque
接口,可作队列/栈使用。
* Set
(无序、唯一):
* HashSet
: 基于 HashMap
(哈希表),查找快。元素无序。依赖 hashCode()
和 equals()
保证唯一性。
* LinkedHashSet
: HashSet
的子类,维护元素的插入顺序。
* TreeSet
: 基于红黑树 (自平衡二叉查找树),元素自然排序或定制排序 (Comparator
)。有序 (SortedSet
)。
常用 Map
实现类:
* HashMap
: 基于哈希表,键唯一。允许 null
键和 null
值。查找快。元素无序。依赖键的 hashCode()
和 equals()
。
* LinkedHashMap
: HashMap
的子类,维护键值对的插入顺序或访问顺序。
* TreeMap
: 基于红黑树,键自然排序或定制排序 (Comparator
)。键有序 (SortedMap
)。
遍历集合:
* List
/Set
: for-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
。提供类型安全,避免强制类型转换。
流的分类:
* 方向: 输入流 (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-finally
中 return
的执行顺序 (finally
块中的代码通常在 return
之前执行)。
* 使用集合时未指定泛型导致强制类型转换错误 (ClassCastException
)。
备考建议:
祝各位同学期末顺利,Java 高分飘过!
有任何疑问,欢迎在评论区留言讨论!
(本文内容根据常见教材和考试范围整理,具体考点请以授课老师要求为准。)