目录
1. 程序块、循环和分支
1.1 程序块
在 Java 中,程序块(或称复合语句)是用大括号 {}
包围的一组语句。与 C 语言相似,程序块用于将多个语句组合在一起,使其作为一个单一的逻辑单元执行。然而,Java 在变量作用域和隐藏规则上与 C 语言有所不同。
示例:
{
int x = 10;
System.out.println(x);
}
在 Java 中,程序块可以在任何允许语句的地方使用。与 C 语言不同的是,Java 不允许在嵌套的程序块中声明同名变量,这可以避免变量冲突和编译错误。例如:
C 语言示例:
int x = 20;
{
int x = 10; // 合法,x 在内部块中隐藏外部的 x
printf("%d\n", x); // 输出 10
}
printf("%d\n", x); // 输出 20
Java 示例:
int x = 20;
{
int x = 10; // 非法,Java 不允许在嵌套块中声明同名变量
System.out.println(x); // 编译错误
}
System.out.println(x); // 输出 20
Java 的这一限制有助于减少变量作用域的混淆,提高代码的可读性和可维护性。
1.2 循环结构
Java 提供了多种循环结构,主要包括 while
循环、do...while
循环和 for
循环。这些循环结构在语法上与 C 语言相似,但在某些方面有所不同。
1.2.1 while 循环
while
循环的基本语法与 C 语言相同:
while (条件) {
// 循环体
}
在循环体执行之前,条件会被检查,只有当条件为真时,循环体才会执行。
示例:
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1~100的和是:" + sum);
与 C 语言类似,while
循环在 Java 中也常用于需要先检查条件再执行循环体的场景。
1.2.2 do...while 循环
do...while
循环保证循环体至少执行一次,语法如下:
do {
// 循环体
} while (条件);
这与 C 语言的用法一致。
示例:
int number;
do {
System.out.print("请输入一个正数:");
number = scanner.nextInt();
} while (number <= 0);
与 C 语言类似,do...while
循环适用于需要先执行循环体再检查条件的场景。
1.2.3 for 循环
for
循环的语法在 Java 中与 C 语言相似,但 Java 允许使用增强型 for
循环(也称为 foreach 循环),用于遍历数组或集合。
示例:
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
与 C 语言类似,for
循环适用于已知循环次数的场景。
增强型 for 循环(Java 特有):
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
增强型 for
循环在 Java 中简化了数组和集合的遍历操作,这是 Java 相对于 C 语言的一个优势。
1.3 分支结构
Java 的分支结构包括 if
语句和 switch
语句,这些结构在语法上与 C 语言相似,但在功能上有所不同。
1.3.1 if 语句
if
语句用于条件判断,语法与 C 语言相似:
if (条件) {
// 语句
} else {
// 语句
}
Java 还支持多重条件的 else if
结构。
示例:
if (score >= 90) {
System.out.println("A级");
} else if (score >= 80) {
System.out.println("B级");
} else {
System.out.println("C级");
}
与 C 语言类似,if
语句适用于简单的条件判断场景。
1.3.2 switch 语句
switch
语句在 Java 中支持多种数据类型,包括 int
、char
和 String
,使其比 C 语言更为灵活。
示例:
switch (season) {
case "春天":
System.out.println("春暖花开");
break;
case "夏天":
System.out.println("夏日炎炎");
break;
default:
System.out.println("未知季节");
}
与 C 语言不同,Java 的 switch
语句可以处理 String
类型的变量,这是 Java 的一个显著优势。
2. 程序设计中的算法
算法是程序执行任务所采取的步骤。在 Java 中,设计算法时通常使用伪代码来描述逻辑,随后将其转化为 Java 代码。伪代码是一种不依赖于具体编程语言的描述方式,便于理解和交流。
2.1 伪代码与逐步细化
伪代码应清晰地描述算法要完成的任务,而不必过于详细。逐步细化算法是将高层描述逐渐转化为具体实现的过程。
示例:
获取用户输入
计算总和
输出结果
与 C 语言类似,Java 也支持使用伪代码来设计算法,但 Java 的面向对象特性使得算法设计更加灵活和模块化。
3. Java 语言中的异常处理简介
Java 提供了强大的异常处理机制,以便在程序运行期间捕获和处理错误,避免程序崩溃。
3.1 异常的分类
Java 中的异常主要分为检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。
- 检查型异常:编译器会检查是否处理这些异常,常见的有
IOException
、SQLException
等。 - 非检查型异常:通常是程序逻辑错误,如
NullPointerException
,编译器不强制要求处理。
3.2 try-catch 机制
使用 try-catch
语句可以捕获异常并处理它们,保持程序的正常运行。
示例:
try {
int result = 10 / 0; // 可能引发异常
} catch (ArithmeticException e) {
System.out.println("不能除以零!");
}
与 C 语言不同,Java 的异常处理机制更加完善,能够更好地处理程序运行期间的错误。
3.3 throws 和 throw
- throws:用于方法声明,表示该方法可能抛出异常。
- throw:用于主动抛出异常。
示例:
public void myMethod() throws IOException {
throw new IOException("文件未找到");
}
与 C 语言不同,Java 的异常处理机制通过 throws
和 throw
关键字提供了更灵活的错误处理方式。
4. 数组
数组是存储同一类型数据的集合,Java 中的数组与 C 语言中的数组有相似之处,但在某些方面更为灵活。
4.1 数组的声明与创建
在 Java 中,数组的声明与 C 语言类似,但创建数组时使用 new
关键字。
示例:
int[] numbers = new int[5]; // 创建一个包含5个元素的整数数组
与 C 语言不同,Java 的数组是动态的,可以通过 new
关键字动态分配内存。
4.2 数组的初始化
Java 支持静态初始化和动态初始化,静态初始化可以在声明时直接赋值。
示例:
int[] numbers = {1, 2, 3, 4, 5}; // 静态初始化
与 C 语言类似,Java 的数组初始化方式更加灵活,支持多种初始化方法。
4.3 多维数组
Java 中的多维数组是数组的数组,可以用于存储表格数据。
示例:
int[][] matrix = new int[3][3]; // 创建一个3x3的二维数组
与 C 语言类似,Java 的多维数组可以通过嵌套的数组实现,但 Java 的数组更加灵活和动态。
4.4 数组的遍历
可以使用 for
循环或增强型 for
循环遍历数组。
示例:
for (int num : numbers) {
System.out.println(num);
}
与 C 语言不同,Java 的增强型 for
循环简化了数组的遍历操作,使代码更加简洁和易读。