本文目录导读:

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),如果需要某个案例的完整代码或详细设计文档,可以告诉我。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播