异常处理(一)

java的异常体系:

Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。

它有两个子类:Error和Exception。

Error:用于指示合理的应用程序不应该试图捕获的严重问题。

Exception:它指出了合理的应用程序想要捕获的条件。

Exception又分为两类:

一种是CheckedException,另一种是UncheckedException。

这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。

我们常见的RuntimeExcepiton有IllegalArgumentException、IllegalStateException、NullPointerException、IndexOutOfBoundsException等等。对于那些CheckedException就不胜枚举了,我们在编写程序过程中try...catch...捕捉的异常都是CheckedException。io包中的IOException及其子类,这些都是CheckedException。

Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
try        -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
catch   -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中    的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
throw   -- 用于抛出异常。
throws -- 用在方法签名中,用于声明该方法可能抛出的异常。

try-catch块

import java.util.Scanner;
/**
* 使用try-catch进行处理异常
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入被除数");
try {
int num1=in.nextInt();
System.out.println("请输入除数");
int num2=in.nextInt();
System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
System.out.println("感谢使用本程序");
} catch (Exception e) {
System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
e.printStackTrace();
}
}

}

try-catch程序块执行比较简单,先执行try语句块中的语句,可能会有以下3种情况:

1)如果try块中所有语句正常执行完毕,不发生异常,那么catch块中的所以语句都将会被忽略

2)如果try语句块在执行过程中遇到异常,并且这个异常与catch中声明的异常类型相匹配,那么try块中其余剩下的代码都将被忽略,而相应的catch块将会被执行

3)如果try语句块在执行过程中遇到异常,而抛出的异常在catch块里面没有声明,那么程序立刻退出.

try-catch-finally块

 try
    {
         // 可能发生异常的代码
        // 如果发生了异常,那么异常之后的代码都不会被执行
    }
    catch (Exception e)
    {
        // 异常处理代码
    }
    finally
    {
        // 不管有没有发生异常,finally语句块都会被执行
    }

import java.util.Scanner;
/**
* 使用try-catch-finally进行处理异常
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入被除数");
try {
int num1=in.nextInt();
System.out.println("请输入除数");
int num2=in.nextInt();
System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
} catch (Exception e) {
System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
System.out.println(e.getMessage());
}finally{
System.out.println("感谢使用本程序");
}
}

}

try-catch-finally程序块的执行流程大致分为2中情况:

1)如果try块所有语句正常执行完毕,那么finally块就会被执行.

2)如果try语句块在执行过程中碰到异常,无论这种异常能否被catch块捕获到,都将执行finally块中的代码

多重catch块

  一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。

import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 使用try-catch-finally进行处理异常
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入被除数");
try {
int num1=in.nextInt();
System.out.println("请输入除数");
int num2=in.nextInt();
System.out.println(String.format( "%d/%d=%d",num1,num2,num1/num2));
}catch(InputMismatchException e){
System.out.println("被除数和除数必须是整数");
}catch(ArithmeticException e){
System.out.println("除数不能为零");
} catch (Exception e) {
System.out.println("出现错误:被除数和除数必须是整数,"+"除数不能为零");
System.out.println(e.getMessage());
}finally{
System.out.println("感谢使用本程序");
}
}

}

时间: 2024-10-15 15:26:43

异常处理(一)的相关文章

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

跟着百度学PHP[11]-PHP当中的异常处理

首先要说一下常见的三种错误: 1.语法错误 2.运行错误 3.逻辑错误 00x1 错误报告及错误级别 PHP的错误分为三个等级 1.注意(notice)   没有变量a 2.警告(warning) 没有给函数传值 3.致命的错误(fatal error) 函数写错 错误的报告级别可以在PHP.ini当中修改.在PHP.ini当中找到错误报告“error_reporting = E_ALL ” 这个的意思是将所有的错误都提示出来.ps:~是除了的意思.&是和的意思.error_reporting

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

python3_装饰器_异常处理

装饰器: def auth(func):     def wrapper(name):                     如果函数带参数,要加在这里         user=raw_input("input passwd:").strip()         if user=='test':             print "welcome login"             func(name)              如果函数带参数,要加在这里

动手动脑(异常处理)

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. import javax.swing.*; class AboutException { public static void main(String[] args) { float i=1, j=0, k; k=i/j; System.out.println(k); try { k = i/j;    // Causes division-by-zero exceptio

异常处理

我们在使用Java语言高级API进行程序设计之前,我们还需要理解Java语言中另一个基础特色-----异常处理 异常(Exception)是程序在执行过程中所产生的问题.导致异常产生的原因有很多种: 用户输入了无效的数据.找不到一个需要打开的文件.在通讯过程中网络连接断开或者JVM发生了内存溢出 异常的分类: 检查异常-----是用户错误或不能被程序所遇见的问题 运行时异常-----是一个程序在运行过程可能发生的问题 错误-------实际上,错误根本不是异常,但却是用户或程序所无法控制的问题

Java异常处理

异常的层次结构 所有的异常类都是 java.lang.Exception 类的子类型.异常类都是 Throwable 类的子类.除了异常类 Error 类也是由 Throwable 类产生的的子类1. public String getMessage() 返回关于发生异常的细节信息,这些信息在Throwable的构造函数中被初始化2. public Throwable getCause() 返回发生异常的原因,由 Throwable 对象来表示3. public String toString(

SpringMVC 异常处理

一.异常解析器应该具有的功能: 1.既然使用异常解析器,那么就不必在Controller中对异常进行处理,抛出即可,简化开发,异常统一控制. 2.ajax请求(有@ResponseBody的Controller)发生错误,输出JSON. 3.页面请求(无@ResponseBody的Controller)发生错误,输出错误页面. 4. 它需要与AnnotationMethodHandlerAdapter使用同一个messageConverters 5.异常处理细节可控制. 二.SpringMVC异

16.如何自学Struts2之Struts2异常处理[视频]

16.如何自学Struts2之Struts2异常处理[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

详解Linux内核异常处理体系结构

本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程. [首先来区分一下两个概念:中断(Interrupt)和异常(Exception).中断属于异常的一种,就拿2440开发板来说,他有60多种中断源,例如来自DMA控制器.UART.IIC和外部中断等.2440有一个专门的中断控制器来处理这些中断,中断控制器在接收到这些中断信号之后就需要ARM920T进入IRQ或FIQ模式进行处理,这两种模式也是中断异常的仅有模式.而异常的概念要广的多,它包括复位.未定义指令.软中断.IRQ等等