throws
在因为调用div方法的main()方法没有catch语句,所以报错
class Demo
{
int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示
{
return a/b;
}
//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)
}
class YichangDemo
{
public static void main(String[] args)
{
new Demo().div(4,1);
System.out.println("Hello World!");
}
}
如把throws Exception注释掉,没有此标记,编译时就提示catch(没有声明说此代码可能会出现问题)
class Demo
{
int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示
{
return a/b;
}
//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)
}
class YichangDemo
{
public static void main(String[] args) throws Exception
{
int c=new Demo().div(4,1);
System.out.println(c);
}
}
在两个方法中都用throws抛出,异常会交给main方法上一级(虚拟机)处理
我们可以调用throw标记的div方法,然后在其上一级中书写catch语句,捕获异常如:
class Demo
{
int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示
{
return a/b;
}
//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)
}
class YichangDemo
{
public static void main(String[] args)
{
try{
int c=new Demo().div(4,0);
System.out.println(c);
}
catch (Exception e){
System.out.println(e);
}
System.out.println("over");
}
}
——————————————————————————————
运行结果:
多异常:
try{
...
}
catch(ArithmeticException e){
...
}
catch(ArrayIndexOutOfBoundException){}{
...
}
注意:
1.一个try语句可能会报出多种不同的异常,所以在声明异常时,尽量声明更为具体一些。这样处理的也更具体
2.声明几个异常,理论上应该有几个相应的catch语句对异常进行处理,
3.如果出现多个catch语句,并且有继承关系,如Exception,ArithmeticException,父类语句放在最后面。(如果放在其他catch语句前,编译时会报异常)
4.在进行catch处理时,要定义具体的处理方式,不要简单的只有一条输出语句报出异常信息。
自定义异常:
自定义一个异常类:
需要手动抛出
class FuShuException extends Exception{
}
代码示例
class FuShuException extends Exception
{
FuShuException(String msg){//构造函数,定义此异常新信息,
//也可以自定义构造函数,个人那句自己开发的需要,决定传入的参数,异常信息
super(msg);//父类有获取异常信息的方法,不用再写
}
}
public class Demo {
public int div(int a,int b)throws FuShuException,ArithmeticException{//在div里面的语句中用了throw,
//所以在此声明throws,抛出异常,交给上一级处理
if(b<0)
throw new FuShuException("出现了除以负数的情况");//手动通过throw关键字抛出自定义异常传入了异常信息
return a/b;
}
public static void main(String[] args){
Demo a=new Demo();
try{
int x=a.div(5,-1);
System.out.println("程序正常:"+x);
}
catch(FuShuException e){
System.out.println("异常处理,进入自定义异常");
System.out.println(e);
}
catch(ArithmeticException e){
System.out.println("异常处理,除0");
System.out.println(e);
}
System.out.println("over");
}
}
注意:自定义的异常必须是自定义的一个类继承了Exception(或者Throwable(不建议))
在需要抛出自定义异常的方法中,用throws语句标记此方法,代表抛出,在具体的可能会有异常的语句中,用throw抛出自定义异常。
用了throws和throw后必须要在上一级方法中用catch语句捕获,进行处理异常。
throws:是用在函数上,后面跟异常类,可以多个,用,隔开
throw:使用在函数内,后跟异常对象,如自定义的异常对象,在抛出对象时使用