java todo error_JAVA笔记:异常的基本概念

异常是指导致程序中断的一种指令流。

一旦产生异常之后,异常后面的语句不会执行,还是停留在异常位置,并且把异常报告给用户。

基本格式:

try{

//要执行的语句

}

catch(){

//抛出异常

}

finally{

//异常的唯一出口

}

例如:

public class ExceptionTest {

public static void main(String args[]){

int i = 10;

int j =0;

try {

int temp = i/j;

System.out.println(temp);

} catch (Exception e) {

// TODO: handle exception

System.out.println("exception:"+e);

}finally{

System.out.println("over");

}

}

}

异常类的继承结构:

Java的异常结构中 ,两个最常用的类是Exception和Error,这两个类都是Throwable 的子类。

Exception一般表示程序中出现的错误,可以用try...catch来解决;

而error指的是JVM错误,程序中无法处理。

6661d7ac97f6e488507d7668965dac56.png

Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Javathrow 语句抛出。类似地,只有此类或其子类之一才可以是

catch 子句中的参数类型。

处理异常时可以直接用System.out.println()打印异常,也可以用Exception提供的一个方法:public void printStackTrace()

Java中处理异常的过程如下:

*一旦产生异常,则会产生一个异常类的实例化对象。

*在try语句中对该异常进行捕捉

*产生的异常对象与catch语句中各个异常类型进行匹配,如果匹配成功,则执行catch中的代码

*如果最后都没有匹配成功,则程序中断执行(一般少见)

9655f9201b4d7e58c7f64249d4e2d58d.png

catch中的异常类型可以直接写Exception,根据输出确定,但是最好分别捕获异常。

捕获更粗颗粒的异常语句要放在捕获更细颗粒异常的语句之后,就像漏水,沙子,石块一样,要先漏水,再是沙子,最后是石块。

throws关键字

在定义一个方法的时候可以使用throws关键字来说明,该方法不处理异常,但是调用该方法时,要处理异常。

例如:

class Math{

public int div(int i,int j) throws Exception{

int temp = i/j;

return temp;

}

}

public class ExceptionTest {

public static void main(String args[]){

int a = 10;

int b = 0;

Math math = new Math();

try { //必须使用try.catch捕捉异常

System.out.println(math.div(a, b));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

假如主方法上也使用了throws Exception,则主方法也不处理异常,此时处理异常的工具就是JVM。

throw关键字

throw的作用是在程序中抛出一个异常,它抛出的异常是一个异常类的实例化对象。

例如:

public class ExceptionTest {

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

try {

throw new Exception("抛出一个异常");

} catch (Exception e) {

// TODO: handle exception

System.out.println(e);

}

}

}一般实际开发中会把throw和throws结合使用。例如要显示所有的程序执行过程,同时也要打印出相关的异常,就要把所有的异常都交给方法调用处处理,

例如:

class Math {

public int div(int i, int j) throws Exception {

System.out.println("Start");

int temp = 0;

try {

temp = i / j;

} catch (Exception e) {

// TODO: handle exception

throw e;

} finally {

System.out.println("Over");

}

return temp;

}

}

public class ExceptionTest {

public static void main(String args[]) {

Math math = new Math();

try {

System.out.println(math.div(10, 0));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

119bb2df1b386115c224c7fe06dc9e5f.png

使用异常时还可以自定义异常类,创建类继承Exception类即可。

Exception和RuntimeException的区别:

Exception在程序中必须使用try...catch处理;

RuntimeException则可以不使用try...catch处理,如果有异常产生,则交给JVM处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值