目录
1.顺序结构
顺序结构也就是按照代码的顺序一行一行执行。
public class Main{
public static void main(String[] args){
System.out.println("123"); //输出123
System.out.println("abc"); //abc
System.out.println("我爱中国");//我爱中国
}
}
2.分支结构
分支结构也称做选择结构
2.1 if语句
语法格式
当布尔表达式结果为真(true)时执行if语句,否则不执行。
在java中if语句的条件必须是一个布尔表达式(true或false),不能是其他类型(比如整数或字符串)。
例如:
if(x>10){ //正确
//do something
}
if(x=10){ //错误:这是赋值操作,不是条件判断
//do something
}
避免多余的if嵌套
//不推荐
if(x > 10){
if(y < 20){
//do something
}
}
//推荐
if(x > 10 && y < 20){
//do something
}
2.2 if-else语句
语法格式
表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3
注意条件的顺序:
(1)条件的顺序会影响程序的逻辑。应该把最可能成立的条件放在前面,或者把范围小的条件放在前面。
//不推荐
if( x > 0){
//do something
}else if( x > 10){ //这个条件永远不会被执行
//do something
}
//推荐
if( x > 10){
//do something
}else if( x >0){
//do something
}
(2)悬垂else问题
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
if - else 语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句). 此时 else 是和最接近的 if 匹配。
2.3 switch语句
语法格式
执行流程:
1. 先计算表达式的值。
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束。
3. 当表达式的值没有与所列项匹配时,执行default。
注意事项
不要忘记break:
如果没有break,程序会继续执行后面的case,直到遇到break或switch结束。这种现象称为“case穿透”。
在case后面不一定要加{ },不加{ }它并不执行一条语句,而是从匹配到case开始执行,直到遇到break或者switch结束。
int x=1;
switch(x){
case 1:
System.out.println("x is 1");
//忘记写break
case 2:
System.out.println("x is 2");//这行也会被执行
break;
}
default不是必须的,但建议加上:
default用于处理未匹配到任何case的情况。虽然不是必须的,但加上可以提高代码的健壮性。
switch(x){
case 1:
System.out.println("x is 1");
break;
default:
System.out.println("x is unknown");//处理未知情况
}
多个case后的常量值不可以重复 switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是float、double、long类型。
引用类型:String常量串、枚举类型。
3. 循环结构
3.1 for循环
语法格式
表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。
表达式2: 循环条件,满则循环继续,否则循环结束 。
表达式3: 循环变量更新方式。
例如:
//计算1-10的和
int sum = 0;
for(int i=1;i <=10;i++){
sum+=i;
}
注意事项
1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句。建议还是加上 { }。
2. 和 if 类似, for 后面的 { 建议和 while 写在同一行。
3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行。
4. 和while循环一样,结束单趟循环用continue,结束整个循环用break。
3.2while循环
语法格式
循环条件为 true, 则执行循环语句; 否则结束循环。
特点:先判断条件,后执行循环体。适合不确定循环次数的情况(如读取用户输入直到有效值)。
可能零次执行:若初始条件不满足,循环体不执行。
例如:
//处理用户输入直到正数
Scanner sc=new Scanner(System.in);
int num;
while((num=sc.nextInt())<=0){
System.out.println("请重新输入正数:");
}
注意事项
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。
2. 和 if 类似, while 后面的 { 建议和 while 写在同一行。
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
3.3 do-while循环
语法格式
特点:先执行一次循环语句,再判断条件。适合至少需执行一次的场景(如菜单显示)。
至少执行一次:即使初始条件不满足。
例如:
//打印1-10
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
注意事项
1. do while 循环最后的分号不要忘记 。
2. 一般 do while 很少用到, 更推荐使用 for 和 while。
3.4 特例:增强型for循环(for - each)
语法格式
用途:简化数组/集合遍历。
限制:无法直接获取索引,不能修改原集合元素(对数组的修改可能影响原数据)。
元素类型:数组或集合中元素的类型(如 int
、String
或自定义对象类型)。
变量名:临时变量,表示当前遍历到的元素。
数组或集合:需要遍历的目标数据结构。
使用示例:
int[] numbers = {1, 2, 3, 4, 5};
// 传统 for 循环
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
// for-each 循环(更简洁)
for (int num : numbers) {
System.out.println(num);
}
注意事项
-
只读遍历:
(1) for-each 循环的变量是只读的,不能直接修改数组或集合的结构(例如删除或添加元素)(2)若需要在遍历时修改集合,应使用传统的for
循环或迭代器(Iterator
)。 -
索引不可见:
(1)for-each 循环隐藏了索引,若需要访问当前元素的索引,需使用传统for
循环。 -
适用对象:
(1)所有实现了Iterable
接口的类(如List
、Set
)以及数组均可使用 for-each。
希望这篇博客能帮助你轻松理解Java的核心基础!如有疑问,欢迎留言讨论。