Java异常总结

Java代码在运行时期发生的问题就是异常
Throwable是java语言中所有错误或异常的超类


Exception 异常 将异常处理掉,程序可以继续执行
Error 错误  必须修改程序


异常一旦被抛出,后面的所有程序都不再执行


public class ArrayTools {
  public static void main(String[] args) {
int[] arr={1,2,3};
int i=getArray(arr);
System.out.println(i);
}
  
  public static int getArray(int[] arr){
 int i=arr[3];
 return i+1;
  }
}


throw 写在方法内部,用于抛出异常的对象
throw 后面必须写new 对象,必须是异常的对象
可以是 Exception也可以是其子类
public class ExceptionDemo {
   public static void main(String[] args) {
int[] arr=null;
int i=getArray(arr);
System.out.println(i);
}
   public static int getArray(int[] arr){
  //对方法的参数进行合法性的判断
  if (arr==null) {
//抛出异常的形式
  throw new Exception("传递数组不存在");
}
  //对数组进行判断,判断数组中是不是有元素
  if (arr.length==0) {
throw new Exception("数组中没有任何元素");
}
  
  int i=arr[arr.length-1];
  return i*2;
   }
}


方法中声明异常关键字 throws用于在方法的声明上,标明此方法可能出现异常
请调用者处理,throws 必须写抛出的异常


异常的处理方式:
 try...catch...finally
 格式:
   try{
  被检测的代码
  可能出现异常的代码
   }catch(异常类名 变量){
  异常的处理方式
  循环,判断,调用方法,变量
   }finally{
  必须要执行代码
   }
   
平级异常:抛出的异常类之间,没有继承关系,没有顺序
上下级关系的异常,越高级的父类越要写在下面


finally必须执行代码


编译异常:调用了抛出异常的方法,不处理编译失败(try throws)
运行异常:抛出的异常是 RuntimeException 


运行异常的特点:
 方法内部抛出的异常是运行异常,new XXXException
 方法的声明上,不需要 throws 语句,调用者不需要处理
 设计原因:
   运行异常,不能发生,但是如果发生了,程序员停止程序,修改源代码
   
   运行异常:一旦发生,不要处理,请直接修改源代码,运行异常一旦发生,后面的代码没有执行的意义
 
public class RuntimeExceptionDemo {
  public static void main(String[] args) {
try {
function();
} catch (Exception e) {
// e.printStackTrace();
}
}
  
  public static void function(){
 throw new RuntimeException();
  }
}
/*
 * 继承后,在子类重写父类方法的时候,异常处理
 * 结论:
 *   父类的方法,结果抛出异常,子类重写后
 *     可以不抛出异常
 *     也可以抛出异常,但是如果子类要抛,抛出的异常不能大于父类的异常
 *     大于指的是继承关系
 *     
 *   父类的方法,没有异常抛出,子类重写后
 *     也不能抛出异常
 *     如果子类中调用了抛出异常的方法,别无选择,只能try...catch处理
 */
 
 /*
 * Throwable中的方法
 * String getMessage() 对异常信息的详细描述  异常
 * String toString() 对异常信息的简短描述 java.lang.Exception: 异常了
 * void printStackTrace() 将异常信息追踪到标准的错误流
 * java.lang.Exception: 异常了
at cn.servyou.demo03.Exception04.function(Exception04.java:19)
at cn.servyou.demo03.Exception04.main(Exception04.java:11)
   JVM默认调用方法
 */
public class Exception04 {
  public static void main(String[] args) {
try {
 function();
} catch (Exception e) {
        //System.out.println(e.toString());
e.printStackTrace();
}
}
  
  public static void function() throws Exception{
 throw new Exception("异常了");
  }
}


/*
 * 自定义异常
 *   继承Exception,或者RuntimeException
 *   构造方法中,用super将异常信息,传递给父类
 */
public class FuShuException extends RuntimeException {
  public FuShuException(String s){
 super(s);
  }
}
--------------------------------------------------------------
public class ExceptionDemo {
public static void main(String[] args) {
int avg=getAvg(50,60,-70,80);
System.out.println(avg);
}
/*
 * 传递成绩,计算成绩的平均数
 * 成绩没有负数,需要抛出异常,停止运算
 */
public static int getAvg(int...source){
int sum=0;
for (int s : source) {
if (s<0) {
throw new FuShuException("成绩错误 "+s);
}
sum=sum+s;
}
return sum/source.length;
}

}


欢迎加入讨论:

<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=89ae88ef49ec8a85695676f7dadeb6a6f359b832273795c456939ae2b07c63c5"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="Java交流讨论群" title="Java交流讨论群"></a>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值