Java 编程基础(入门级)超级完整版(2025 更新)
一、Java 开发环境搭建(2025 最新版)
1.1 采用 SDKMAN! 管理 JDK
使用 SDKMAN! 可以便捷切换不同版本的 JDK:
# 安装 SDKMAN!
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 安装最新 LTS 版本 JDK
sdk install java 21.0.1-tem
1.2 使用 Visual Studio Code 开发 Java
安装 VS Code 并添加 Java 扩展包(Extension Pack for Java)
配置 Maven/Gradle 支持:
# 安装 Maven
sdk install maven
# 安装 Gradle
sdk install gradle
二、Java 17+ 新特性实战
2.1 文本块(Text Blocks)
public class TextBlockExample {
public static void main(String[] args) {
String html = """
Hello, Java 17!
""";
System.out.println(html);
}
}
2.2 Switch 表达式增强
public class SwitchExpression {
public static void main(String[] args) {
String day = "MONDAY";
int workHours = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> 8;
case "SATURDAY", "SUNDAY" -> 0;
default -> throw new IllegalArgumentException("Invalid day: " + day);
};
System.out.println("Work hours: " + workHours);
}
}
2.3 Record 类
// 传统类
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name; }
public int getAge() {
return age; }
}
// Record 类 (Java 14+)
record PersonRecord(String name, int age) {
}
public class RecordExample {
public static void main(String[] args) {
PersonRecord person = new PersonRecord("Alice", 30);
System.out.println(person.name()); // 直接访问组件
}
}
三、面向对象编程进阶
3.1 接口默认方法与静态方法
interface Vehicle {
void start();
// 默认方法
default void honk() {
System.out.println("Beep! Beep!");
}
// 静态方法
static void emergencyStop() {
System.out.println("Emergency braking engaged!");
}
}
class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car engine started");
}
}
3.2 抽象类与模板方法模式
abstract class Game {
// 模板方法
public final void play() {
initialize();
startPlay();
endPlay();
}
protected abstract void initialize();
protected abstract void startPlay();
protected abstract void endPlay();
}
class Cricket extends Game {
@Override
protected void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
protected void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
@Override
protected void endPlay() {
System.out.println("Cricket Game Finished!");
}
}
四、Java 集合框架深度应用
4.1 Stream API 高级操作
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List
// 过滤长度大于5的单词并转为大写
List
.filter(word -> word.length() > 5)
.map(String::toUpperCase)
.collect(Collectors.toList());
// 分组操作
Map
.collect(Collectors.groupingBy(String::length));
System.out.println(result); // [BANANA, CHERRY]
System.out.println(wordsByLength); // {5=[apple, cherry, date], 6=[banana]}
}
}
4.2 并发集合应用
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentMapExample {
public static void main(String[] args) {
ConcurrentHashMap
// 多线程安全操作
map.put("key1", 1);
map.put("key2", 2);
// 原子性更新
map.computeIfAbsent("key3", k -> 3);
System.out.println(map); // {key1=1, key2=2, key3=3}
}
}
五、Java 17+ 新特性实战
5.1 模式匹配增强(Pattern Matching)
public class PatternMatchingExample {
public static void main(String[] args) {
Object obj = "Hello";
// 传统方式
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// 模式匹配方式 (Java 17+)
if (obj instanceof String s) {
System.out.println(s.length()); // 直接使用 s
}
}
}
5.2 密封类(Sealed Classes)
// 密封类
public sealed interface Shape
permits Circle, Rectangle, Square {
double area();
}
final class Circle implements Shape {
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
final class Rectangle implements Shape {
private final double width;
private final double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double area() {
return width * height;
}
}
六、应用实例:现代学生成绩管理系统
6.1 使用 Maven 构建项目
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
6.2 使用 Lombok 简化实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String id;
private String name;
private int age;
private double score;
}
6.3 数据库操作(使用 JDBC)
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class StudentDAO {
private static final String URL = "jdbc:h2:./studentdb";
private static final String USER = "sa";
private static final String PASSWORD = "";
// 创建表
public void createTable() {
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
Statement stmt = conn.createStatement()) {
String sql = "CREATE TABLE IF NOT EXISTS students (" +
"id VARCHAR(255) PRIMARY KEY, " +
"name VARCHAR(255), " +
"age INT, " +
"score DOUBLE)";
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
// 添加学生
public void addStudent(Student student) {
String sql = "INSERT INTO students (id, name, age, score) VALUES (?, ?, ?, ?)";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, student.getId());
pstmt.setString(2, student.getName());
pstmt.setInt(3, student.getAge());
pstmt.setDouble(4, student.getScore());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 查询所有学生
public List
List
String sql = "SELECT * FROM students";
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
Student student = new Student(
rs.getString("id"),
rs.getString("name"),
rs.getInt("age"),
rs.getDouble("score")
);
students.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
}
6.4 控制台界面(使用 JavaFX)
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class StudentManagementApp extends Application {
private TableView
private ObservableList
private StudentDAO studentDAO = new StudentDAO();
@Override
public void start(Stage primaryStage) {
studentDAO.createTable();
loadStudents();
// 设置表格
TableColumn
idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
TableColumn
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn
ageCol.setCellValueFactory(new PropertyValueFactory<>("age"));
TableColumn
scoreCol.setCellValueFactory(new PropertyValueFactory<>("score"));
tableView.getColumns().addAll(idCol, nameCol, ageCol, scoreCol);
tableView.setItems(studentList);
// 添加学生表单
TextField idField = new TextField();
idField.setPromptText("ID");
TextField nameField = new TextField();
nameField.setPromptText("Name");
TextField ageField = new TextField();
ageField.setPromptText("Age");
TextField scoreField = new TextField();
scoreField.setPromptText("Score");
Button addButton = new Button("Add Student");
addButton.setOnAction(e -> {
try {
String id = idField.getText();
String name = nameField.getText();
int age = Integer.parseInt(ageField.getText());
double score = Double.parseDouble(scoreField.getText());
Student student = new Student(id, name, age, score);
studentDAO.addStudent(student);
studentList.add(student);
// 清空表单
idField.clear();
nameField.clear();
ageField.clear();
scoreField.clear();
} catch (NumberFormatException ex) {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Input Error");
alert.setContentText("Please enter valid age and score!");
alert.showAndWait();
}
});
HBox formBox = new HBox(10, idField, nameField, ageField, scoreField, addButton);
// 主布局
BorderPane root = new BorderPane();
root.setCenter(tableView);
root.setBottom(formBox);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.setTitle("Student Management System");
primaryStage.show();
}
private void loadStudents() {
studentList.addAll(studentDAO.getAllStudents());
}
public static void main(String[] args) {
launch(args);
}
}
七、测试与调试技术
7.1 JUnit 5 单元测试
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class Calculator {
public int add(int a, int b) {
return a + b;
}
}
class CalculatorTest {
@Test
void testAdd() {
Calculator calculator = new Calculator();
int result = calculator.add(2, 3);
assertEquals(5, result);
}
}
7.2 使用日志框架(SLF4J + Logback)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogExample {
private static final Logger logger = LoggerFactory.getLogger(LogExample.class);
public static void main(String[] args) {
logger.info("程序启动");
try {
int result = 10 / 0;
} catch (Exception e) {
logger.error("发生异常: {}", e.getMessage(), e);
}
logger.info("程序结束");
}
}
八、进阶学习资源
官方文档:
Java 官方文档
OpenJDK 项目
推荐书籍:
《Effective Java》(第 3 版)
《Java 核心技术》(第 12 版)
《Java 并发编程实战》
在线课程:
Coursera: Java Programming and Software Engineering Fundamentals
Udemy: Java Masterclass for Software Developers
社区与论坛:
Stack Overflow
Reddit 的 r/java 板块
通过掌握这些内容,你将建立坚实的 Java 编程基础,并能够进一步学习高级主题如 Spring Boot、微服务和云原生开发。
Java 编程,Java 基础入门,2025 编程指南,Java 开发,编程入门,面向对象编程,Java 核心技术,编程语言,初学者指南,Java 基础教程,编程基础,Java 入门教程,Java 学习,软件开发,Java 超级指南
资源地址:https://pan.quark.cn/s/14fcf913bae6
--