Java基础:Java流程控制
文章目录
- 一、代码块
- 1.1代码块的作用域
- 1.2代码块的分类
- 1.3构造方法与代码块的执行顺序
- 二、流程控制
- 2.1顺序结构
- 2.2分支结构
- 2.3循环结构
- 三、中断控制流程语句
- 3.1return语句
- 3.2break关键字
- 3.3continue语句
一、代码块
1.1代码块的作用域
块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。
块确定了变量的作用域。
一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。
有名字的代码块—— if-else 代码块,for 循环代码块,main 方法代码块。代码块也叫体,比如 for 循环体,main 方法体。
1.2代码块的分类
根据代码块位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块和同步代码块:
- 局部代码块: 类中方法的方法体,局部代码块是定义在方法或语句中,方法和类都是以代码块的方式划定边界的;
构造代码块: 定义在类中成员位置,方法之外的代码块,构造代码块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。
特点:
①优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作;
②每创建一个对象均会执行一次构造代码块;静态代码块: 用static{}包裹起来的代码片段,只会执行一次,静态代码块优先于构造块执行。
特点:
①静态代码块是定义在成员位置,方法之外,使用static修饰的代码块;
②它优先于主方法执行、优先于构造代码块执行,在类加载时执行;
③该类不管创建多少对象,静态代码块只执行一次;
④可用于给静态变量赋值,用来给类进行初始化;同步代码块: 当线程开始执行同步代码块前,必须先获得对同步代码块的锁定,并且任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。
特点:
①使用synchronized(){}包裹起来的代码块;
②在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性;
③同步代码块需要写在方法中。
1.3构造方法与代码块的执行顺序
父类B静态代码块 > 子类A静态代码块 > 父类B非静态代码块 > 父类B构造函数 > 子类A非静态代码块 > 子类A构造函数
二、流程控制
2.1顺序结构
按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
//顺序输出:123
public class DemoTest {
public static void main(String[] args) {
System.out.print(1);
System.out.print(2);
System.out.print(3);
}
}
2.2分支结构
有if…else和switch-case两种分支语句。
if…else语句:
public class DemoTest {
public static void main(String[] args) {
int a = 10;
int b = 10;
if(a == b){
System.out.println("a 等于 b");
}else{
System.out.println("a 不等于 b");
}
}
}
switch-case语句:
public class DemoTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("只能输入1,2,3:");
int a = sc.nextInt();
//case 标签可以是:① 类型为char、byte、short 或 int 的常量表达式。②枚举常量。③从 Java SE 7 开始,case 标签还可以是字符串字面量。
switch(a){
case 1:
System.out.println("one");
break;//如果没有break会依次执行下面case块。
case 2:
System.out.println("two");
break;//如果没有break会依次执行下面case块。
case 3:
System.out.println("three");
break;//如果没有break会依次执行下面case块。
default:
System.out.println("输入错误,请重新输入");
}
}
}
2.3循环结构
java提供三种循环: while、do…while、for 。 另外 Java 5 之后推出了 for-each 循环语句,for-each 循环是 for 循环的变形,它是专门为集合遍历而设计的。for-each 并不是一个关键字。
while语句: 先判断 条件,再选择是否执行循环体。
public class DemoTest {
public static void main(String[] args) {
int i = 1;
int n = 1;
while(i <= 10) {
n=n*i;
i++;
}
System.out.println("10的阶乘结果为:"+n);//10 阶乘结果是:3628800
}
}
do…while语句: 先执行循环体,然后判断循环条件是否成立。
public class DemoTest {
public static void main(String[] args) {
int number = 1,result = 1;
do {
result*=number;
number++;
}while(number <= 10);
System.out.print("10阶乘结果是:"+result);//10 阶乘结果是:3628800
}
}
for语句:
表达式 | 形式 | 功能 | 举例 |
---|---|---|---|
条件表达式 1 | 赋值语句 | 循环结构的初始部分,为循环变量赋初值 | int i=1 |
条件表达式 2 | 条件语句 | 循环结构的循环条件 | i>40 |
条件表达式 3 | 迭代语句,通常使用 ++ 或 – 运算符 | 循环结构的迭代部分,通常用来修改循环 变量的值 | i++ |
public class DemoTest {
public static void main(String[] args) {
int result = 1;
for (int number = 1; number <= 5; number++) {
result *= number;
}
System.out.print("5 的阶乘结果是:" + result); // 5的阶乘结果是:120
}
}
public class DemoTest {
public static void main(String[] args) {
System.out.println("乘法口诀表:");
// 外层循环
for (int i = 1; i <= 9; i++) {
// 内层循环
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + j * i + "\t");
}
System.out.println();//换行
}
}
}
foreach语句:
语法格式
for(类型 变量名:集合) {
语句块;
}
例如:
public class DemoTest {
public static void main(String[] args) {
// 声明并初始化int数组
int[] numbers = {
43, 32, 53, 54, 75, 7, 10 };
System.out.println("----for each----");
// for-each语句
for (int item : numbers) {
System.out.println("Count is:" + item);
}
}
}
三、中断控制流程语句
3.1return语句
return
关键字并不是专门用于结束循环的,return
语句用于终止函数的执行或退出类的方法,并把控制权返回该方法的调用者。
如果这个方法带有返回类型,return 语句就必须返回这个类型的值;如果这个方法没有返回值,可以使用没有表达式的 return 语句。
3.2break关键字
break
用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到 break
,系统将完全结束该循环,开始执行循环之后的代码。
3.3continue语句
continue
并不是中断循环语句,而是中止当前迭代的循环,进入下一次的迭代
continue 语句只能用在 while 语句、for 语句或者 foreach 语句的循环体之中,在这之外的任何地方使用它都会引起语法错误。
还没有评论,来说两句吧...