跳到主要内容JavaSE 核心知识点全解:从基础语法到多线程实战 | 极客日志Javajava算法
JavaSE 核心知识点全解:从基础语法到多线程实战
JavaSE 涵盖基础语法、面向对象、集合框架、IO 流、异常处理、网络编程及多线程机制。文章详细讲解了数据类型转换、类与对象、封装继承多态、常用 API 类、List/Set/Map 集合操作、文件读写、序列化以及线程同步等核心知识点,配合代码示例与图解,适合系统学习 Java 语言基础。
芝士奶盖1 浏览 JavaSE 核心知识点全解
一、基础语法
1. 数据类型
分类:
基本数据类型:
- 整数型:int, short, long, byte
- 浮点型:float, double
- 字符型:char
- 布尔型:boolean
注意:Java 中浮点数字面量默认为 double 类型,使用 float 需加 f/F。
引用数据类型:
- String(字符串)
- class(类)
- Interface(接口)

2. 基本数据类型转换
分类:
- 默认转换:小容量类型转为大容量类型
- 强制转换:大容量类型转为小容量类型(存在溢出或精度降低风险)
注意:容量不是所占字节大小。例如 4 字节的 float 类型,其容量大于 8 字节的 long 类型。
容量排序: byte/short/char → int → long → float → double(从小到大)

3. 运算符
算术运算符:

注意 i++ 和 ++i 的区别:
赋值运算符:

比较运算符:

逻辑运算符:

&:无论左边真假,右边都运算
&&:若左边为假,右边不运算(短路特性)
位运算符:

条件运算符:

4. 循环语句
分类: while 循环、do/while 循环、for 循环
-
不知道循环次数用 while 循环

-
至少循环一次用 do/while 循环

-
知道循环次数用 for 循环

5. 定义方法
所有方法都要定义在类里。Java 中的方法类似函数,对完成某个功能的代码进行封装并命名,最终可重复调用。
public static void menu() { ... }
public:访问权限
static:静态
void:返回值类型
menu:方法名
( ):参数列表
{ ... }:方法体
6. 数组
- 数组是一组相同数据类型的集合,是一个容器。
- 可以存储基本数据类型,也可以存储引用数据类型。
- 数组本身是引用数据类型,是一个对象。
- 创建时必须指明长度,且长度不可变。
- 元素空间连续。
int[] a = new int[5];
int[] b = new int[]{1, 2, 3, 4, 5, 6, 7};
int[] c = {1, 2, 3, 4};
访问数组元素通过下标(索引),下标从 0 开始,最大索引 = 长度 - 1。
int[] a = new int[5];
System.out.println(Arrays.toString(a));
**前言:**面向过程 (POP) 强调具体步骤,结构简单但扩展性差;面向对象 (OOP) 从宏观分析功能,将不同功能封装在不同类中,便于维护。两者并非对立,OOP 实现细节仍依赖 POP。
二、面向对象
1. 类和对象
什么是类?
具有相同特征事物的抽象描述,如人类、车类、学生类等。
- 变量:事物属性(名词)
- 方法:事物行为(动词)
- 构造方法:初始化对象
- 代码块:无名称的代码段
- 内部类:类中声明的类
public class Student {
String name;
int age;
String gender;
public void study() {
System.out.println("学生要好好学习");
}
public void exercise() {
System.out.println("学生要多运动");
}
public static void main(String[] args) {
Student student = new Student();
student.study();
student.name = "小王";
}
}
什么是对象?
对象是类的实例。使用 new 关键字在内存中创建实际存在的实例。
Student student = new Student();
2. 构造方法
- 方法名与类名相同,无返回值,不需要 void 修饰。
- 一个类可有多个构造方法(重载)。
- 若未定义构造方法,Java 提供默认无参构造;一旦定义了构造方法,默认构造消失。
- 使用
new 时自动调用。
public class Student {
String name;
int age;
public Student() {
name = "小张";
age = 18;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student("小魏", 20);
}
}
3. 方法的重载
在一个类中有多个同名方法,通过参数的个数、类型、顺序区分。与返回值类型无关。
public class Student {
public Student(String name, int age, String gender) {}
public Student(int age, String name, String gender) {}
public Student(String name, int age) {}
}
4. this 关键字
在类内部引用成员变量,区分局部变量。表示当前正在访问的对象。
public Person(String name, int age) {
this.name = name;
this.age = age;
}
5. static 关键字
- 修饰成员变量(类变量):内存中只有一份,所有对象共享。
- 修饰成员方法(类方法):可直接用类名访问。
- 随类加载而加载,优先于对象存在。
- 静态方法中只能访问静态成员变量。
public class Demo {
static int count = 0;
public static void show() {
System.out.println(count);
}
}
6. 代码块
- 实例代码块:每次创建对象时执行。
- 静态代码块:类被加载时自动执行。
public class Demo {
{ System.out.println("实例代码块"); }
static { System.out.println("静态代码块"); }
public static void main(String[] args) {
new Demo();
new Demo();
}
}
7. 访问权限修饰符
public:公共权限,任何地方可访问。
protected:受保护权限,本类、同包、不同包子类可访问。
default:默认权限,本类、同包可访问。
private:私有权限,仅本类可访问。
8. 面向对象的三大特征
封装
**概念:**隐藏信息,通过特定方法访问,控制权在类手中。
**案例:**将成员变量私有化,提供 getter/setter。
public class Student {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) {
if (name.length() > 1 && name.length() < 5) {
this.name = name;
}
}
}
public class Window {
static Window window = new Window();
private Window() {}
public static Window getWindow() { return window; }
}
继承
**概念:**抽取共性定义基类,子类继承拥有功能。
**条件:**符合 is-a 关系。一个类只能直接继承一个类。
public class Cat extends Animal { }
多态
**口诀:**编译看左边,运行看右边(静态方法除外)。
Animal dog = new Dog();
dog.makeSound();
9. 方法的重写
- 方法签名必须一致。
- 访问权限不能小于父类。
- 构造方法、静态方法不能重写。
- 建议添加
@Override 注解。
10. final 关键字
- 修饰类:不能被继承(如 String)。
- 修饰方法:不能被重写。
- 修饰参数:值不可变。
- 修饰变量:常量。
final static int A = 10;
final int COUNT;
11. 抽象类
**概念:**包含抽象方法的类,用 abstract 修饰。
- 不能实例化。
- 子类必须实现所有抽象方法,否则子类也必须是抽象类。
abstract class Animal {
abstract void sound();
void sleep() { System.out.println("睡觉"); }
}
12. 接口
**介绍:**特殊的抽象类,用 interface 定义,类用 implements 实现。
- 方法默认抽象。
- 类可实现多个接口。
- 接口可继承多个接口。
public interface MyInterface {
int num = 10;
void eat();
default void test1() {}
}
三、API 常用类
Object 类
所有 Java 类的祖先。每个类都继承 Object。
1. toString 方法
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
2. equals 方法
Object 中默认比较地址。通常重写为比较内容。
@Override
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
return false;
}
Arrays 类
equals():比较内容是否相等。
copyOf():复制数组。
fill():填充数组。
sort():排序。
binarySearch():二分查找。
toString():转字符串。
String 类
length(), charAt(), indexOf(), substring()
toUpperCase(), toLowerCase(), concat(), split()
replace(), replaceAll(), trim()
StringBuffer 类
**区别:**String 每次拼接创建新对象,耗时;StringBuffer 原地修改,效率高。
Math 类 & Random 类
Math.abs(), sqrt(), pow(), random()
Random.nextInt(), nextLong()
Date 类
处理时间。getTime() 获取毫秒值。可用于测试性能。
四、集合
体系图
List 接口及实现类
- **ArrayList:**底层数组,查询快,增删慢。
- **LinkedList:**底层链表,查询慢,增删快。
- **Vector:**线程安全,效率低。
**遍历:**for 循环、增强 for、迭代器 (Iterator)。
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.equals("a")) it.remove();
}
Set 接口及实现类
- **HashSet:**基于哈希表,无序。
- **TreeSet:**基于树,可排序。
Map 接口
- **HashMap:**无序,允许 null 键值。
- **TreeMap:**按键排序。
- **Hashtable:**线程安全,不允许 null。
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry entry : entries) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
Collections 类
集合工具类,提供 sort、shuffle、reverse 等方法。
五、IO 流
File 类
File file = new File("E:/demo.txt");
file.createNewFile();
字节流与字符流
- **字节流:**InputStream/OutputStream,处理二进制。
- **字符流:**Reader/Writer,处理文本。
读写文件
FileInputStream in = new FileInputStream("src.txt");
FileOutputStream out = new FileOutputStream("dst.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
序列化
对象持久化。类需实现 Serializable 接口。
Student student = new Student("小魏", 20);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));
oos.writeObject(student);
六、异常处理机制
异常概述
程序运行时的非正常情况。分为 Error(虚拟机错误)和 Exception(可处理异常)。
常见异常
- ArithmeticException(算术异常)
- NullPointerException(空指针异常)
- ArrayIndexOutOfBoundsException(数组越界)
异常处理
try {
int c = a / b;
} catch (ArithmeticException e) {
e.printStackTrace();
} finally {
}
七、网络编程
核心要素
TCP 协议
UDP 协议
TCP 编程
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
Socket socket = new Socket("127.0.0.1", 8888);
八、线程
基本概念
- **进程:**运行中的程序。
- **线程:**CPU 调度的最小单元。
创建线程
- 继承 Thread 类,重写 run()。
- 实现 Runnable 接口,避免单继承限制。
Thread t = new Thread(new Runnable() {
public void run() { }
});
t.start();
线程同步
**synchronized:**隐式锁,可修饰方法或代码块。
**ReentrantLock:**显式锁,需手动释放。
synchronized (obj) {
if (num > 0) {
System.out.println(Thread.currentThread().getName() + " 买到了第" + num-- + "张票");
}
}
本文涵盖了 JavaSE 的核心内容,从基础语法到高级并发,旨在帮助开发者构建扎实的 Java 基础。
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online