1,异常:异常就是程序在运行时出现的不正常情况。
2,异常的由来:问题也是现实生活中的一个具体事物,也可以通过java类的形式进行描述,并封装成对象。
其实异常就是java对不正常情况进行对象封装后的一种体现。
3,异常可分为两种:一种是严重的问题Error,Exception。
Throwable:
Error:一般不编写针对性的代码进行处理。
Exception:一般编写代码进行处理。
异常的处理:try{
要被检测的语句。
}
catch(异常类型 e){
处理方式。
}
finally{
一定会执行的语句。
}
常见处理方式:e.getMessage();
e.toString();
e.printStackTrace(); //打印异常名称,异常信息,异常的出现位置。
//jvm的默认处理方式就是调用printStackTrace()方法。
第二种处理方式是:在功能上通过throws声明此功能可能会出现问题。调用者可以自己处理try{}catch(){},
也可以在调用者的方法上同样抛出用throws。
对多异常的处理:应当声明更具体的异常。
对方声明了几个异常就应有几个catch块与之相对应。
父类的异常处理应该放在子类的下面。
4,自定义异常:1,在项目中会出现一些问题,这些问题并没有被java描述并封装成对象,所以就需要按照java中定义异常的思想
将特有的问题进行自定义异常封装。
2,自定义异常需要继承Exception或其子类,在使用时需要手动使用throw抛出该异常。
3,当函数内部出现throw抛出异常时,要么在内部try catch处理,要么在函数上通过throws声明交给调用者处理。
一般情况下当函数内部抛出异常时,函数上一定要声明这些异常。
4,因为父类已经把异常信息的操作都完成了,所以在自定义异常中子类只需把异常信息通过super传递给父类。
5,因为只有Throwable体系中的成员才具有可抛性,所以自定义异常需要是此体系中的子类,只有成为该体系的一员,
才能被throw和throws操作。
6,throws定义在函数上,throw定义在函数内。
7,自定义异常不能抛出比其父类更多的异常。
自定义一个异常类实例如下:
class FushuException extends Exception{
private double num;
FushuException(){
super();
}
FushuException(String message,int num){
super(message);
this.num = num;
}
public double getNum(){
return num;
}
}
class FushuDemo{
public double div(int a,int b)throw FushuException{
if(!b>0){
throw new FushuException("商不能为负数,出现负数的数字是:",b);
}
return a/b;
}
}
class FushuExceptionDemo{
public static void main(String[] args){
FuduDemo fd = new FushuDemo();
try{
double d = fd.div(5,-5);
System.out.println("结果为:"+d);
}
catch(FushuException e){
e.printStackTrace();
}
}
}
5,RuntimeException:运行时异常,是Exception的子类,如果函数内容抛出该异常,函数上可以不用声明,编译可以通过,
如果函数上声明了该异常,调用者可以不用处理,编译可以通过。
此异常不需要调用者处理,当该异常发生时,说明出现了不希望程序继续进行的情况,希望程序停止。
实例如下:
class FushuException extends RuntimeException{
private double num;
FushuException(String message){
super(messgae);
}
}
class Demo{
public double div(int a,int b){ //运行时异常不必在函数上声明。
if(b<=0)
throw new FushuException("b值不能为负数或0!");
return a/b;
}
}
class RuntimeDemo{
Demo d = new Demo(); //运行时异常可以不用处理。
double dou = d.div(5,-2);
System.out.println("结果是:"+dou);
}
6,异常的再次抛出
当本级中捕获的异常传递给下一级异常接收者,下一级异常接受者无法理解时,需要转换成一个下一级能够理解的异常在抛出此异常,
异常的抛出需要保证异常链不断。