首页 > 编程语言 >java课后动手动脑

java课后动手动脑

时间:2023-10-19 23:58:39浏览次数:34  
标签:java Level 动脑 System println 课后 catch 异常 out

动手动脑Ⅰ

package org.example;

import java.util.Scanner;
import javax.swing.*;


public class Main {
    public static void main(String args[])
    {
        int i=1, j=0, k;
        k=i/j;
        try
        {

            k = i/j;    // Causes division-by-zero exception
            //throw new Exception("Hello.Exception!");
        }

        catch ( ArithmeticException e)
        {
            System.out.println("被0除.  "+ e.getMessage());
        }

        catch (Exception e)
        {
            if (e instanceof ArithmeticException)
                System.out.println("被0除");
            else
            {
                System.out.println(e.getMessage());

            }
        }
        finally
        {
            JOptionPane.showConfirmDialog(null,"OK");
        }

    }
}
显示的是

Exception in thread "main" java.lang.ArithmeticException: / by zero
at org.example.Main.main(Main.java:11)

可以发现除零操作



 

 

动手动脑Ⅱ:多层的异常捕获

 

 

 1 public class Main {
 2     public static void main(String[] args) {
 3         try {
 4             try {
 5                 throw new ArrayIndexOutOfBoundsException();
 6             }
 7             catch(ArrayIndexOutOfBoundsException e) {
 8                 System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");
 9             }
10 
11             throw new ArithmeticException();
12         }
13         catch(ArithmeticException e) {
14             System.out.println("发生ArithmeticException");
15         }
16         catch(ArrayIndexOutOfBoundsException e) {
17             System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");
18         }
19     }
20 }

运行结果为

ArrayIndexOutOfBoundsException/内层try-catch
发生ArithmeticException

 1 package org.example;
 2 
 3 import java.util.Scanner;
 4 import javax.swing.*;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         try {
 9             try {
10                 throw new ArrayIndexOutOfBoundsException();
11             }
12             catch(ArithmeticException e) {
13                 System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
14             }
15             throw new ArithmeticException();
16         }
17         catch(ArithmeticException e) {
18             System.out.println("发生ArithmeticException");
19         }
20         catch(ArrayIndexOutOfBoundsException e) {
21             System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
22         }
23     }
24 }
结果为ArrayIndexOutOfBoundsException/外层try-catch

ArrayIndexOutOfBoundsException是数组下标越界异常
ArithmeticException数学运算异常

Java中多层异常捕获的运行规则如下:

1. 当程序执行到某个方法中可能抛出异常的语句时,会尝试执行该语句。
2. 如果在执行过程中发生了异常,会立即终止当前方法的执行,并跳转到匹配的catch块进行异常处理。
3. Java会按照catch块的顺序从上到下依次匹配异常类型,直到找到匹配的catch块。
4. 如果找到了匹配的catch块,会执行该catch块中的代码,并且整个异常捕获流程结束,程序继续执行catch块之后的代码。
5. 如果没有找到匹配的catch块,当前方法会立即结束,并将异常传递给调用它的方法进行处理。
6. 如果调用方法也没有捕获到异常,异常会继续向上层调用方法传递,直到找到匹配的catch块进行处理,或者直到达到程序的最顶层(例如main方法),如果最顶层也没有捕获到异常,程序会终止并打印异常信息。

在多层异常捕获中,内层的catch块会先尝试匹配异常类型,如果找到匹配的catch块,则不会继续向外层传递异常。而外层的catch块只有在内层的catch块没有匹配到异常类型时才会执行。

需要注意的是,异常捕获是按照catch块的顺序匹配异常类型的,因此在多层异常捕获中,应该将特殊的异常类型放在前面,将通用的异常类型放在后面,以确保异常能够被正确地捕获和处理。

另外,还可以使用多个catch块来处理不同类型的异常,也可以使用一个catch块来处理多个异常类型,使用管道符(|)将多个异常类型连接在一起。

总之,多层异常捕获可以帮助我们根据具体的异常类型,选择不同的处理方式,提高程序的容错性和稳定性。



动手动脑Ⅲ

 1 package org.example;
 2 
 3 import java.util.Scanner;
 4 import javax.swing.*;
 5 
 6 
 7 public class Main {
 8 
 9 
10     public static void main(String args[]) {
11 
12         int result;
13 
14         try {
15 
16             System.out.println("in Level 1");
17 
18 
19             try {
20 
21                 System.out.println("in Level 2");
22                 // result=100/0;  //Level 2
23 
24                 try {
25 
26                     System.out.println("in Level 3");
27 
28                     result=100/0;  //Level 3
29 
30                 }
31 
32                 catch (Exception e) {
33 
34                     System.out.println("Level 3:" + e.getClass().toString());
35 
36                 }
37 
38 
39                 finally {
40 
41                     System.out.println("In Level 3 finally");
42 
43                 }
44 
45 
46                 // result=100/0;  //Level 2
47 
48 
49             }
50 
51             catch (Exception e) {
52 
53                 System.out.println("Level 2:" + e.getClass().toString());
54 
55             }
56             finally {
57 
58                 System.out.println("In Level 2 finally");
59 
60             }
61 
62             // result = 100 / 0;  //level 1
63 
64         }
65 
66         catch (Exception e) {
67 
68             System.out.println("Level 1:" + e.getClass().toString());
69 
70         }
71 
72         finally {
73 
74          System.out.println("In Level 1 finally");
75 
76         }
77 
78     }
79 
80 }
输出

in Level 1
in Level 2
in Level 3
Level 3:class java.lang.ArithmeticException
In Level 3 finally
In Level 2 finally
In Level 1 finally

特别注意: 当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

 

 1 package org.example;
 2 
 3 import java.util.Scanner;
 4 import javax.swing.*;
 5 
 6 
 7 
 8 public class Main {
 9 
10 
11     public static void main(String[] args)
12     {
13 
14         try{
15 
16 
17             System.out.println("in main");
18 
19             throw new Exception("Exception is thrown in main");
20 
21             //System.exit(0);
22 
23 
24         }
25 
26         catch(Exception e)
27 
28         {
29 
30             System.out.println(e.getMessage());
31 
32             System.exit(0);
33 
34         }
35 
36         finally
37 
38         {
39 
40             System.out.println("in finally");
41 
42         }
43 
44     }
45 
46 
47 }

输出

in main
Exception is thrown in main

 

直接system.exit(0)退出程序

 

标签:java,Level,动脑,System,println,课后,catch,异常,out
From: https://www.cnblogs.com/litianyu1969/p/17776004.html

相关文章

  • JAVA项目中的常用的异常处理情况
    https://www.cnblogs.com/gothic-death/p/9946415.html在说java异常处理情况之前简单说下:java中异常的定义。java程序在运行时出现的不正常情况称之为异常。为了防止此类情况发生后及时处理该异常,java将所有可能发生异常的情况用类的形式进行描述和封装。描述不正常情况的类称为......
  • Java读取本地文件内容
    Stringpath="C:\\Users\\86175\\Desktop\\ss.txt";try{//创建FileReader对象来读取文件FileReaderfileReader=newFileReader(path);//创建BufferedReader对象来读取文件内容BufferedReaderbufferedRea......
  • java项目实践-cookie-session-day18
    目录1.cookie2.session3.servletcontext4.servletConfig1.cookiecookie在客户端(浏览器)中保持http状态的信息技术本质是浏览器缓存每次发请求的时候在请求头中带给服务端常见的应用场景:实现7天免登录浏览器F12request.setCharacterEncoding("utf-8");......
  • NodeJS之父Ryan Dahl:我不想被认为是一个JavaScript专家
    NodeJS之父RyanDahl:我不想被认为是一个JavaScript专家    被称为Node之父的RyanDahl在2012年离开了Node项目,后来加入Google的Brain团队,从事深度学习方面的研究,主要专注在图像的着色和超解像技术上。拥有深厚数学功底的Ryan经历了从Web开发到深度学习的跨越,还主导了......
  • Javaweb(十一)
    1、实现登录操作时提示的错误信息可封装在request域中,如下所示:然后再JSP中访问域中的数据:<divid="errorMsg">${login_msg}${register_msg}</div>获取cookie中的值:2、Filter概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的......
  • Java语法之运算符二(附练习和答案)
    10.自增自减运算符分类:++自增运算符--自减运算符++:就是把变量里面的值+1--:就是把变量里面的值-1使用方式:放在变量的前面,我们叫做先++。比如:++a放在变量的后面,我们叫做后++。比如:a++注意点:不管是先++,还是后++。单独写在一行的时候,运算结果是一模一样的。案例://++inta=10;......
  • java学习_03
    运算符对字面量或者变量进行操作的符号表达式用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。算数运算符加+、减-、乘*、除/、取模%整数参与计算,结果只能得到整数小数参与计算,结果......
  • Java基础 方法引用
    方法引用的概念:把已经有的方法拿过来用,当作函数式接口中抽象方法的方法体 方法引用需要满足的条件:1.引用处必须是函数式接口2.被引用的方法必须是已经存在的3.被引用方法的形参和返回值需要跟抽象方法保持一致4.被引用方法的功能要满足当前需求 ::是方法引用符,是......
  • 2023/10/19 动手动脑
    首先,一个程序如果碰到了异常不处理,程序就会立即停止,而异常处理就是在异常发生的情况下启动类似于备用方案使程序继续运行Java中的异常捕获结构由try,catch,finally三部分构成,其中,try和catch是必须同时存在的。try中的代码就是可能存在异常的代码,catch中的代码就是try中有异常时的......
  • 【Java】Vert.x Jackson 序列化后日期数据正常展示
    有段时间没有更新了,年尾嘛大家都懂的。其实最近有个想法,想将自己的vtx_fw框架给开源了。但开源之前还是有很多收尾的工作需要做的(总不能让各位笑话吧o(╥﹏╥)o),这不今天就发现了一个问题,立刻就归纳一下给各位分享。这个问题就是Vert.x框架中日期类型数据在Jackson序列化下的......