第一部分:基础语法
练习 1:Hello World 与基本变量**
编写一个 Java 程序,实现以下功能:

- 定义两个整型变量
a和b,并分别赋值为 10 和 20。 - 定义一个双精度浮点型变量
sum,用于存储a和b的和。 - 计算和并赋值给
sum。 - 使用
System.out.println输出 "a + b = " 以及sum的值。
提示:
- 基本数据类型:
int,double。 - 变量声明和赋值。
- 字符串连接可以使用 。
参考答案:
public class BasicVariables {
public static void main(String[] args) {
// 1. 定义并赋值
int a = 10;
int b = 20;
// 2. 定义 sum 变量
double sum;
// 3. 计算和
sum = a + b;
// 4. 输出结果
System.out.println("a + b = " + sum);
}
}
输出:
a + b = 30.0
练习 2:用户交互与流程控制**
编写一个程序,要求用户从键盘输入一个整数,然后判断该数是奇数还是偶数,并输出结果。

提示:
- 使用
Scanner类来获取用户输入。 - 判断奇偶数可以使用取模运算符 。
number % 2 == 0,则为偶数,否则为奇数。 - 需要处理
InputMismatchException异常,以防用户输入的不是整数。
参考答案:
import java.util.InputMismatchException;
import java.util.Scanner;
public class OddOrEven {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
try {
int number = scanner.nextInt();
if (number % 2 == 0) {
System.out.println(number + " 是一个偶数。");
} else {
System.out.println(number + " 是一个奇数。");
}
} catch (InputMismatchException e) {
System.out.println("输入错误:请输入一个有效的整数。");
} finally {
scanner.close(); // 关闭 Scanner,防止资源泄漏
}
}
}
示例运行 1:
请输入一个整数: 42
42 是一个偶数。
示例运行 2:

请输入一个整数: 17
17 是一个奇数。
练习 3:循环结构**
打印出 1 到 100 之间所有能被 7 整除但不能被 5 整除的整数,每行打印 5 个数字。
提示:
- 使用
for循环遍历 1 到 100。 - 在循环体内使用
if条件语句进行判断:i % 7 == 0 && i % 5 != 0。 - 使用一个计数器来控制每行打印的数字数量。
参考答案:
public class DivisibleBy7Not5 {
public static void main(String[] args) {
int count = 0; // 用于计数,每行打印5个
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0 && i % 5 != 0) {
System.out.print(i + "\t"); // 使用制表符对齐
count++;
// 每打印5个数字就换行
if (count % 5 == 0) {
System.out.println();
}
}
}
// 如果最后一行不满5个,也需要换行
if (count % 5 != 0) {
System.out.println();
}
}
}
输出:
7 14 21 28 49
56 63 77 84 91
98
第二部分:面向对象编程
练习 4:创建简单的类**
设计一个 Student 类,包含以下属性和方法:
- 属性:
name(姓名),age(年龄),studentId(学号)。 - 方法:
- 一个构造方法,用于初始化所有属性。
study()方法,打印出[姓名] 正在学习 Java。。displayInfo()方法,打印出学生的所有信息。
提示:
- 类的定义使用
class关键字。 - 属性通常是
private的,以实现封装。 - 构造方法与类名相同,没有返回值。
- 访问私有属性需要通过
public的getter和setter方法(本练习为了简化,可以直接在构造方法中初始化,displayInfo直接访问)。
参考答案:
public class Student {
// 私有属性
private String name;
private int age;
private String studentId;
// 构造方法
public Student(String name, int age, String studentId) {
this.name = name;
this.age = age;
this.studentId = studentId;
}
// study 方法
public void study() {
System.out.println(this.name + " 正在学习 Java。");
}
// displayInfo 方法
public void displayInfo() {
System.out.println("学生信息:");
System.out.println(" 姓名: " + this.name);
System.out.println(" 年龄: " + this.age);
System.out.println(" 学号: " + this.studentId);
}
// Getter 和 Setter (良好的实践)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// ... 其他 getter 和 setter
}
练习 5:使用类**
创建一个 Main 类,在 main 方法中:
- 创建两个
Student类的对象。 - 分别调用它们的
displayInfo()和study()方法。
提示:
- 使用
new关键字创建对象。 - 通过
对象名.方法名()来调用方法。
参考答案:
public class Main {
public static void main(String[] args) {
// 创建第一个学生对象
Student student1 = new Student("张三", 20, "2025001");
// 创建第二个学生对象
Student student2 = new Student("李四", 21, "2025002");
// 调用 student1 的方法
System.out.println("--- 学生 1 ---");
student1.displayInfo();
student1.study();
System.out.println(); // 空行分隔
// 调用 student2 的方法
System.out.println("--- 学生 2 ---");
student2.displayInfo();
student2.study();
}
}
输出:
--- 学生 1 ---
学生信息:
姓名: 张三
年龄: 20
学号: 2025001
张三 正在学习 Java。
--- 学生 2 ---
学生信息:
姓名: 李四
年龄: 21
学号: 2025002
李四 正在学习 Java。
第三部分:常用 API 与进阶特性
练习 6:字符串处理**
编写一个程序,接收用户输入的一个字符串,
- 计算并输出字符串的长度。
- 将字符串转换为大写并输出。
- 检查字符串是否以 "Java" 开头,并输出结果。
- 使用
StringBuilder将字符串反转并输出。
提示:
String类的常用方法:length(),toUpperCase(),startsWith()。StringBuilder类的reverse()方法。
参考答案:
import java.util.Scanner;
public class StringManipulation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串: ");
String input = scanner.nextLine();
scanner.close();
// 1. 计算长度
System.out.println("字符串长度: " + input.length());
// 2. 转换为大写
System.out.println("大写形式: " + input.toUpperCase());
// 3. 检查开头
if (input.startsWith("Java")) {
System.out.println("字符串以 'Java' 开头。");
} else {
System.out.println("字符串不以 'Java' 开头。");
}
// 4. 反转字符串
StringBuilder sb = new StringBuilder(input);
String reversed = sb.reverse().toString();
System.out.println("反转后的字符串: " + reversed);
}
}
示例运行:
请输入一个字符串: Java is fun
字符串长度: 11
大写形式: JAVA IS FUN
字符串以 'Java' 开头。
反转后的字符串: nuf si avaJ
练习 7:异常处理**
模拟一个简单的银行账户取款操作,账户初始余额为 1000 元。
- 定义一个
InsufficientFundsException(自定义异常),当取款金额大于余额时抛出。 - 编写一个
BankAccount类,包含balance属性和一个withdraw(double amount)方法。 - 在
withdraw方法中,检查取款金额,如果金额无效(负数)或余额不足,则抛出相应的异常。 - 在
main方法中,创建BankAccount对象,并尝试进行几次取款操作,使用try-catch块来捕获并处理可能发生的异常。
提示:
- 自定义异常需要继承
Exception类。 throw new InsufficientFundsException("错误信息")。try-catch-finally结构。
参考答案:
// 1. 自定义异常
class InsufficientFundsException extends Exception {
public InsufficientFundsException(String message) {
super(message);
}
}
// 2. BankAccount 类
class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public void withdraw(double amount) throws InsufficientFundsException {
if (amount < 0) {
throw new IllegalArgumentException("取款金额不能为负数。");
}
if (amount > balance) {
throw new InsufficientFundsException("余额不足,当前余额: " + balance + ", 尝试取款: " + amount);
}
balance -= amount;
System.out.println("取款成功,当前余额: " + balance);
}
public double getBalance() {
return balance;
}
}
// 3. Main 类
public class BankSimulation {
public static void main(String[] args) {
BankAccount account = new BankAccount(1000);
try {
System.out.println("--- 尝试取款 500 ---");
account.withdraw(500);
System.out.println("\n--- 尝试取款 600 ---");
account.withdraw(600); // 这行会抛出异常
} catch (InsufficientFundsException e) {
System.err.println("取款失败: " + e.getMessage());
} catch (IllegalArgumentException e) {
System.err.println("取款失败: " + e.getMessage());
}
System.out.println("\n最终账户余额: " + account.getBalance());
}
}
输出:
--- 尝试取款 500 ---
取款成功,当前余额: 500.0
--- 尝试取款 600 ---
取款失败: 余额不足,当前余额: 500.0, 尝试取款: 600.0
最终账户余额: 500.0
练习 8:文件 I/O**
编写一个程序,将练习 6 中用户输入的字符串写入到一个名为 output.txt 的文件中,如果文件已存在,则覆盖其内容。
提示:
- 使用
java.nio.file包中的Files和Paths类,这是现代 Java 推荐的方式。 Files.write(Paths.get("output.txt"), content.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
参考答案:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
public class FileWriteExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要写入文件的字符串: ");
String content = scanner.nextLine();
scanner.close();
Path path = Paths.get("output.txt");
try {
// 写入文件
// StandardOpenOption.CREATE: 如果文件不存在则创建
// StandardOpenOption.TRUNCATE_EXISTING: 如果文件存在,则截断(清空)它
Files.write(path, content.getBytes());
System.out.println("内容已成功写入 output.txt");
} catch (IOException e) {
System.err.println("写入文件时发生错误: " + e.getMessage());
}
}
}
运行后:
程序会在项目根目录下创建(或覆盖)一个 output.txt 文件,文件内容为你输入的字符串。
