异常
在软件开发 过程中,程序中出现错误是不可避免的,程序中的错误按照不同性质,可分为三类:
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; }