202225 北京 异常处理

202225 北京 异常处理,第1张

2022/2/5 北京 异常处理

出现异常:是指new了异常类的对象

方式一:try-catch-finally

方式二:throws+异常类型


try-catch-finally

根据实际问题可以写多个catch

try{
     //可能出现异常的代码
}catch(异常类型1 变量名1){
     //处理异常的方式1
}catch(异常类型2 变量名2){
     //处理异常的方式2
}catch(异常类型3 变量名3){
     //处理异常的方式3
}

 我们会发现把异常处理掉以后,程序是可以正常往下走的。只有try里的代码是中断执行了。

String str="abc";
try{
   int num=Intger.parseInt(str);
   System.out.println("hello1")
}catch(NumberFormatException e){
   System.out.println("出现数值转换异常了")
}
System.out.println("hello2")

 上面代码运行结果:


假如,吃错药了。异常没有被处理掉如下:  (catch(NullPointerException e))。

那么这三行输出一个都没。

String str="abc";
try{
   int num=Intger.parseInt(str);
   System.out.println("hello1")
}catch(NullPointerException e){
   System.out.println("出现数值转换异常了")
}
System.out.println("hello2")

只走第一个catch,不走第三个。

一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出try-catch结构(没有finally的情况),继续执行后面的代码。

有多个catch的情况下,如果上下catch满足父子类的关系,则一定要把子类写在上面。否则编译报错。

String str="abc";
try{
   int num=Intger.parseInt(str);
   System.out.println("hello1")
}catch(NumberFormatException e){
   System.out.println("出现数值转换异常了")
}catch(NullPointerException e){
   System.out.println("出现空指针异常了")
}catch(Exception e){
   System.out.println("出现异常了")
}
System.out.println("hello2")

通常爱用的俩种异常处理方式(写在catch【】里)

//String getMessage()
方式一:
System.out.println(e.getMessage());//e就是异常类的对象

方式二:
e.printStackTrace();//打印堆栈信息,包含了e.getMessage()

Finally 声明的是一定会被执行的代码

下面俩种方式,一种写finally,一种不写。在下面代码种,这俩种效果是一样的。

但是,finally中的代码,即使try中或catch中有return语句,即使catch中又出现异常了。依旧执行

try{
    int a=0;
    int b=0;
    System.out.println(a/b)
}catch(ArithmeticException e){
    e.printStackTrace();
}catch(Excetion e){
    e.printStackTrace();
}
// System.out.println("我好帅啊~~~")

//finally{
//  System.out.println("我好帅啊~~~")
//}
--------------------------------------------------------------------------------

try{
    int a=0;
    int b=0;
    System.out.println(a/b)
}catch(ArithmeticException e){
    int [] arr=new int[10];
    System.out.println(arr[10]);//catch中有出现异常也会执行finally中的代码
}catch(Excetion e){
    e.printStackTrace();
}finally{
  System.out.println("我好帅啊~~~")
}

那么看看你finally学明白没,return 多少?

try{
    int [] arr=new int[10];
    System.out.println(arr[10]);//出现数组越界异常
    return 1;
}catch(ArrayIndexOutOfBoundsException e){
    e.printStackTrace();
    return 2;//要返回的时候,finally说还有我呢等等。最后就去finally中return3了,
//没有执行这行代码
}finally{
    System.out.println("我好帅啊~~~")
    return 3;
}

有些物理连接,需要我们自己手动去关。比如:数据库连接,输入流输出流,socket连接

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5722073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存