首页 > 其他分享 >2023/10/19 动手动脑

2023/10/19 动手动脑

时间:2023-10-19 22:12:55浏览次数:32  
标签:10 19 System try catch finally 2023 println out

首先,一个程序如果碰到了异常不处理,程序就会立即停止,而异常处理就是在异常发生的情况下启动类似于备用方案使程序继续运行

Java中的异常捕获结构由try,catch,finally三部分构成,其中,try和catch是必须同时存在的。

try中的代码就是可能存在异常的代码,catch中的代码就是try中有异常时的执行方案,finally中的代码无论有没有异常都会正常运行

public class Take {
    public static void main(String[] args)
    {
        try {
            String str="hahahaha";
            System.out.println(str+"个锤子");
            int num=Integer.parseInt("23H");//将数字的字符型转换为整数型
            System.out.println(num);
        }catch(Exception e)//如果出现异常就替换异常语句然后执行,一般都填入处理异常的代码
        {
            e.printStackTrace();//输出异常性质
            System.out.println("这里显示异常错误");
        }
        finally//无论是否异常,里面的内容都会执行 
        {
            System.out.println("666");
        }
    }
}

Java中存在自定义异常,当运行时的代码不符合你所自定义的条件时就会抛出该异常,在方法中的异常抛出如果不想在当前方法中解决,就必须抛出该异常,一个方法运行时只能抛出一个异常,当该方法抛出异常后,该方法就不会再往下执行,要让方法抛出异常就要用到throws和throw关键字,前者是在方法的定义后主体前,throws指出了该方法所能抛出的异常,throw是在方法主体内来运用的。

class ClassException extends Exception//自定义异常
{
    public ClassException(String hhh)
    {
        super(hhh);
    }
}
public class students {
    public static void main(String[]args)
    {
        try
        {
            qiandao("张三","未到");
        }
        catch(ClassException a)//处理指定类型的异常
        {
            a.printStackTrace();
            System.out.println(a);
        }
    }
    static void qiandao(String name,String state)throws ClassException//抛出的异常类型,抛出的异常在主方法中处理
    {
        if(state.equals("未到") )
        {
            throw new ClassException(name+"旷课");
        }
    }
}

能被try-catch捕捉的异常都是运行时异常,Java的类库中有很多常见的异常类

public class CatchWho { 
    public static void main(String[] args) { 
        try { 
                try { 
                    throw new ArrayIndexOutOfBoundsException(); 
                } 
                catch(ArrayIndexOutOfBoundsException e) { 
                       System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch"); 
                }
 
            throw new ArithmeticException(); 
        } 
        catch(ArithmeticException e) { 
            System.out.println("发生ArithmeticException"); 
        } 
        catch(ArrayIndexOutOfBoundsException e) { 
           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
        } 
    } 
}

结果:

ArrayIndexOutOfBoundsException/内层try-catch

发生ArithmeticException

可以看到内层的catch是优先执行的然后再执行外层catch

抛出的异常如果没有被捕捉到就会一直向外传递直到被捕获到

而对于try部分的代码时优先执行外层再执行里层

public class EmbededFinally {

    
    public static void main(String args[]) {
        
        int result;
        
        try {
            
            System.out.println("in Level 1");

           
             try {
                
                System.out.println("in Level 2");
  // result=100/0;  //Level 2
               
                 try {
                   
                     System.out.println("in Level 3");
                      
                     result=100/0;  //Level 3
                
                } 
                
                catch (Exception e) {
                    
                    System.out.println("Level 3:" + e.getClass().toString());
                
                }
                
                
                finally {
                    
                    System.out.println("In Level 3 finally");
                
                }
                
               
                // result=100/0;  //Level 2

            
                }
            
            catch (Exception e) {
               
                 System.out.println("Level 2:" + e.getClass().toString());
           
             }
             finally {
                
                System.out.println("In Level 2 finally");
           
             }
             
            // result = 100 / 0;  //level 1
        
        } 
        
        catch (Exception e) {
            
            System.out.println("Level 1:" + e.getClass().toString());
        
        }
        
        finally {
           
.             System.out.println("In Level 1 finally");
        
        }
    
    }

}

Java中的finally按道理时无论有没有异常都会执行的,但是

package hei;


public class SystemExitAndFinally {

    
    public static void main(String[] args)
    {
        
        try{

            
            System.out.println("in main");
            
            throw new Exception("Exception is thrown in main");

                    //System.exit(0);

        
        }
        
        catch(Exception e)

            {
            
            System.out.println(e.getMessage());
            
            System.exit(0);
        
        }
        
        finally
        
        {
            
            System.out.println("in finally");
        
        }
    
    }


}

改代码并没有执行finally

尽管finally块通常会被执行,但有一些特殊情况下它可能不会被执行。下面是这些情况的示例:

在执行try代码块时,JVM退出了。

这可能发生在程序执行期间由于某些原因导致JVM异常退出,如出现硬件故障或操作系统错误。在这种情况下,程序无法继续执行,因此finally块不会被执行。

在执行try代码块时,程序遇到了System.exit()语句。

System.exit()是一个Java源代码级的方法,用于终止当前正在运行的Java虚拟机。调用System.exit()将导致JVM立即退出,而不会执行任何未执行的代码,包括finally块。

在执行try代码块时,发生了无限循环或死锁。

如果在try代码块中发生无限循环或死锁,程序将无法继续执行,因此finally块将不会被执行

标签:10,19,System,try,catch,finally,2023,println,out
From: https://www.cnblogs.com/zhenaifen/p/17773432.html

相关文章

  • 10.19每日总结
    今天上课验收了ERP页面原型,我做错了,写成进销存系统。今天上课大家验收面临的问题大多是对流程的不清楚,首先是依据订单再生产,而不是有的人认为的看见仓库数量再去打印订单。也是我自己的问题,上课时老师也为我们提供了账号和密码,我们登录上去看一下流程,做的原型页面都不会这么差。上......
  • 文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
    一、用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表。同样画出单数组表示的形式。文心一言:在Go语言中,我们无法直接画图,但我可以帮助你描述如何使用Go语言来表示和操作多数组表示的双向链表和单数组表示。首先,多数组表示的双向链表可以表示为以下的数据结构:......
  • 10.19闲话
    明天就去秦皇岛了......
  • 10.18 模拟赛小记
    这下真的寄了。赛前多校联测2。胜利一中出题。比赛链接。官方题解。A.谁共一杯芳酒赛时写了个小范围的爆搜和假的贪心。赛后一想笑的我。好好好。有的样例。给了和没给有什么区别啊。真无语。正确的思路是先按照一边端点为关键字排序,另一边按照最长不下降序列处理。这......
  • 2023.10.19——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.运气不好,只能得0分;运气好,可以得5分;明日计划:学习......
  • ai-2023-10-19
    1、为了保持大纲的完整已将原来头尾图片中带有明显宣传的内容去除,来自于:http://ai.aijdjy.com/ke-cheng-da-gang.html                                           ......
  • 231019校内赛
    T1机器人题解傻逼题,但是有人\(90\)分一开始十分想直接暴力\(2^n\)判断每一步选不选求出所有可能性但是会发现它有制约关系有些步走了之后,有些就必须走了所以需要用一个数组记录当前位置走没走过,或者是不是障碍注意走没走过不能直接赋值\(1,0\)因为回溯时会直接将前......
  • 20231018NOIP训练赛
    20231018NOIP训练赛时间安排7:50-8:10写T19:10-10:30写T210:30-11:50写T4总结没看T3去做了T4,考完试发现T3比T4更可做。题解T1贪心题,排序之后贪心即可T2对a做前缀和,把题目的式子化成\[\sum_{l=1}^{n}\sum_{r=l}^n\sum_{i=l}^{r}b[i]*(sum[r]-sum[l])\]对于每一个......
  • 2023年CANN训练营第二季——叭一叭几款AscendC算子支持芯片的运算单元以及AscendC提供
    前言:    我们知道昇腾AI芯片,有1个或多个AiCore,AiCore上有Cube和Vector运算单元提供给算子进行运算,有的AiCore是Cube和Vector一体的,有的Cube和Vector是分开,各自独立的。我们还记得例程中的例子一般都指定核心数BLOCK_DIM=8,这又是为什么,有啥道理呢?本文就来叭一叭,昇腾芯片的运......
  • 2023年SWPU NSS 秋季招新赛 (校外赛道)WP—Crypto
    一、Caesar_base题目信息s="HIJKLMNOPQRSTUVWXYZABCDEFGhijklmnopqrstuvwxyzabcdefg0123456789+/"#码表defMy_base64_encode(inputs): bin_str=[] foriininputs: x=str(bin(ord(i))).replace('0b','') bin_str.append('{......