异常

                                        异常

     在软件开发 过程中,程序中出现错误是不可避免的,程序中的错误按照不同性质,可分为三类:

  1.语法错,如标志服未标明,表达式中运算符和操作数类型不兼容,括号不匹配,语句末尾缺少分号。。。。

2语义错:如输入格式错,除数为0,给变量赋值超出允许范围等

3逻辑错,编译运行都通过后,但是结果和预期结果不同

异常的继承体系

Throwable: 它是所有错误与异常的超类(祖宗类)

他有许多子类,可根据需要调用

异常处理的两种方式

1try ,catch

2.throws

public class yunxingyic {
/*
 * 异常:编译时期异常:只要调用了抛出异常的方法没有处理,就会编译失败
 * 如果出现编译时期异常(try   throws)
 * 运行时期异常:方法内部抛出异常是运行异常 new xxxexception
 * 如果是运行时期异常,方法声明不需要throws,调用者不需要处理
 * 一旦发生,不要处理,请你修改源代码,没有执行的意义
 * runtimeexception及其他子类
 * */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double arrew=getarea(0);

    }
    //定义一个方法,计算圆的面积
    
    public static double getarea(double r){
        if(r<=0){
            throw new RuntimeException("半径不符合要求");
        }
        return Math.PI*r*r;
    }

}

还有,当父类有异常方法,在子类继承时,要注意以下几点

/*
 * 子类继承父类有异常的方法时
 * 1可以选择不抛,如果选择抛出,异常类不能超过父类的异常
 * 可以是和父类一样的异常,可以是父类异常的子类
 * 2假如父类方法中没有抛异常,子类重写这个方法也不可以抛异常
 * 3假如父类中没有抛异常,但是子类中重写这个方法时,在方法中调用了抛出异常方法,
 * 那只能用trycatch处理
 * */
class fu{
    public void method()throws NullPointerException{}
}
class zi extends fu{
    public void method(){
        try {
            me();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

                                                            自定义异常

public class fushuException extends RuntimeException{
    public fushuException(String s){
        super(s);
    }
    public fushuException(){}

}
public static void main(String[] args) {
        // TODO Auto-generated method stub
        //定义一个计算平均数的方法
        
    }
    public static double avgnum(double...b){
        double result=0;
        double sum=0;
        for(int i=0;i<b.length;i++){
            if(b[i]<0){
                throw new fushuException("不能穿负数");
            }
            sum+=b[i];
        }
        return sum/b.length;
    }
原文地址:https://www.cnblogs.com/jingyukeng/p/8885705.html