java基础-异常

为了程序的正常运行,为了定位代码问题所在,对用户的友好提示

1.异常体系

SQlException——》编译时异常
在这里插入图片描述

  • Throwable类是Java语言中所有错误和异常的超类。 只有作为此类(或其子类之一)的实例的对象throw Java虚拟机抛出,或者可以由Java throw语句抛出。
  • 类Throwable及其子类有两个构造函数,一个不带参数,另一个String可用于生成详细消息的String参数。
  • 此外,那些可能与它们相关的原因的子类应该有两个构造函数,一个采用Throwable (原因),另一个采用String (详细消息)和Throwable (原因)。

构造方法

权限构造器描述
publicThrowable()使用 null构造一个新的throwable作为其详细消息。
publicThrowable​(String message)使用指定的详细消息构造一个新的throwable。
publicThrowable​(Throwable cause)构造具有指定的原因和详细消息的新throwable 。
publicThrowable​(String message, Throwable cause)使用指定的详细消息和原因构造一个新的throwable。
protectedThrowable​(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)构造具有指定详细消息的新throwable,原因是,启用或禁用了 suppression ,并启用或禁用了可写堆栈跟踪。

2.异常处理

在这里插入图片描述

  • 1.异常捕获处理:try-catch或者try-catch-finally
        String s = "a";
		int i = 0;
        try {
            i= Integer.parseInt(s);
            System.out.println(i);
        } catch (NumberFormatException e) {
            System.out.println("类型转化出错");
            //异常对象本身的信息
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (ClassCastException e1) {
            System.out.println("类型不匹配出错");
        } finally {
            System.out.println("重新输入");
        }
        System.out.println(i);

结果

类型转化出错
For input string: "a"
重新输入
0
java.lang.NumberFormatException: For input string: "a"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at StringStudy.main(StringStudy.java:14)——》异常位置
  • 2.异常抛出:throws+异常类型。

    static void test2() {
    //手动抛出异常对象
        throw new NumberFormatException();
    }
    
//抛出异常声明,交给其他的处理
    public static void main(String[] args) throws NumberFormatException, IOException {
//处理异常
        try {
            test2();
        } catch (NumberFormatException e) {
            System.out.println("类型转化出错");
            //异常对象本身的信息
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

结果

类型转化出错
null
java.lang.NumberFormatException
	at StringStudy.test2(StringStudy.java:42)
	at StringStudy.main(StringStudy.java:31)

3.处理原则

运行时异常一定要改代码,增加参数校验,判断等。
编译时异常进行异常处理。

  • 1.多个异常,且存在子父类关系时,子类在上(优先匹配)
  • 2.三大原则:具体明确,提早抛出,延迟捕获.
    具体明确: 通过使用多个catch块来给用户提供捕获到异常的明确信息。
    提早抛出: 检测到错误时立刻抛出异常来实现迅速失败。
    延迟捕获: 解决不了,那么就不要处理异常,把它留到后面捕获和在恰当的层面处理。

4.自定义异常

/**
 * 多数情况下,创建自定义异常需要继承Exception,本例继承Exception的子类RuntimeException
 */
 
public class CustomerException extends RuntimeException {
 
	private String retCd ;  //异常对应的返回码
	private String msgDes;  //异常对应的描述信息
	
	public CustomerException() {
		super();
	}
 
	public CustomerException(String message) {
		super(message);
		msgDes = message;
	}
 
	public CustomerException(String retCd, String msgDes) {
		super();
		this.retCd = retCd;
		this.msgDes = msgDes;
	}
 
	public String getRetCd() {
		return retCd;
	}
 
	public String getMsgDes() {
		return msgDes;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值