由于市面上没有一本绝对权威的“《Java程序设计教程》”,我将根据Java初学者最常遇到的经典题型来组织答案,涵盖变量、数据类型、流程控制、数组、方法、面向对象基础等核心章节,这几乎涵盖了所有入门教材的前8-10章内容。

重要提示:
- 理解重于记忆:请务必理解代码的逻辑和背后的思想,而不是简单地复制粘贴,尝试自己先写一遍,再对照答案进行修正。
- 版本兼容性:以下代码主要基于 Java 8 及以上版本编写,使用了
String.join()、Lambda表达式等现代Java特性,这会让代码更简洁。 - IDE使用:强烈建议使用 IntelliJ IDEA 或 Eclipse 等集成开发环境来编写和调试代码,它们能提供极大的便利。
第一章:Java语言入门与环境搭建
这部分通常不涉及编程题,主要是选择题和填空题。
典型填空题:
- Java程序的源文件扩展名是
.java。 - Java编译器生成的字节码文件扩展名是
.class。 - 编写一个Java应用程序,其主类的入口方法必须是
public static void main(String[] args)。
典型选择题:
-
以下哪个是Java的正确标识符?
(图片来源网络,侵删)- A.
2variable - B.
variable_name - C.
class - D.
@home - 答案:B (标识符必须以字母、下划线
_或美元符开头,不能是数字或关键字)
- A.
-
JVM的作用是什么?
- A. 将Java源代码编译成机器码
- B. 将字节码解释或编译成特定平台的机器码并执行
- C. 提供Java标准类库
- D. 管理内存
- 答案:B (JVM是Java虚拟机,是实现“一次编写,到处运行”的核心)
第二章:基本数据类型与数组
习题1:变量与数据类型
声明一个整型变量 age 并赋值为 25,声明一个双精度浮点型变量 price 并赋值为 99.98,声明一个字符型变量 gender 并赋值为 'F',最后将它们打印出来。
思路:
- 使用
int,double,char关键字声明变量。 - 使用赋值运算符 为变量初始化。
- 使用
System.out.println()方法打印变量。
答案:
public class DataTypeDemo {
public static void main(String[] args) {
// 1. 声明并初始化变量
int age = 25;
double price = 99.98;
char gender = 'F';
// 2. 打印变量
System.out.println("年龄: " + age);
System.out.println("价格: " + price);
System.out.println("性别: " + gender);
}
}
习题2:数组基础
创建一个包含5个元素的整型数组,用循环为每个元素赋值为其索引的平方(索引0的元素为0,索引1的元素为1,以此类推),然后打印数组中的所有元素。
思路:
- 声明并初始化一个长度为5的整型数组
int[] numbers = new int[5];。 - 使用
for循环遍历数组,从索引0到4。 - 在循环体内,通过
numbers[i] = i * i;来赋值。 - 再使用一个
for循环或for-each循环来打印数组内容。
答案:
public class ArrayDemo {
public static void main(String[] args) {
// 1. 创建一个长度为5的整型数组
int[] numbers = new int[5];
// 2. 使用for循环为数组元素赋值
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i * i;
}
// 3. 打印数组元素
System.out.print("数组元素为: ");
for (int num : numbers) { // 使用for-each循环更简洁
System.out.print(num + " ");
}
System.out.println(); // 换行
}
}
输出:
数组元素为: 0 1 4 9 16
第三章:流程控制语句
习题3:if-else 判断
从控制台读取一个整数,判断它是正数、负数还是零,并打印相应的信息。
思路:
- 使用
Scanner类从System.in读取用户输入。 - 使用
if-else if-else结构进行多条件判断。 if (num > 0)判断是否为正数。else if (num < 0)判断是否为负数。else处理等于零的情况。
答案:
import java.util.Scanner; // 需要导入Scanner类
public class IfElseDemo {
public static void main(String[] args) {
// 1. 创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 2. 提示用户输入
System.out.print("请输入一个整数: ");
int num = scanner.nextInt();
// 3. 使用if-else进行判断
if (num > 0) {
System.out.println(num + " 是一个正数。");
} else if (num < 0) {
System.out.println(num + " 是一个负数。");
} else {
System.out.println("您输入的是零。");
}
// 4. 关闭Scanner,释放资源
scanner.close();
}
}
习题4:for 循环
打印出1到100之间所有能被7整除的整数。
思路:
- 使用一个
for循环,让变量i从1遍历到100。 - 在循环体内,使用
if语句和取模运算符 判断i % 7 == 0是否成立。 - 如果成立,则打印
i。
答案:
public class ForLoopDemo {
public static void main(String[] args) {
System.out.println("1到100之间能被7整除的整数有:");
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
System.out.print(i + " ");
}
}
System.out.println(); // 换行
}
}
输出:
1到100之间能被7整除的整数有:
7 14 21 28 35 42 49 56 63 70 77 84 91 98
习题5:while 循环与break
使用 while 循环计算1到10的和,当和超过30时,停止计算并打印当前的和。
思路:
- 初始化一个变量
sum为0,一个变量i为1。 - 使用
while (i <= 10)作为循环条件。 - 在循环体内,将
i加到sum上。 - 立即判断
if (sum > 30),如果满足,则用break;退出循环。 i++增加计数器。- 循环结束后,打印
sum。
答案:
public class WhileLoopDemo {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i <= 10) {
sum += i; // sum = sum + i;
// 检查是否超过30
if (sum > 30) {
System.out.println("和已超过30,停止计算。");
break; // 退出循环
}
i++;
}
System.out.println("最终的和为: " + sum);
}
}
输出:
和已超过30,停止计算。
最终的和为: 55
(注:当i=7时,sum=28;i=8时,sum=36,此时触发break)
第四章:方法
习题6:定义和调用方法
- 定义一个方法
isEven(int number),用于判断一个整数是否为偶数,如果是则返回true,否则返回false。 - 在
main方法中,调用此方法判断数字10和7,并打印结果。
思路:
- 方法定义:
public static是修饰符,boolean是返回值类型,isEven是方法名,(int number)是参数列表。 - 方法体:使用
return number % 2 == 0;,因为 比较的结果本身就是boolean值。 - 在
main方法中,直接调用isEven(10)和isEven(7),并用System.out.println打印返回值。
答案:
public class MethodDemo {
// 1. 定义一个判断偶数的方法
public static boolean isEven(int number) {
// 如果number对2取余为0,则是偶数,返回true;否则返回false
return number % 2 == 0;
}
public static void main(String[] args) {
int num1 = 10;
int num2 = 7;
// 2. 调用方法并打印结果
System.out.println(num1 + " 是偶数吗? " + isEven(num1)); // true
System.out.println(num2 + " 是偶数吗? " + isEven(num2)); // false
}
}
习题7:方法重载
创建一个名为 max 的方法,实现功能重载。
max(int a, int b):返回两个整数中的较大者。max(double a, double b):返回两个双精度浮点数中的较大者。- 在
main方法中分别调用这两个方法。
思路:
- 方法重载的核心是:方法名相同,但参数列表不同(参数个数、类型或顺序不同)。
- 分别定义两个
max方法,它们的参数列表一个接收int,一个接收double。 - 使用三元运算符
(a > b) ? a : b来返回较大值,这是一种非常简洁的写法。 - 在
main中调用时,Java会根据你传入的参数类型自动匹配到对应的方法。
答案:
public class MethodOverloadingDemo {
// 重载方法1:比较两个整数
public static int max(int a, int b) {
return (a > b) ? a : b;
}
// 重载方法2:比较两个双精度浮点数
public static double max(double a, double b) {
return (a > b) ? a : b;
}
public static void main(String[] args) {
int int1 = 10, int2 = 20;
double double1 = 10.5, double2 = 9.8;
int maxInt = max(int1, int2);
double maxDouble = max(double1, double2);
System.out.println("两个整数 " + int1 + " 和 " + int2 + " 的最大值是: " + maxInt);
System.out.println("两个小数 " + double1 + " 和 " + double2 + " 的最大值是: " + maxDouble);
}
}
输出:
两个整数 10 和 20 的最大值是: 20
两个小数 10.5 和 9.8 的最大值是: 10.5
第五章:面向对象基础 (OOP)
习题8:创建和使用类
- 创建一个
Student类,包含以下属性:name(String)age(int)score(double)
- 为
Student类提供一个构造方法,用于初始化所有属性。 - 在
Student类中定义一个方法displayInfo(),用于打印学生的信息。 - 在
main方法中创建Student类的实例(对象),并调用其方法。
思路:
- 类:
Student是一个模板。 - 属性:在类中声明变量,通常使用
private修饰符,实现封装。 - 构造方法:方法名与类名相同,没有返回值,用于创建对象时初始化属性。
- 方法:
displayInfo()是对象的行为。 - 对象:在
main方法中,使用new Student(...)来创建具体的实例。
答案:
public class Student {
// 1. 属性 (成员变量)
private String name;
private int age;
private double score;
// 2. 构造方法
public Student(String name, int age, double score) {
this.name = name; // this.name 指的是对象的属性,name 指的是传入的参数
this.age = age;
this.score = score;
}
// 3. 显示信息的方法
public void displayInfo() {
System.out.println("学生姓名: " + this.name);
System.out.println("学生年龄: " + this.age);
System.out.println("学生成绩: " + this.score);
}
// (可选) 为每个属性提供getter和setter方法,这是良好的封装实践
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// ... 其他getter和setter省略
}
// TestStudent.java (包含main方法的测试类)
public class TestStudent {
public static void main(String[] args) {
// 4. 创建Student类的对象
Student student1 = new Student("张三", 20, 92.5);
// 5. 调用对象的方法
System.out.println("--- 学生信息 ---");
student1.displayInfo();
// 可以修改对象的状态(通过setter方法)
student1.setAge(21);
System.out.println("\n--- 一年后 ---");
student1.displayInfo();
}
}
输出:
--- 学生信息 ---
学生姓名: 张三
学生年龄: 20
学生成绩: 92.5
--- 一年后 ---
学生姓名: 张三
学生年龄: 21
学生成绩: 92.5
总结与进阶
覆盖了Java入门阶段最核心的知识点,学习编程最好的方式就是多动手实践。
- 变式练习:尝试修改题目,将判断偶数的方法改成判断素数;将学生类增加一个
study()方法。 - 查阅官方文档:遇到不确定的类或方法(如
Scanner,System.out.println),可以去 Oracle Java 官方文档 查询,这是最权威的资料。 - 调试代码:学会使用IDE的调试功能,可以单步执行代码,观察变量的变化,这对于理解程序流程至关重要。
希望这份详细的答案和解析对你的学习有帮助!祝你学习顺利!
