java 负数异常_java基础之异常

一、Throw(抛出异常,让调用者处理)

Throw(将异常抛给调用者)

在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

1. 创建一个异常对象。封装一些提示信息(信息可以自己编写)。

2. 需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw 就可以完成。

throw 异常对象。

throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

public?class?ThrowDemo?{ ????

public?static?void?main(String[]?args)?{ ????????

//创建一个数组? ????????

int[]?arr?=?{2,4,52,2}; ????????

//根据索引找对应的元素? ????????

int?index?=?4; ????????

int?element?=?getElement(arr,?index); ? ????????

System.out.println(element); ????????

System.out.println("over");

}?

public?static?int?getElement(int[]?arr,int?index){? ???????

//判断??索引是否越界 ? ????????

if(index<0?||?index>arr.length‐1){ ?????????????

???/* ?????????????

判断条件如果满足,当执行完throw抛出异常对象后,方法已经无法继续运算。 ?????????????

这时就会结束当前方法的执行,并将异常告知给调用者。这时就需要通过异常来解决。? ??????????????

*/ ???????????

throw?new?ArrayIndexOutOfBoundsException("哥们,角标越界了~~~"); ????????} ????????

int?element?=?arr[index]; ????????

return?element; ????

}

}???

二、Throws(声明异常),,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).

修饰符?返回值类型?方法名(参数)?throws?异常类名1,异常类名2…{???}

public?class?ThrowsDemo?{ ????

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

read("a.txt"); ????

} ? ????

// 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws关键字进行声明

public static void read(String path) throws FileNotFoundException {

if (!path.equals("a.txt")) {

//如果不是 a.txt这个文件

// 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw

throw new FileNotFoundException("文件不存在");

}

}

}

三、 捕获异常try…catch,捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。

格式:

try{ ?????

编写可能会出现异常的代码

}catch(异常类型??e){ ?????

处理异常的代码 ????

//记录日志/打印异常信息/继续抛出异常

}

演示:

public?class?TryCatchDemo?{ ????

public?static?void?main(String[]?args)?{ ???????

try?{

//?当产生异常时,必须有处理方式。要么捕获,要么声明。 ????????????

read("b.txt"); ????????

}?catch?(FileNotFoundException?e)?{

//?括号中需要定义什么呢? ??????????

//try中抛出的是什么异常,在括号中就定义什么异常类型 ?? ????????????

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

} ????????

System.out.println("over"); ????

} ?

/** ?????

*?我们?当前的这个方法中?有异常??有编译期异常 ?????

*/ ????

public?static?void?read(String?path)?throws?FileNotFoundException?{ ????????

if?(!path.equals("a.txt"))?{

//如果不是?a.txt这个文件? ????????????

//?我假设??如果不是?a.txt?认为?该文件不存在?是一个错误?也就是异常??throw ???????????? ??

? throw?new?FileNotFoundException("文件不存在");

}

}

}

四、 ?nally 代码块:有一些特定的代码无论异常是否发生,都需要执行

?nally的语法: try...catch....?nally:自身需要处理异常,终还得关闭资源。

?

public?class?TryCatchDemo4?{ ????

public?static?void?main(String[]?args)?{ ????????

try?{ ????????????

read("a.txt"); ???????

}?catch?(FileNotFoundException?e)?{ ????????????

//抓取到的是编译期异常??抛出去的是运行期? ????????????

throw?new?RuntimeException(e); ????????

}?finally?{ ????????????

System.out.println("不管程序怎样,这里都将会被执行。"); ????????

} ????????

System.out.println("over"); ???

} ????

/* ?????

* ?????

*?我们?当前的这个方法中?有异常??有编译期异常 ?????

*/ ????

public?static?void?read(String?path)?throws?FileNotFoundException?{ ????????

if?(!path.equals("a.txt"))?{

//如果不是?a.txt这个文件? ???????????

//?我假设??如果不是?a.txt?认为?该文件不存在?是一个错误?也就是异常??throw ????????????

?throw?new?FileNotFoundException("文件不存在");

}

}

}

五、异常注意事项

多个异常使用捕获又该如何处理呢?

1. 多个异常分别处理。

2. 多个异常一次捕获,多次处理。

3. 多个异常一次捕获一次处理

try{ ?????

编写可能会出现异常的代码

}catch(异常类型A??e){??当try中出现A类型异常,就用该catch来捕获. ?????

处理异常的代码 ?????

//记录日志/打印异常信息/继续抛出异常

}catch(异常类型B??e){??当try中出现B类型异常,就用该catch来捕获. ?????

处理异常的代码 ?????

//记录日志/打印异常信息/继续抛出异常

}

六、自定义异常

原因:发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中 没有定义过,例如年龄负数问题,考试成绩负数问题.那 么能不能自己定义异常呢?

异常类如何定义:

1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。

2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。

案例:

//?业务逻辑异常

public?class?RegisterException?extends?Exception?{ ????

/** ?????

*?空参构造 ?????

*/ ????

public?RegisterException()?{} ? ????

/** ?????

* ?????

*?@param?message?表示异常提示 ?????

*/ ????

public?RegisterException(String?message)?{ ????????

super(message); ????

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值