Java Error /Exception 异常处理

在我们日常所看到的代码中,几乎所有的都存在异常,为了保证程序出现异常之后可以正常执行完毕,需要进行异常处理
异常类的继承结构:

所有的异常都是由Throwable继承而来,他的两个子类分别为Error、Exception
Error类描述的是Java运行时内部错误和资源耗尽错误,应用程序不抛出此类异常,一旦出现这种内部错误,应用程序会告知用户并使程序安全终止。

Exception的两个子类分别为:RuntimeException和IOException
RuntimeException:由于程序错误导致的异常
IOException:程序本身没有问题,由于I/O错误之类的错误导致的异常

1、异常的影响
    异常是导致程序中断执行的一种指令流,程序之中如果出现异常并且没有合理处理的话就会导致程序终止只执行

会产生异常的程序

public class Test {
    public static void main(String[] args) {
        System.out.println("小明要进行数字计算");
        System.out.println("小明计算"+10/0);
        System.out.println("计算完成");
    }
}

异常信息:小明要进行数字计算
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Exception.Test.main(Test.java:8)
    
2、异常处理
语法:
try{
    可能处理异常的语句;
}catch(异常类 对象){
}finally{
    异常出口
}
可以使用:try……catch、try……finally、try……catch……finally进行异常处理

public class Test {
    public static void main(String[] args) {
        System.out.println("小明要进行数字计算");

        try {
            System.out.println("小明计算"+10/0);
        } catch (Exception e) {
            System.out.println("异常已经处理");
        }
        System.out.println("计算完成");
    }
}

获取出现异常的完整信息

public class Test {
    public static void main(String[] args) {
        System.out.println("小明要进行数字计算");

        try {
            System.out.println("小明计算"+10/0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("计算完成");
    }
}

异常信息:小明要进行数字计算
java.lang.ArithmeticException: / by zero
计算完成
    at Exception.Test.main(Test.java:9)
    
如果一段代码中同时出现多个异常,需要使用多个catch块来捕获指定异常,这样会很麻烦,此时引入throws抛出

3、throws关键字
throws用在方法之上

public class Test {
	//主方法异常抛出,如果产生异常会交给JVM处理
    public static void main(String[] args) throws Exception{
        System.out.println(calculate(10, 0));
    }
    public static int calculate(int x,int y) throws Exception {
        return x/y ;
    }
}

4、throw关键字
throw用在方法中,表示人为进行异常抛出

public static void main(String[] args){
    try {
        throw new Exception("抛出异常") ;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

解释throw和throws的区别:
a、throw用于方法内部,表示手工异常抛出
b、throws用于方法声明上,明确告诉用户该方法会产生什么异常,同时可能不处理异常

5、RuntimeException类

范例:

public static void main(String[] args){
	String str = "100" ;
	int num = Integer.parseInt(str) ;
	System.out.println(num * 2);
}

parseInt源码定义
public static int parseInt(String s) throws NumberFormatException
可见这个方法已经抛出异常,在调用的时候不进行异常处理也可以正常执行,属性RuntimeException的范畴

解释Exception和RuntimeException的区别,并列举几个常见的RuntimeException
a、Exception是RuntimeException的父类,使用Exception定义的异常都要求必须使用异常处理
b、使用RuntimeException定义的异常可以由用户选择性的来进行异常处理

常见的RuntimeException:ClassCastException、NullPointerException等。

6、自定义异常类
在Java异常中,对于可能出现的公共长须问题都会提供相应的异常信息,但是有时候这些异常信息不够我们使用,此时就要自定义一个异常类

实现自定义异常类:

class AddException extends Exception {
    public AddException(String msg) {
        super(msg) ;
    }
}
public class Test {
    public static void main(String[] args) throws Exception{
        int num1 = 20 ;
        int num2 = 30 ;
        if (num1+num2==50) {
            //当两数相加为50,抛出AddException
            throw new AddException("错误的相加操作") ;
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值