java动手动脑——异常处理

简介: Java07异常处理动手动脑异常处理的基本知识 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。

                                          Java07异常处理动手动脑

  1. 异常处理的基本知识

 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下:
 try{
  程序代码
 }catch(异常类型1 异常的变量名1){
  程序代码
 }catch(异常类型2 异常的变量名2){
  程序代码
 }finally{
  程序代码
 }

2. 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

 

public class CatchWho2 {

    public static void main(String[] args) {

        try {

               try {

                   throw new ArrayIndexOutOfBoundsException();

               }

               catch(ArithmeticException 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

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

多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。

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

并不一定,如果提前结束程序,finally语句就不会被执行,如程序中用System.exit(0);提前结束了程序。

 

 

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

 

import java.util.*;

 

 

 

class AException extends Exception

 

{

 

String a;

 

AException() 

 

{

 

a="输入有误";  

 

}

 

public String toString()

 

{

 

return a;

 

}

 

}

 

 

 

public class A

 

{

 

    public static void main(String args[])

 

    {

 

     while(1>0)

 

       {

 

     Scanner sc = new Scanner(System.in);

 

     System.out.println("请输入考试成绩(0~100):");

 

     

 

        try

 

        {

 

            String s = sc.nextLine();    

 

            getnum(s);

 

        }

 

        catch (AException e)

 

        {

 

            System.out.println(e.toString());

 

        }

 

       }

 

    }

 

 

 

    private static void getnum(String s) throws AException

 

    {

 

     for (int i = s.length()-1; i >= 0;i--)

 

        {

 

         int chr = s.charAt(i);

 

            if (chr < 48 || chr > 57)

 

            {

 

             throw new AException();

 

            }

 

 

 

        } 

 

     double num = Double.parseDouble(s);  

 

        if (num < 0 || num> 100)

 

        {

 

            throw new AException();

 

        }

 

        if (num>= 0 && num<= 60)

 

        {

 

            System.out.print("不及格\n");

 

        }

 

        else if (num >= 60 && num <= 70)

 

        {

 

            System.out.print("及格\n");

 

        }

 

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

 

        {

 

            System.out.print("中\n");

 

        }

 

        else if (num >= 80 && num <= 90)

 

        {

 

            System.out.print("良\n");

 

        }

 

        else

 

        {

 

            System.out.print("优\n");

 

        }

 

    }

 

}

 

目录
相关文章
|
5月前
|
安全 Java
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
357 98
|
5月前
|
安全 Java 编译器
驾驭Java异常处理:从新手到专家的优雅之道
驾驭Java异常处理:从新手到专家的优雅之道
272 59
|
8月前
|
Java 编译器 数据库连接
Java异常处理:写出更健壮的代码
Java异常处理:写出更健壮的代码
235 0
|
7月前
|
Java 数据库 C++
Java异常处理机制:try-catch、throws与自定义异常
本文深入解析Java异常处理机制,涵盖异常分类、try-catch-finally使用、throw与throws区别、自定义异常及最佳实践,助你写出更健壮、清晰的代码,提升Java编程能力。
|
9月前
|
Java 程序员 数据库连接
我们详细地讲解一下 Java 异常及要如何处理
我是小假 期待与你的下一次相遇 ~
199 1
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
10月前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。
219 1
|
12月前
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
12月前
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
12月前
|
运维 Java 程序员
Java中的异常处理方法
本文深入剖析Java异常处理机制,介绍可检查异常、运行时异常和错误的区别与处理方式。通过最佳实践方法,如使用合适的异常类型、声明精确异常、try-with-resources语句块、记录异常信息等,帮助开发者提高代码的可靠性、可读性和可维护性。良好的异常处理能保证程序稳定运行,避免资源泄漏和潜在问题。
321 5