Java java.net 包提供底层网络通信支持,核心协议:TCP(面向连接、可靠、流式)和 UDP(无连接、数据报、不可靠但低延迟)。 TCP Socket 编程模型 服务端流程 ServerSocket server = new ServerSocket(port); 绑定端口监听 Socket client = server.accept(); 阻塞等待客户端连接 通过 client.getInputStream()/getOutputStream() 通信 处理完关闭 client.close(),循环 accept 下一个 客户端流程 Socket socket = ne
对象序列化将对象转为字节流(含类元数据、字段值),可持久化到文件/数据库/网络传输;反序列化重建对象。跨 JVM、跨平台兼容。 核心接口与流 Serializable:标记接口,无方法,声明类可序列化 ObjectOutputStream:writeObject(Object) 序列化 ObjectInputStream:readObject() 反序列化 序列化条件 类实现 Serializable 所有非 transient 字段均可序列化(基本类型、String、实现 Serializable 的对象) Employee 示例 public class Employee
泛型让类型成为参数,实现编译期类型安全、消除强转、代码复用。Java 泛型采用类型擦除实现,运行期泛型信息被擦除为原始类型。 泛型方法 类型参数声明在返回类型前:<E> void printArray(E[] arr)。调用时编译器推断类型。 public static void printArray(E[] arr) { for (E e : arr) System.out.printf(%s , e); System.out.println(); } Integer[] ints = {1,2,3}; printArray(ints); // 推断 E
Java Collections Framework(JCF)是统一的数据结构架构,提供接口、实现、算法三大支柱,位于 java.util 包。取代早期零散类,实现高性能、高互操作、易扩展。 核心接口体系 Collection (根接口) ├── List // 有序、可重复 │ ├── ArrayList │ ├── LinkedList │ └── Vector (遗留) ├── Set // 无序、唯一 │ ├── HashSet │ ├── LinkedHashSet (插入序) │ └── TreeSet (有序) └
Java 早期(Java 1.x)在 java.util 提供了一组数据结构类,虽被 Collections Framework 取代,但仍广泛存在于遗留代码中,理解它们有助于维护迁移。 核心遗留类概览 类/接口特点现代替代 Enumeration遍历接口,hasMoreElements()/nextElement()Iterator BitSet位集合,紧凑存储布尔标志位仍在用,无直接替代 Vector动态数组,**线程安全**(同步方法)ArrayList + 手动同步或 CopyOnWriteArrayList Stack继承 Vector,LIFO 栈,push/pop/peek
包是 Java 组织类的核心机制,解决命名冲突、访问控制、代码定位三大问题。包对应文件系统目录结构,形成逻辑与物理统一的层次命名空间。 包声明与命名规范 源文件首行:package com.company.project.module; 命名:全小写,反向域名前缀(com.example) 每文件仅一条 package 语句,应用于文件所有类型 编译与目录结构 # 源码结构 src/com/example/model/User.java # 内容 package com.example.model; public class User {} // 编译到目标目录 javac -d
接口是 Java 中定义行为契约的核心机制。它声明做什么,不关心怎么做。类通过 implements 实现接口,承诺提供所有抽象方法的实现。 接口核心特征 隐式 abstract,无需声明 方法隐式 public abstract(Java 8 前) 字段隐式 public static final(常量) 无构造器,不能实例化 一个类可实现多个接口(多实现) 接口可继承多个父接口(多继承) 接口演进:Java 8/9 新增能力 版本新增特性用途 Java 8default 方法提供默认实现,兼容旧版本扩展 Java 8static 方法工具方法归属接口,无需工具类 Java 9p
封装是面向对象四大支柱之一(封装、继承、多态、抽象)。核心思想:将数据(字段)与操作数据的方法绑定,隐藏内部实现细节,仅暴露受控接口。实现数据隐藏,保护对象不变量。 实现封装的两步走 私有化字段:private 修饰实例变量 公开访问器:提供 public getter/setter 方法 标准封装模板 public class Person { private String name; // 私有字段 private int age; // Getter public String getName() { return name; }
抽象是隐藏实现细节、仅暴露功能接口的过程。Java 通过 abstract 关键字实现抽象类与抽象方法,定义“必须做什么”,留给子类决定“怎么做”。 抽象类 含 abstract 修饰的类,不能实例化。可包含: 抽象方法(无方法体,以分号结尾) 具体方法(有实现) 字段、构造器、静态成员、内部类等 关键规则 含抽象方法 ⇒ 类必须声明 abstract abstract 类可无抽象方法(仅防止实例化) 子类继承抽象类必须实现所有抽象方法,否则子类也必须声明 abstract 抽象类构造器供子类 super() 调用,不可直接 new 抽象类示例:Employee public
多态是面向对象三大特性之一,指同一操作作用于不同对象产生不同行为。Java 中通过向上转型(父类引用指向子类对象)和动态方法分派实现。 多态核心概念 IS-A 测试:对象通过多个 IS-A 检查即为多态(如 Deer IS-A Animal、IS-A Vegetarian、IS-A Object) 引用变量:类型固定,但可指向同类型或子类型对象 方法调用:编译期看引用类型,运行期看实际对象类型 引用赋值示例 interface Vegetarian {} class Animal {} class Deer extends Animal implements Vegetarian {
方法重写允许子类提供父类方法的特定实现,是运行时多态的基础。重写方法需遵守严格契约,否则编译报错。 重写基础示例 class Animal { void move() { System.out.println(动物会动); } } class Dog extends Animal { @Override void move() { System.out.println(狗会跑和走); } } Animal a = new Animal(); a.move(); // 动物会动 Animal b = new Dog(); b.move(); // 狗会跑和走(动态分派) 编译
继承让子类获得父类属性和方法,实现代码复用与层次化组织。Java 采用单继承(一个类仅能 extends 一个父类),但可实现多个接口。 extends 关键字 class Father { void work() {} } class Son extends Father { void study() {} } 子类拥有父类非私有成员(字段、方法、嵌套类)。构造器不继承,但子类构造器首行隐式/显式调用父类构造器。 继承示例:计算器扩展 class Calculation { void addition(int x, int y) { System.out.println(和:
内部类是定义在另一个类内部的类,外部类称为外部类。内部类提供了更好的封装,可访问外部类私有成员,是实现回调、迭代器等模式的基础。 嵌套分类 嵌套类 ├── 静态嵌套类 // static 修饰 └── 非静态嵌套类 (内部类) ├── 成员内部类 // 类成员位置 ├── 局部内部类 // 方法/代码块内 └── 匿名内部类 // 无类名,声明即实例化 成员内部类 可用任意访问修饰符(包括 private),可直接访问外部类所有成员(含私有)。 创建与访问 public class Outer { private i
异常是程序运行时出现的异常事件,打断正常流程。Java 通过异常处理机制(try-catch-finally、throws、try-with-resources)实现健壮的错误控制。 异常三大类别 类别特点典型示例 受检异常 编译期检查,必须捕获或声明抛出 IOException、FileNotFoundException、SQLException 非受检异常 运行时抛出,编译器不强制处理 NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException 错误 JVM 层面严重问题,通常无法
java.io 包提供了全面的 I/O 支持,核心抽象是流——数据的有序序列。流分两大类: 输入流:从源读取数据(InputStream/Reader) 输出流:向目标写入数据(OutputStream/Writer) 字节流与字符流 字节流 处理 8 位字节,核心类:FileInputStream、FileOutputStream。适用于图片、音视频等二进制数据。 try (FileInputStream in = new FileInputStream(input.txt); FileOutputStream out = new FileOutputStream(outpu
Java 方法是一组语句的集合,用于执行特定操作。例如调用 System.out.println() 时,系统实际执行了多条语句在控制台输出信息。本文将系统讲解如何创建带/不带返回值的方法、如何调用带/不带参数的方法,以及方法抽象在程序设计中的应用。 方法定义语法 修饰符 返回值类型 方法名(参数列表) { // 方法体 } 组成部分: 修饰符:定义访问权限(public、private 等),可选 返回值类型:方法返回的数据类型,无返回值用 void 方法名:标识符,遵循命名规范 参数列表:参数类型、顺序、数量;可为空 方法体:实现具体功能的语句块 示例:求两数最小值 n
Java 通过 java.util.regex 包提供强大的正则表达式支持,其语法与 Perl 高度相似,学习曲线平缓。正则表达式是一种特殊的字符序列,用于匹配、查找或操作符合特定模式的字符串,广泛应用于文本搜索、数据验证、内容替换等场景。 核心类详解 java.util.regex 包主要包含三个核心类: Pattern 类:正则表达式的编译表示。无公共构造器,需调用静态 compile() 方法创建实例,该方法接受正则表达式字符串作为参数。 Matcher 类:执行匹配操作的引擎。同样无公共构造器,通过 Pattern.matcher() 方法获取实例,用于对输入字符串进行匹配、查找、
Java 在 java.util 包提供 Date 类,封装当前日期时间。 Date 类支持两个构造器: 序号构造器 & 描述 1Date() - 用当前日期时间初始化对象。 2Date(long millisec) - 接受参数为自 1970 年 1 月 1 日午夜起经过的毫秒数。 Date 类方法如下: 序号方法 & 描述 1boolean after(Date date) - 调用 Date 对象包含的日期晚于指定 date 返回 true,否则 false。 2boolean before(Date date) - 调用 Date 对象日期早于指定 dat
Java 提供数据结构 数组,存储固定大小同类型元素的顺序集合。数组用于存储数据集合,但更有用的视角是将其视为同类型变量的集合。 不声明 number0、number1... number99 等单独变量,而是声明一个数组变量如 numbers,用 numbers[0]、numbers[1]... numbers[99] 代表单个变量。 本教程介绍如何声明数组变量、创建数组、使用索引变量处理数组。 声明数组变量 程序中使用数组必须声明引用数组的变量,并指定变量可引用的数组类型。声明数组变量语法: 语法 dataType[] arrayRefVar; // 首选方式 或 dataType arr
字符串在 Java 编程中广泛使用,是字符序列。Java 中字符串作为对象处理。 Java 平台提供 String 类创建和操作字符串。 创建字符串 最直接方式: String greeting = Hello world!; 编译器遇到字符串字面量时创建值为 Hello world! 的 String 对象。 像其他对象一样,可用 new 关键字和构造器创建 String 对象。String 类有 11 个构造器,允许用不同来源提供字符串初始值,如字符数组。 示例 Live Demo public class StringDemo { public static void main(
java