202106小白训练营day04-java程序结构分支循环异常
Posted 长安紫薯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了202106小白训练营day04-java程序结构分支循环异常相关的知识,希望对你有一定的参考价值。
程序结构
程序
代码code,
早期程序定义 = 数据结构+算法(关注java语言自身特性)
新的程序定义 = 数据结构+算法+框架(SSM)+架构(nginx+redis+mycat+docker…)
学习培优课程的重点,框架+架构
程序结构
1)顺序结构:从上到下,从左到右,所有的代码都执行
2)分支结构(判断):部分的代码执行,部分的代码不执行(三目),
a. 单分支 if、else
b. 多分支 else-if、switch-case-default-break
3)循环结构:反复执行一段代码
a. for
b. while
c. do-while
4)异常结构:假如有一段代码可能发生异常,如果异常就抛出异常,如果不异常就正确执行
a. try{}
b. catch{}
c. finally{}
d. throw
e. throws
分支 if、swtich
if判断,支持类型:byte、short、int、long、char、String
if、if-else、else-if
package cn.tedu.flow;
import org.junit.Test;
//if分支判断语言
public class TestIf {
@Test
public void testIf() {
// 奇偶数判断
int n = 10;
if (n % 2 == 1) { // 条件,括号内结果是布尔值
System.out.println("奇数");
} else {
System.out.println("偶数");
}
// if后面没有括号只执行紧跟着的一句,有括号多条语句
boolean isRainning = false;
if (isRainning)
System.out.println("打伞");
if (isRainning) {
System.out.println("打伞");
System.out.println("穿雨鞋");
}
}
@Test // 判断电话110,114,119,120
public void elseIf() {
int phone = 136;
if (phone == 110) {
System.out.println("警察");
} else if (phone == 114) {
System.out.println("查号");
} else if (phone == 119) {
System.out.println("火警");
} else if (phone == 120) {
System.out.println("医院");
} else {
System.out.println("电话号码错误");
}
}
}
package cn.tedu.flow;
import org.junit.Test;
//多分支,语法结构和else-if,实现同样功能
public class TestSwitch {
@Test //switch一旦有一个条件成立,后面的条件都不判断
public void phone() {
//判断电话:110,114,119,120
char phone = 110;
//switch不支持long
//Cannot switch on a value of type long. Only convertible int values,
//strings or enum 枚举 variables are permitted
switch(phone) {
case 110: //判断条件phone==110
System.out.println("警察");
break; //跳出switch
case 114:
System.out.println("查号");
break;
case 119:
System.out.println("火警");
break;
case 120:
System.out.println("医院");
break;
default :
System.out.println("电话号码错误");
break; //加不加都可以
}
}
}
分支特点,每个分支互斥,一旦选择一个分支,其他分支不会执行
循环,反复执行
for/while/do-while
for循环,99乘法表
package cn.tedu.flow;
import org.junit.Test;
//三种循环
public class TestLoop {
//for循环中一条代码中3个部分,3条语句
@Test
public void forLoop() {
//格式:for(第一句-初始化; 第二句-判断; 第四句-改变变量的值){ 第三句 }
//判断条件,成立true,执行for循环体内代码,不成立false,结束for循环
for(int i=0; i<10; i++) { //for循环体
System.out.print(i);
}
}
//局部变量跟随方法,方法结束,这个变量就被java干掉
@Test //双重循环,嵌套循环
public void for2Loop() {
//代码块中定义变量,当代码块结束,它就被java干掉
// for(int i=1; i<10; i++) {
// System.out.print(i);
// }
// System.out.println();
// for(int i=1; i<10; i++) {
// System.out.print(i);
// }
//第一层循环,外循环
for(int i=1; i<10; i++) {
//第二层循环,内循环,换名:jkmn
//i控制每次输出几个,从i计算会多一个,i+1控制起始值1
for(int j=1; j<i+1; j++) {
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}
}
}
while和do循环
@Test
public void whileLoop() {
// for(int i=1; i<10; i++){ ... }
int i = 1;
while (i < 10) {
System.out.println(i);
i++;
}
}
@Test // while先判断,do后判断
public void doLoop() {
int i = 1;
do {
System.out.println(i);
i++;
} while (i < 10);
}
死循环
package cn.tedu.flow;
import org.junit.Test;
//Java提供两种经典死循环的写法
public class TestDeadLoop {
@Test
public void forDeadLoop() {
for(;;) {
System.out.println("for死循环");
}
}
@Test
public void whileDeadLoop() {
while(true) {
System.out.println("while死循环");
}
}
}
退出循环的三种方式
package cn.tedu.flow;
import org.junit.Test;
//退出循环,3种方式:
/*
* break跳出,在循环体内执行break语句,就直接结束while循环
* continue跳过,跳过continue后的代码,直接去while判断
* return返回
*/
public class TestExitLoop {
@Test
public void exit() {
int i = 0;
while (i < 6) {
i++;
if (i == 3) {
// break;
// continue;
return;
}
System.out.println(i);
}
// return; //结束了方法 Unreachable code
System.out.println("执行完成");
}
}
ATM案例
package cn.tedu.flow;
import java.util.Scanner;
import org.junit.Test;
/*
* 业务需求:
* 输入1:查询
* 输入2:取款
* 输入3:存款
* 输入4:退出(退出程序)
*/
public class ATM {
@Test
public void atm() {
// 人工输入:等待键盘输入api,Scanner,阻塞,程序不会继续执行,等人从键盘输入后回车
// Scanner对象,先创建实例,new
// 键盘:System.in 输入设备
Scanner scan = new Scanner(System.in);
// 怎么获取键盘输入内容,通过.操作符获取对应值
// scan.nextLine() 它得到结果是一个一行数据,字符串类型
// scan.nextInt(); //把键盘输入字符串转换成整型
while (true) {
System.out.println("请输入你的指令:");
int num = scan.nextInt(); // 回车后才能得到
// 死循环
switch (num) {
case 1:
System.out.println("查询");
break;
case 2:
System.out.println("取款");
break;
case 3:
System.out.println("存款");
break;
case 4:
return;
}
}
}
}
完善ATM
package cn.tedu.flow;
import java.util.Scanner;
import org.junit.Test;
/*
* 业务需求:
* 输入1:查询
* 输入2:取款
* 输入3:存款
* 输入4:退出(退出程序)
*/
public class ATM {
@Test
public void atm() {
// 人工输入:等待键盘输入api,Scanner,阻塞,程序不会继续执行,等人从键盘输入后回车
// Scanner对象,先创建实例,new
// 键盘:System.in 输入设备
Scanner scan = new Scanner(System.in);
// 怎么获取键盘输入内容,通过.操作符获取对应值
// scan.nextLine() 它得到结果是一个一行数据,字符串类型
// scan.nextInt(); //把键盘输入字符串转换成整型
while (true) {
try {
System.out.println("请输入你的指令:");
int num = scan.nextInt(); // 回车后才能得到
// 死循环
switch (num) {
case 1:
System.out.println("查询");
break;
case 2:
System.out.println("取款");
break;
case 3:
System.out.println("存款");
break;
case 4:
return;
}
}catch(Exception e) {
//e.printStackTrace(); //在控制台打印详细错误信息
System.out.println("您输入的内容非法,请输入1~4!");
//再次获取一次行,输入和回车本质有两行,把回车消灭
scan.nextLine(); //不需要它的返回值,不需要赋值,只操作
}
}
}
}
小结
1)程序
a. 旧的程序:数据结构+算法
b. 新的程序:数据结构+算法+框架+架构
2)程序结构:3种
a. 顺序结构:从上到下,从左到右,全都执行
b. 分支判断结构,要么要么,有部分代码不执行
c. 循环结构,重复执行,注意跳出条件
d. 异常结构,处理异常,部分代码执行,部分代码不执行(正确try中和finally中内容,catch中的不执行;错误try中出错前的代码执行,出错后的代码不执行,跳过,finally中执行。finally死活都执行。释放复杂资源)
3)分支
a. 单分支 if语句,if-else语句
if(判断){},当if体中代码一行时,大括号可以省略。不推荐
b. 多分支 else-if语句、switch,switch比较死板,else-if都能实现很灵活
if-else-if-else
switch-case(break)-default
所有代码中最重要的,体现业务逻辑,代码灵魂,就是if语句!
4)循环
a.* for 自增i++,i–
b.* while,赋值初始化语句
c. do-while,很少用,有业务场景
5)错误
a. Error 错误,系统级别,不能访问操作系统级别错误,只能眼睁睁报错
b. Exception 异常,开发者可以处理
6)异常
a. try 试图,尝试。有可能代码出现逻辑异常,就需要使用try包裹,不一定出错
b. catch 捕获,try中代码出错,会自动跳转到catch中,
c. finally 最终,释放资源。代码正常,代码异常,死活都执行
d. throw 抛出异常,throw new Exception(“重新定义错误信息”);
e. throws 接收异常,放在方法后面 throws Exception
以上是关于202106小白训练营day04-java程序结构分支循环异常的主要内容,如果未能解决你的问题,请参考以下文章
202106小白训练营day01-java第一个案例HelloWorld