自定义异常:
需继承Exception类
步骤:
1.创建自定义异常类
2.在方法中通过throw关键字抛出异常对象
3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常继续进行下一步操作。
4.在出现异常方法的调用者中捕获并处理异常
import java.util.Scanner;
//测试异常类
public class Main {
public static void main(String[] args) {
try {
new Main().test(20);
} catch(Exception e) {
//这里可以增加一些处理的代码块,比判断等这些代码去处理异常不要只是简单的输出
System.out.println("MyException"+e);//打印异常信息,e:相当于调用了toString方法
} finally {
}
}
//可能会存在异常的方法
static void test(int a)throws MyException{//当有异常我们方法内不处理时,向上抛出,那这时,谁调用这个方法,那谁就要用try-catch方式去处理这个异常
System.out.println("输入的值为="+a);
if (a>10){
throw new MyException(a);//抛出
}
System.out.println("ok");
}
}
//自定义异常类
class MyException extends Exception{
//传递数字>10抛出异常
private int detail;
public MyException(){}
public MyException(int detail){
this.detail=detail;
}
//打印方法:异常的打印信息
public String toString(){
return "MyException{"+"detail="+detail+"}";
}
}
实际应用中总结:
处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
在多重catch块后面,可以加一个catch(Exception)处理可能会被遗漏的异常
对于不确定的代码也可以加上try-catch,处理潜在的异常
尽量去处理异常,切忌不是只是简单地调用printStackTrace()去打印输出
具体如何处理异常,要根据不同的业务需要和异常类型去决定
尽量添加finally语句块去释放占用的资源
见名知意
package 异常;
/*如何定义异常类
* 1、继承于现有的异常结构:RuntimeException 、Excption
* 2、提供全局常量serialVersionUID
* 3、提供重载的构造器
*/
public class MyException extends RuntimeException{//要处理什么异常就把类名命名为什么
//序列号:唯一标识符
static final long serialVersionUID = -7034897190745766939L;
public MyException() {
}
public MyException(String msg) {
super(msg);
}
}
class Studeb1{
int id;
public void iymm(int id) {//这里可以不写throws Exception
if (id>0) {
this.id=id;
}else {
// System.out.println("你的数据非法");
//手动抛出异常对象
// throw new RuntimeException("你的数据非法");
throw new MyException("你的数据非法");
//错误的,只有异常体系的才能throw
// throw new String("不能输入负数");
}
}
@Override
public String toString() {
return "Studeb [id=" + id + "]";
}
}
class Test{
public static void main(String[] args) {
try {
Studeb1 a=new Studeb1();
a.iymm(1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}