java小白训练营day04-流程控制:分支+循环+异常

云惠网小编 2021年7月29日19:18:34
评论
5565字阅读18分33秒
摘要

程序流程分支循环异常

广告也精彩

一直循环无法退出

package test;
import org.junit.Test;
//异常处理,3个经典的错误
public class TestTryCatch {
@Test
public void tryCatch() {
//1. nullPointer异常
String s = null;
//System.out.println(s.length());
//2. zero被0除异常 n/0
//System.out.println(10/0);
//java.lang.ArithmeticException: / by zero
//3. 数组越界 arr[5]
int[] arr = new int[5];
System.out.println(arr[5]);
//java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
}

在这里插入图片描述

package test;
//必须选择java.util(工具类)
import java.util.Scanner;
import org.junit.Test;
/*
* 需求:ATM输入数字操作
* 1 取钱
* 2 存钱
* 3 余额
* 4 退出
*/
public class TestATM {
@Test
public void atm() {
//键盘输入数字
System.out.println("请您输入一个数字:");
Scanner scan = new Scanner(System.in);
//自动将输入的内容转换整数类型
//阻塞,等待用户输入,用户没有输入时就死等
//回车继续执行下面语句
int num = scan.nextInt();
System.out.println("键盘输入:"+num);
switch(num) {
case 1:
System.out.println("取钱");
break;
case 2:
System.out.println("存钱");
break;
case 3:
System.out.println("余额");
break;
case 4:
System.out.println("退出");
break;
}
}
}

ATM

switch 语句:
int n = 10; //整数
switch( n){
case 10:

case 20:

case 30:

default :

}

分支

退出循环

package test;
import java.util.Scanner;
import org.junit.Test;
//异常处理,3个经典的错误
public class TestTryCatch {
@Test
public void err() {
//1. nullPointer异常
String s = null;
//System.out.println(s.length());
//2. zero被0除异常 n/0
//System.out.println(10/0);
//java.lang.ArithmeticException: / by zero
//3. 数组越界 arr[5]
int[] arr = new int[5];
System.out.println(arr[5]);
//java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
@Test //对于可能出现的错误就需要使用try-catch包裹起来
public void tryCatch() {
//如果try中没有出错,不执行catch中内容
try {
int[] arr = {1,2,3,4,5};
System.out.println(arr[6]);
}catch(Exception e) {	//把出现错误信息存入到e对象实例中
System.out.println( e.getMessage());
//错误信息比上面的详细些
System.out.println( e.toString() );
e.printStackTrace(); //最详细的错误信息,一般没必要
}
}
@Test	//finally不管是否出错,都释放资源
public void tryCatchFinally() {
//打印键盘输入内容(默认字符串)
Scanner scan = new Scanner(System.in);
//Resource leak: 'scan' is never closed 对复杂变量关闭
try {
int num = scan.nextInt();	//不是整数"a"
System.out.println(num);
}catch(Exception ex) {
System.out.println( ex.toString() );
}finally {
//不管正确还是错误,这里的代码都会执行
System.out.println("执行了我");
scan.close();
}
}
@Test //自己定义新的异常,并且抛出throw,方法接收异常throws
public void throwEx() throws Exception{
try {
int i = 10/0; //抛出异常
}catch(Exception e) {
System.out.println(e.toString());
//创建自己的异常,可以重新定义异常信息
throw new Exception("分母不能为0异常。");
}
}
}

1)while 循环
2)do-while 循环
3)do 循环

1)break 跳出
2)continue 跳过本次循环
3)return 返回

package test;
import org.junit.Test;
//退出循环
public class TestExit {
@Test
public void exitLoop() {
int i = 0;
while(i<6) {
i++;
if(i==3) {
//break; 	//跳出循环
//continue; //跳过本次循环
return;		//方法结束
}
System.out.println(i);
}
System.out.println("执行完成");
}
}

程序流程分类

java提供两种语句:if语句(单分支)、switch语句(多分支)
if语句:
1)if(判断条件:布尔表达式){ 。。。}
2)if(){ … } else{ … }
3)elseif if(){ … } elseif(){ … } elseif(){ … } else{ … } 多分支

异常

package test;
import org.junit.Test;
//循环三种方式
public class TestLoop {
@Test	//while循环
public void whileLoop() {
//需求:打印0~9
int n = 0;
//当下面的判断成立就执行循环体,如果不成立结束循环
while(n<10) {
System.out.println(n);
n++;
}
}
@Test //do while循环
public void doLoop() {
int n = 0;
do {
System.out.println(n);
n++;
}while(n<10);
}
@Test	//for循环
public void for1() {
for(
int i=0;	//第一句,只执行一次
i<10;		//第二句,判断条件,每次都判断
i++) {		//第四句,加一
System.out.println(i); //第三句,打印
}
}
@Test	//双重for循环 i,j,k,m,n
public void for2() {
//利用*打印方框
for(int j=0; j<10; j++) { //外层循环
for(int i=0; i<10; i++) { //内层循环
System.out.print("*");
}
System.out.println(); //换行
}
}
@Test //99乘法表
public void for99() {
for(int j=1; j<10; j++) {
for(int i=1; i<j+1; i++) {
System.out.print(i+"*"+j+"="+i*j+"\t"); //tab
}
System.out.println();
}
}
}

死循环

1)顺序执行:从上到下,从左到右(所有的代码都执行)
2)分支判断执行:根据条件进行判断,条件成立执行一段代码,条件不成立执行另外一段代码(部分代码执行,部分代码不执行)
3)循环迭代执行:反复执行一段代码(代码执行多次)

package test;
//必须选择java.util(工具类)
import java.util.Scanner;
import org.junit.Test;
/*
* 需求:ATM输入数字操作
* 1 取钱
* 2 存钱
* 3 余额
* 4 退出 return
*/
public class TestATM {
@Test
public void atm() {
//键盘输入数字
Scanner scan = new Scanner(System.in);
//自动将输入的内容转换整数类型
//阻塞,等待用户输入,用户没有输入时就死等
//回车继续执行下面语句
while(true) {
System.out.println("请您输入一个数字:");
int num = scan.nextInt();
System.out.println("键盘输入:"+num);
switch(num) {
case 1:
System.out.println("取钱");
break;
case 2:
System.out.println("存钱");
break;
case 3:
System.out.println("余额");
break;
case 4:
System.out.println("退出");
//break;
return;
}
}
}
}

小结

在这里插入图片描述

循环

package test;
import org.junit.Test;
//死循环
public class TestDeadLoop {
@Test
public void whileDead() {
while(true) {
System.out.println("*");
}
}
@Test
public void forDead() {
for(;;) {
System.out.println("*");
}
}
}
package test;
import org.junit.Test;
public class TestSwitch {
@Test
public void phone() {
//当switch只要某个条件成立,下面所以的条件不判断,但是代码会执行
//标准写法,给每个分支最后加语句 break; 跳出
int phone = 120;
switch(phone) {
case 110:	//判断phone==110
System.out.println("警察");
break;
case 120:
System.out.println("医生");
break;
case 119:
System.out.println("消防");
break;
default:
System.out.println("非法电话号码");
break; //写不写都行
}
}
}
package test;
import org.junit.Test;
//if语句的测试
public class TestIf {
// Boolean isRainning = true; 成员变量
@Test
public void rainning() {
// 需求:下雨打伞
// 如果是成员变量使用包装类型,
// 如果是局部变量使用基本类型
boolean isRainning = false;
if (isRainning) {
System.out.println("下雨打伞");
}
// 简写,只有当if语句后面只有一条语句是,才能省略大括号
// 不推荐,结构不清晰,号称会出错
if (isRainning)
System.out.println("下雨打伞");
System.out.println("执行完成");
//开发中最常见写法
if (isRainning) {
System.out.println("喜水");
}else {
System.out.println("晒被子");
}
}
//需求:判断电话号码,输出功能
@Test
public void elseIf() {
int phone = 999;
if(phone==110) {
System.out.println("警察");
}else if(phone==120) {
System.out.println("医生");
}else if(phone==119) {
System.out.println("消防");
}else {
System.out.println("非法电话号码");
}
}
}

try试图/catch捕获异常/finally释放资源/
throw抛出异常/throws 接收异常

1)流程控制结构:
a. 顺序结构:从上到下,从左到右
b. 分支判断结构:部分代码执行,部分代码不执行 if/else
c. 循环迭代结构:反复执行一段代码
d. 异常结构:出错就跳过后面代码直接执行catch中的代码,都会执行finally中代码
2)分支(单分支、多分支,分支的条件是互斥的,没有交叉,只会执行其中某一个)
用来判断,它让我们程序有了生命力!程序的业务逻辑。
3)循环(往复执行一件事情)
注意,在循环体内一定要改变判断条件!死循环
while和do区别:while可能一次都不执行,do最少执行一次
for(第一句;第二句;第四句){第三句} 编译器优化
4)异常 Exception
try-catch
try-catch-finally 释放资源 Person p = new Person(); GC垃圾回收器(自动,它不受java开发者控制)
throw-throws,在catch中抛出异常throw产生新的异常,方法后面throws

本文转自 https://blog.csdn.net/nutony/article/details/119133632

腾讯云618
云惠网小编
Java—代码块详解 java

Java—代码块详解

代码块概念代码块分类普通代码块构造代码块静态代码块同步代码块代码块概念在java中,{ } 括起来的代码被称为代码块代码块分类普通代码块类中方法的方法体public class M...
腾讯云618

发表评论