• java课堂练习——异常


    1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

    代码执行时不发生异常。

    jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常。

    jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常。

    第一个程序没有执行finally?

    finally 必须与 try 或 try/catch 配合使用。因为并没有执行try,所以不会执行finally,异常是由系统捕获的,所以try并没有抛出。除此之外,不能退出 try 而不执行其 finally 。如果 finally 存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 而不执行 finally 。如果代码在 try 内部执行一条 System.exit(0); 语句,那么应用程序终止而不会执行finally 执行。另一方面,如果您在 try 执行期间拨掉电源,finally 也不会执行。)

    2.阅读以下代码(CatchWho.java),写出程序运行结果:

    3.写出CatchWho2.java程序运行的结果

    4.辨析:finally语句块一定会执行吗?

    请通过 SystemExitAndFinally.java示例程序回答上述问题

    此程序中finally并未执行,原因是catch语句中的 System.exit0;使得程序退出jvm了,所以finally也就不执行了。

    总结try catch finally嵌套使用执行顺序。

    1try语句嵌套从外层到内层执行,在try语句中,哪一层出错,哪一层就抛出异常,后边的try语句就不再执行,如果该层存在catch就进行相应的捕获,有该层的finally也执行,除非finally遇到不执行的情况;

    2)如果该层没有catch进行捕获,就向外抛出,去找catch,如果没有catch进行捕获,就终止程序。

    5.请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

    1try抛出一个异常之后,程序会跳出try,不再执行try后边的语句,开始对catch进行匹配,处理异常;

    2try嵌套中,抛出的异常只有被处理才可以按顺序抛出下一个异常,如果不处理,程序就终止;

    3)try抛出异常之后,就跳出了try语句,内层catch无法捕获就继续向外抛,所以外层也就有异常,外层语句不执行,第二个程序 throw  new ArithmeticExcepption没有执行。

    4)第三个程序,try第一层第二层没有异常不用捕获,执行完之后到第三层,除0有异常,catch捕获,执行第三层的finally然后,顺序执行第二层,第一层的finally

    6.编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

    要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

    源代码:

    import java.util.Scanner;

    class cepingcuowuException extends Exception{

    public cepingcuowuException(String s){

    super(s);

    }

    }

    class fenshu{

    int score;

    public void panduan(int score){

    score=score;

    if(score<60)

    {

    System.out.println("不及格!");

    }

    if(score>=60){

    {

    System.out.println("及格!");

    if(score<=70)

    System.out.print("中");

    else if(score<80 && score>=70)

    System.out.print("良");

    else if(score>=80)

    System.out.print("优");

    }

    }

    }

    }

    public class Test {

    public static void main(String args[])throws cepingcuowuException{

    fenshu fenshu = new fenshu();

    System.out.println("请输入测评成绩:");

    try{

    Scanner in = new Scanner(System.in);

    String b = in.next();

        boolean result=b.matches("[0-9]+");

    if(result==true)

    {

    int c=Integer.valueOf(b);

    if(c > 100||c < 0)

    throw new cepingcuowuException("输入范围不正确!");

    else

    fenshu.panduan(c);

    }

    if(result == false)

    throw new cepingcuowuException("输入格式错误!");

    }

    catch(cepingcuowuException e){

    System.out.println(e);

    }

    }

    }

    程序截图:   

  • 相关阅读:
    实测好用的awvs批量添加任务脚本
    SQL注入漏洞
    CTF-WEB-信息泄露题目总结
    Awvs+nessus docker版本
    禅道12.4.2后台管理员权限Getshell复现
    子域名工具,使用必应搜索引擎
    i春秋第二届春秋欢乐赛-Web-Hello World
    百度杯CTF比赛 九月场-WEB-题目名称:SQL
    文件上传漏洞
    CVE-2019-17625漏洞复现(Rambox 0.6.9版本存储型XSS)
  • 原文地址:https://www.cnblogs.com/qq1499632156/p/6103143.html
Copyright © 2020-2023  润新知