Java 实战指南

FreeGuideOnline 最新 2026-07-14

java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java 实战指南!"); } }

点击绿色运行按钮,控制台输出对应文字,代表开发环境完美就绪。

## Java 基础核心概念速览

任何大型项目都由这些“积木块”构成。我们快速过一遍语法关键点,确保你能够看懂并写出基本逻辑。

### 变量与数据类型
Java 是强类型语言,使用变量前必须声明类型。

```java
int age = 25;               // 整型
double price = 19.99;       // 浮点型
char grade = 'A';           // 字符型
boolean isPassed = true;    // 布尔型
String name = "张三";       // 字符串(引用类型)

运算符与控制流

运算符用于执行计算,控制流决定程序走向。

// 算术与比较
int sum = 10 + 5;
boolean result = (sum > 12) && (sum < 20);

// 条件分支
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60) {
    System.out.println("合格");
} else {
    System.out.println("加油");
}

// 循环
for (int i = 0; i < 5; i++) {
    System.out.println("循环次数: " + i);
}

方法(函数)

方法是组织代码的最小单元,提高复用性。

public static int add(int a, int b) {
    return a + b;
}

面向对象编程实战

Java 的灵魂是面向对象。掌握类与对象、封装、继承和多态,你就能设计出结构清晰的应用。

类与对象

“类”是模板,“对象”是依据模板创建的实例。

// 定义一个学生类
public class Student {
    // 属性(成员变量)
    String name;
    int age;

    // 构造方法,用于创建对象时初始化
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 行为(方法)
    public void study() {
        System.out.println(name + " 正在学习...");
    }
}

// 使用
Student stu = new Student("李四", 20);
stu.study();

封装与访问控制

通过 private 隐藏内部状态,提供公开的 gettersetter 方法保护数据。

public class BankAccount {
    private double balance;     // 外部不可直接访问

    public double getBalance() {
        return balance;
    }

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
}

继承

子类继承父类的属性和方法,实现代码复用。

public class Animal {
    public void eat() {
        System.out.println("动物在吃");
    }
}

public class Dog extends Animal {
    public void bark() {
        System.out.println("汪汪");
    }
}

多态

父类引用指向子类对象,调用重写后的方法表现出不同行为。

Animal myPet = new Dog();
myPet.eat();   // 实际调用 Dog 可能重写的 eat 方法

抽象类与接口

抽象类定义“是什么”,接口定义“能做什么”。实战中常使用接口约束行为。

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    @Override
    public void fly() {
        System.out.println("鸟儿在飞");
    }
}

核心 API 与集合框架

Java 提供了大量现成的工具类,掌握它们能极大提升开发效率。

字符串操作

String 是不可变对象,频繁拼接时使用 StringBuilder

String s1 = "Hello";
String s2 = "World";
String result = s1 + " " + s2;       // 每次拼接产生新对象
StringBuilder sb = new StringBuilder();
sb.append(s1).append(" ").append(s2);
System.out.println(sb.toString());

数组与集合

数组长度固定,适合存储已知数量的同类型元素。集合更灵活,是实战主力。

// 数组
int[] numbers = {1, 2, 3, 4, 5};

// ArrayList - 动态数组
List<String> names = new ArrayList<>();
names.add("王五");
names.add("赵六");
for (String name : names) {
    System.out.println(name);
}

HashMap 键值对存储

通过键快速查找值,是使用频率极高的数据结构。

Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("数学", 95);
scoreMap.put("英语", 88);
int mathScore = scoreMap.get("数学");

迭代器与泛型

泛型让集合在编译期就确定类型,避免运行时转换异常。

List<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

异常处理与程序健壮性

程序运行时难免出错,优雅的异常处理能避免应用崩溃,提升用户体验。

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("数学运算错误: " + e.getMessage());
} finally {
    System.out.println("这里的代码总会执行,通常用于释放资源");
}

自定义异常:当业务需要时,可以创建自己的异常类。

class AgeException extends Exception {
    public AgeException(String msg) {
        super(msg);
    }
}

文件 I/O 与数据持久化

将数据保存到硬盘或从文件读取,是实际应用中不可或缺的能力。

// 写入文本文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))) {
    writer.write("Java 实战文件写入");
} catch (IOException e) {
    e.printStackTrace();
}

// 读取文本文件
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

如今多数项目使用更高级的 NIO 或第三方库,但传统 IO 的理解是基础。

多线程与并发基础

现代应用离不开多线程。Java 通过 Thread 类和 Runnable 接口开启并发执行。

class MyTask implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " 执行中");
    }
}

public class ThreadDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyTask());
        Thread t2 = new Thread(new MyTask());
        t1.start();
        t2.start();
    }
}

安全建议:共享资源访问时务必使用 synchronizedLock 等同步机制,避免数据错乱。初学者可先掌握 synchronized 块的基本用法。

JDBC 数据库连接实战

大部分后端应用需要操作数据库。JDBC 是 Java 连接数据库的标准接口。以 MySQL 为例:

  1. 添加 MySQL 驱动依赖(Maven:mysql-connector-j)。
  2. 建立连接并执行 CRUD。
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";

try (Connection conn = DriverManager.getConnection(url, user, password);
     Statement stmt = conn.createStatement()) {

    // 插入
    stmt.executeUpdate("INSERT INTO students(name,age) VALUES('小明',22)");

    // 查询
    ResultSet rs = stmt.executeQuery("SELECT * FROM students");
    while (rs.next()) {
        System.out.println(rs.getString("name") + " " + rs.getInt("age"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

实战项目:学生管理系统控制台版

现在我们将前面的知识整合,构建一个完整的控制台应用。功能包括:添加学生、查看所有学生、删除学生、退出系统。数据存储在内存的 ArrayList 中。

1. 学生实体类

public class Student {
    private int id;
    private String name;
    private int age;

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Getter & Setter 略
    @Override
    public String toString() {
        return "ID:" + id + " 姓名:" + name + " 年龄:" + age;
    }
}

2. 管理逻辑类

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StudentManager {
    private List<Student> students = new ArrayList<>();
    private Scanner scanner = new Scanner(System.in);

    public void start() {
        while (true) {
            System.out.println("===== 学生管理系统 =====");
            System.out.println("1. 添加学生");
            System.out.println("2. 查看所有学生");
            System.out.println("3. 删除学生");
            System.out.println("4. 退出");
            System.out.print("请选择操作:");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行

            switch (choice) {
                case 1 -> addStudent();
                case 2 -> listStudents();
                case 3 -> deleteStudent();
                case 4 -> {
                    System.out.println("感谢使用,再见!");
                    return;
                }
                default -> System.out.println("无效选项,请重新输入。");
            }
        }
    }

    private void addStudent() {
        System.out.print("输入ID:");
        int id = scanner.nextInt();
        scanner.nextLine();
        System.out.print("输入姓名:");
        String name = scanner.nextLine();
        System.out.print("输入年龄:");
        int age = scanner.nextInt();
        students.add(new Student(id, name, age));
        System.out.println("添加成功!");
    }

    private void listStudents() {
        if (students.isEmpty()) {
            System.out.println("暂无学生信息。");
        } else {
            students.forEach(System.out::println);
        }
    }

    private void deleteStudent() {
        System.out.print("输入要删除的学生ID:");
        int id = scanner.nextInt();
        boolean removed = students.removeIf(s -> s.getId() == id);
        System.out.println(removed ? "删除成功" : "未找到该ID的学生");
    }

    public static void main(String[] args) {
        new StudentManager().start();
    }
}