java之异常
创始人
2024-11-11 11:11:22
0

目录

一、简介

二、作用

三、JVM默认处理异常方式 

四、捕获异常

1.格式

2.目的

 3.示例

 五、灵魂四问

1.如果try中没有遇到问题,怎么执行?

2.如果try中可能会遇到多个问题,怎么处理?

3.如果try中遇到的问题没有被捕获,怎么执行?

4.如果try中遇到了问题,那么try里面剩余的其他代码还会执行吗?

六、异常的常见方法

 七、抛出异常

八、try-finally 

1.格式

2.示例

3.finally代码不执行情况

 九、Demo

 


一、简介

编译时异常是提醒程序员检查本地信息

运行时异常是代码出错而导致的程序出现的问题,一般是参数传递错误出现

二、作用

1.用来查询bug的关键参考信息

2.可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

三、JVM默认处理异常方式 

把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

程序停止执行,下面的代码不会再执行了

四、捕获异常

1.格式

在可能出现异常的地方使用

2.目的

当代码出现异常时,可以让程序继续往下执行 

 3.示例

 五、灵魂四问

1.如果try中没有遇到问题,怎么执行?

会把try里面所有的代码全部执行完毕,不会执行catch里面的代码

注意:只有当出现了异常才会执行catch里面的代码

2.如果try中可能会遇到多个问题,怎么处理?

会写多个catch与之对应

如果我们要捕获多个异常,这些异常中如果存在父子关系的话,那么父类一定要写在下面

了解:在JDK7之后,我们可以在catch中同时捕获多个异常,中间用 | 进行隔开

           表示如果出现了A异常或者B异常的话,采取同一种处理方案

示例代码

3.如果try中遇到的问题没有被捕获,怎么执行?

相当于try...catch的代码白写了,最终还是会交给虚拟机进行处理。即将异常信息打印到控制台,程序停止执行,下面的代码不会再执行了

4.如果try中遇到了问题,那么try里面剩余的其他代码还会执行吗?

下面的代码就不会执行了,直接跳转到对应的catch当中,执行catch里面的语句体

但是如果没有对应catch与之匹配,那么还是会交给虚拟机进行处理

示例

六、异常的常见方法

示例:

 

将异常以红色字体输出在控制台(System.err)

 七、抛出异常

示例

将异常抛出到方法使用处。抛出处要处理,抛出或捕捉

八、try-finally 

finally一般配合try-catch使用,关闭相关的流,用于处理资源回收和清理。

1.格式

try{     //发生异常的代码 }catch(异常类型  e){     //处理异常 }finally{     //关闭相关流或输出信息 }

注意:无论try部分的代码有没有发生异常,finally部分的代码都会执行。

2.示例

public class FinallyTest {   static int x = 1;   static int y = 10;   static int z = 100;      public static void main(String[] args) {     int value = finallyReturn();     System.out.println("value=" + value);          System.out.println("x=" + x);     System.out.println("y=" + y);     System.out.println("z=" + z);   }   private static int finallyReturn() {     try {        // 无异常        return ++x;     } catch (Exception e) {        return ++y;     } finally {        return ++z;     }   } }  

上面的代码,try方法没有异常不会执行catch代码,执行完try,再执行finally,最后输出

value = 101,x=2,y=10,z=101

如果try出现异常,return ++x不执行,执行catch后执行finally,最后输出

value = 101 ,x=1 ,y=11, z=101

 

上面的代码示例输出都是“程序结束”,说明无论在try还是catch里面return,finally部分代码还是会执行,并且try-finally后面的代码不会执行 

3.finally代码不执行情况

A.没进入try部分代码

B.JVM崩溃:如果Java虚拟机崩溃(例如,由于操作系统故障或内存溢出),则finally块不会执行。

C.无限循环:如果在try块中存在无限循环,且没有跳出循环的条件,那么finally块将永远不会执行。

D.调用System.exit():如果在try块中调用了System.exit()方法,程序将立即终止,finally块不会执行。

 九、Demo

public class Test {     public static void main(String[] args) {         Dog dog = new Dog();         Scanner sr = new Scanner(System.in);          try {             System.out.println("请输入狗的名字");             String name = sr.next();             dog.setName(name);             System.out.println("请输入狗的年龄");             int age = sr.nextInt();             dog.setAge(age);         } catch (InputMismatchException e) {             System.out.println("输入的数据格式有误");         } catch (RuntimeException e) {             e.printStackTrace();         }     } } class Dog {     private String name;     private int age;      public Dog() {     }     public Dog(String name, int age) {         this.name = name;         this.age = age;     }     public String getName() {         return name;     }     public void setName(String name) {         if (name.length() < 2 || name.length() > 10) {             throw new RuntimeException("名字的长度必须在2-10之间");         }         this.name = name;     }     public int getAge() {         return age;     }     public void setAge(int age) {         if (age < 0 || age > 20) {             throw new RuntimeException("年龄必须在0-20之间");         }         this.age = age;     }     @Override     public String toString() {         return "Dog{" +                 "name='" + name + '\'' +                 ", age=" + age +                 '}';     } } 

 十、自定义异常

1.格式

(1)定义异常类   注意:名字要见文知义

(2)写继承关系   继承RuntimeException就是运行时异常    继承Exception就是编译时异常 

(3)写无参构造器

(4)写有参构造器

看一个java底层实现好的定义异常,继承RuntimeException是运行时异常,有无参和有参构造器,异常类名也是明白作用。

创建自定义异常的意义:就是为了让控制台的报错信息更加的见名之意 即异常的名字

相关内容

热门资讯

正规平台有哪些,牛牛房卡游戏代... 正规平台有哪些,牛牛房卡游戏代理趣游联盟/微信链接房卡最低价格趣游联盟是一款非常受欢迎的游戏,咨询房...
分享攻略!微信里上玩炸金花购买... 微信游戏中心:炸金花房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信炸金花房...
我来教你/金花房卡出售卡贝大厅... 卡贝大厅/新上游是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:33...
8分钟了解,微信开牛牛房卡在哪... 新世界牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
一分钟了解!牛牛充值房卡老神兽... 一分钟了解!牛牛充值房卡老神兽/海贝大厅/房卡客服Sa9Ix苹果iPhone 17手机即将进入量产阶...
正规平台有哪些,牛牛充值房卡海... 您好!微信海螺互娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(海螺互娱)大厅介绍:...
重大通报,金花房间怎么创建卡丁... 今 日消息,卡丁互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正规平台有哪些,牛牛房卡代理卡... 卡卡娱乐房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
分享攻略!微信牛牛房卡专卖店联... 微信游戏中心:斗牛房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
一分钟了解,有没有玩金花房房卡... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
IA解析/牛牛房卡怎么获得乐酷... IA解析/牛牛房卡怎么获得乐酷大厅/微信链接房卡低价销售乐酷大厅是一款非常受欢迎的游戏,咨询房/卡添...
ia攻略/牛牛房卡怎么购买精卫... 微信游戏中心:精卫大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
我来教你/游戏推荐牛牛房卡出售... 我来教你/游戏推荐牛牛房卡出售战神联盟/微信链接房卡购买渠道Sa9Ix苹果iPhone 17手机即将...
重大通报,游戏微信牛牛房卡蛮王... 您好!微信蛮王大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(蛮王大厅)大厅介绍:...
推荐一款!牛牛充值房卡详心联盟... 详心联盟房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
分享攻略!微信牛牛房卡在哪里买... 微信游戏中心:牛牛房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...
玩家必备教程,微信炸金花链接怎... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
正规平台有哪些,牛牛房卡制作链... 天酷大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
推荐一款!金花房卡出售乐乐堂/... 推荐一款!金花房卡出售乐乐堂/房卡微信链接Sa9Ix苹果iPhone 17手机即将进入量产阶段。有消...
一分钟了解!游戏推荐牛牛房卡出... 您好!微信鸿运大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(鸿运大厅)大厅介绍:...