本文目录导读:

Java课程案例通常覆盖基础语法、面向对象、常用API、集合框架、IO流、多线程、网络编程以及JDBC等核心模块,下面我为你整理了几个经典的、由浅入深的课程案例,附带核心代码思路。
第一阶段:基础语法与逻辑
案例1:学生成绩管理系统(控制台版)
目标:练习数组、循环、条件判断和方法封装。 功能:
- 输入学生人数和成绩
- 计算总分、平均分、最高分、最低分
- 统计不及格人数及名单
核心代码片段:
public class ScoreManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入学生人数: ");
int n = sc.nextInt();
int[] scores = new int[n];
String[] names = new String[n];
// 输入数据
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i+1) + "个学生姓名: ");
names[i] = sc.next();
System.out.print("请输入" + names[i] + "的成绩: ");
scores[i] = sc.nextInt();
}
// 计算统计量
int sum = 0, max = scores[0], min = scores[0];
int failCount = 0;
for (int i = 0; i < n; i++) {
sum += scores[i];
if (scores[i] > max) max = scores[i];
if (scores[i] < min) min = scores[i];
if (scores[i] < 60) {
failCount++;
System.out.println("不及格: " + names[i] + " -> " + scores[i]);
}
}
System.out.println("平均分: " + (double)sum/n + ", 最高分: " + max + ", 最低分: " + min);
}
}
第二阶段:面向对象编程
案例2:银行账户管理系统
目标:练习类、对象、封装、继承、多态。 核心类设计:
// 1. 抽象基类 Account
abstract class Account {
private String accountNumber;
private double balance;
public Account(String accountNumber, double initialBalance) {
this.accountNumber = accountNumber;
this.balance = initialBalance;
}
// 公共方法
public void deposit(double amount) {
balance += amount;
}
public abstract boolean withdraw(double amount); // 子类重写
// getters/setters...
}
// 2. 子类:储蓄账户 (不能透支)
class SavingsAccount extends Account {
public SavingsAccount(String number, double balance) {
super(number, balance);
}
@Override
public boolean withdraw(double amount) {
if (amount <= getBalance()) {
setBalance(getBalance() - amount);
return true;
}
System.out.println("余额不足");
return false;
}
}
// 3. 子类:信用卡账户 (可透支,有信用额度)
class CreditAccount extends Account {
private double creditLimit; // 信用额度
public CreditAccount(String number, double balance, double creditLimit) {
super(number, balance);
this.creditLimit = creditLimit;
}
@Override
public boolean withdraw(double amount) {
if (amount <= getBalance() + creditLimit) {
setBalance(getBalance() - amount);
return true;
}
System.out.println("超出信用额度");
return false;
}
}
扩展思考:增加转账、利息计算、交易记录日志等功能。
第三阶段:集合与泛型
案例3:图书管理系统(使用集合框架)
目标:熟练使用ArrayList、HashMap、HashSet、Stream API。 功能:
- 添加/删除/查找图书
- 按分类统计图书数量
- 按价格区间筛选
class Book {
String isbn, title, category;
double price;
// constructor, getters, equals & hashCode (基于isbn)
}
class Library {
private Map<String, Book> bookMap = new HashMap<>(); // isbn -> Book
public void addBook(Book book) {
bookMap.put(book.getIsbn(), book);
}
public Book findByIsbn(String isbn) { return bookMap.get(isbn); }
// 按分类统计 (Stream API)
public Map<String, Long> countByCategory() {
return bookMap.values().stream()
.collect(Collectors.groupingBy(Book::getCategory, Collectors.counting()));
}
// 筛选价格大于等于80元的图书
public List<Book> filterByPrice(double minPrice) {
return bookMap.values().stream()
.filter(b -> b.getPrice() >= minPrice)
.collect(Collectors.toList());
}
}
第四阶段:高级特性
案例4:多线程模拟——火车站售票系统
目标:练习线程安全、同步锁、线程池。 核心问题:多窗口售票,避免超卖。
public class TicketSystem {
private int totalTickets = 100;
// 同步方法保证原子性
public synchronized boolean sellTicket(String windowName) {
if (totalTickets > 0) {
totalTickets--;
System.out.println(windowName + " 售出1张,余票: " + totalTickets);
return true;
}
System.out.println(windowName + " 票已售罄");
return false;
}
// 使用线程池模拟多个窗口
public static void main(String[] args) {
TicketSystem system = new TicketSystem();
ExecutorService pool = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
pool.submit(() -> {
while (system.totalTickets > 0) {
system.sellTicket(Thread.currentThread().getName());
try { Thread.sleep(50); } catch (InterruptedException e) {}
}
});
}
pool.shutdown();
}
}
案例5:简易聊天室(Socket + 多线程)
目标:网络编程基础,理解客户端/服务器模型。 Server端核心:
public class ChatServer {
private static Set<PrintWriter> clients = new CopyOnWriteArraySet<>();
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动...");
while (true) {
Socket socket = serverSocket.accept();
new Thread(new ClientHandler(socket)).start();
}
}
static class ClientHandler implements Runnable {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
public ClientHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
clients.add(out);
String message;
while ((message = in.readLine()) != null) {
// 转发给所有客户端
for (PrintWriter writer : clients) {
writer.println("用户说: " + message);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
clients.remove(out);
try { socket.close(); } catch (IOException e) {}
}
}
}
}
第五阶段:数据库与项目实战
案例6:员工信息管理系统(JDBC + 数据库)
目标:连接MySQL,实现增删改查,使用PreparedStatement防止SQL注入。
public class EmployeeDAO {
private Connection getConnection() throws SQLException {
String url = "jdbc:mysql://localhost:3306/company?useSSL=false";
return DriverManager.getConnection(url, "root", "password");
}
// 添加员工
public void addEmployee(Employee emp) {
String sql = "INSERT INTO employees (name, department, salary) VALUES (?, ?, ?)";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, emp.getName());
pstmt.setString(2, emp.getDepartment());
pstmt.setDouble(3, emp.getSalary());
pstmt.executeUpdate();
} catch (SQLException e) { e.printStackTrace(); }
}
// 查询所有 (结果集转换为对象)
public List<Employee> queryAll() {
List<Employee> list = new ArrayList<>();
String sql = "SELECT * FROM employees";
try (Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
Employee emp = new Employee();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setDepartment(rs.getString("department"));
emp.setSalary(rs.getDouble("salary"));
list.add(emp);
}
} catch (SQLException e) { e.printStackTrace(); }
return list;
}
}
如何选择合适的案例
- 初学者:从「学生成绩管理」和「银行账户」案例入手。
- 进阶学习:重点练习「图书管理系统」的集合操作和「多线程售票」的并发控制。
- 综合项目:推荐完成「聊天室 + JDBC 员工管理」,这是将网络、多线程、数据库融合的经典练习。
这些案例足够覆盖大学Java课程的核心知识点,你可以根据当前学习进度,从最简单的控制台程序逐步扩展到图形界面或Web应用(Spring Boot),如果需要某个案例的完整代码或详细设计文档,可以告诉我。