专升本了,工作辞了,进了一所民办的院校,有JAVA的课程,但是因为时间没有合理的安排导致上课没听什么课,考试前又没复习,作业也没交两个,本来做好了补考的打算,但是神奇的是,我JAVA过了,考虑到下个学期有和JAVA相关的课程,在浪了半个月的情况下,这个寒假开始学JAVA,打卡第一天。时间:2022年1月16日
任务待办:
1、学习JAVA
2、通过3月份的计算机4级考
3、通过3月份的计算机2级考
4、预习下个学期的课程
正文
异常学习所需要的两个包:
import java.util.InputMismatchException; //此包在这里的用处是创建一个用来保存错误消息的字符串的引用
import java.util.Scanner; //这个包是Scanner类所用到的包
什么是异常?
程序运行中发生的时间,该事件可以中断程序指令的正常执行流程
遇到异常的处理机制:
1、JAVA程序运行时出现问题,系统会自动检测到该错误,并立即生成一个与该错误对应的异常对象
2、异常对象提交给JAVA虚拟机
3、JAVA虚拟机会自动寻找相应的处理代码来处理这个异常
如果没有找到,则JAVA虚拟机做一些简单的处理后,程序被强行终止
4、程序员可以编写代码来捕捉可能出现的异常,并编写代码来处理相应的异常
普通代码:
public class Exception {
public static void main(String[] args) {
int i;
Scanner sc = new Scanner(System.in); //和C语言不同,scanf并没有被继承过来,取而代之的是一个Scanner
// 在new对象的时候,其构造方法需要一个参数,这里是System.in的参数,这是系统输入的意思,可以理解为读取用户从键盘的输入
i = sc.nextInt(); //调用方法 nextInt() 代表将输入的值标记为int类型
System.out.print(i);
//问题:如果我们输入的值是非数字的值,报错怎么办?
/*
使用try catch语句
语句的执行流程:
1、如果try内的的代码出现异常则中断执行(从出现异常的那行/段代码开始)
2、执行对应的catch块内的代码(如果异常的类型是catch括号中的类型)
3、继续执行try catch语句结构之后的代码
代码的写法:
try catch; //自己处理异常
try{
(可能出现异常的代码)
}catch(异常的类名1 变量名A){
(如果出现了异常类中的异常,则执行该段的代码) //catch可以有多个
}catch(异常的类名2 变量名B){
(如果出现了异常类中的异常,则执行该段的代码)
}finally{
(最终肯定必须要执行的代码)
}
*/
try
{
i = sc.nextInt();
System.out.print(i);
}
catch(InputMismatchException e) //如果出现了InputMismatchException类型的异常,则执行下面{}中的代码
{
System.out.printf("输入数据不合法");
}
}
}
/*
注意事项:
1、如果catch内的异常类存在子父类的关系,子类应该在前,父类在后
2、如果finally中有return语句,那么最后返回的结果肯定以finally中的返回值为准
3、如果finally语句中有return,那么没有被处理的异常会被吞掉(说实话这三点不是很理解,等有一天理解了再回来填坑吧)
*/
问题:那我们为什么不能用 if else来处理异常呢?
程序出现的问题是无法通过逻辑判断来解决的,JAVA提供的异常处理机制可以解决逻辑判断所无法处理的问题
人类前进的步伐怎能止步于此?
参考文献:
https://blog.csdn.net/qq_34427165/article/details/83929470
https://blog.csdn.net/wanghuiwei888/article/details/78818203
https://www.bilibili.com/video/BV1ps411F7Sn?p=49