常见异常分类、异常处理
常见的异常分类:
程序中的异常
示例1:给出除数和被除数,求商
如果除数为0,出异常
如果除数或者被除数不是数字,出异常
示例2:将d:/a.txt复制到e:/a.txt • 如果d:/a.txt不存在
如果e:/存在a.txt • 如果e盘空间不足
如果复制过程中出错
if(“d:/a.txt”这个文件存在){
if(e盘的空间大于a.txt文件长度){
if(文件复制一半IO流断掉){
停止copy,输出:IO流出问题!
}else{
copyFile("d:/a.txt","e:/a.txt");
}
}else{
输出:e盘空间不够存放a.txt!
}
}else{
输出:a.txt不存在!
}
程序中有异常时,面对异常该怎么办呢?
方式1:由开发者通过if-else来解决异常问题
代码臃肿:业务代码和异常处理代码放一起
程序员要花很大精力"堵漏洞“
程序员很难堵住所有“漏洞”,对程序员本身要求较高
方式2:开发者不需要通过if-else来解决异常问题,而是Java提供异常处理机制。它将异常处理代码和和业务代码分 离,使程序更优雅,更好的容错性,高键壮性。
异常的概念:
软件程序在运行过程中发生的不正常的事件,比如要打开某一个文件时,这个文件可能不存在或者格式不对;你要读取数据库的数据,数据可能是空的;我们把遇见的这些问题,就叫做异常(Exception)
JAVA是采用 面向对象 的方式来处理异常。
处理过程:
1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常 对象提交给JRE,
2.捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常,JRE在方法的调用栈中查找,从生成异常的方法开始回 溯,直到找到相应的异常处理代码为止
try-catch处理异常
try {
copyFile("d:/a.txt","e:/a.txt"); //假设这里出现异常
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace(); //在这里进行捕获
}
1.RuntTimeException运行时异常分析_运行时异常处理
这类错误通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常机制来处理这类异常,经常需要通过增加“逻辑判断来处理这些异常”
int b=0;
System.out.println(1/b);
解决:
int b=0;
if (b!=0) {
System.out.println(1/b);
}
当程序访问一个空对象的成员变量或方法,或者访问一个空数组成员时会发生空指针异常(NullPointerException),怎么
处理,可以加个if语句体,解决空指针异常,通常是增加非空判断
2.ClassCastException强制转型报错
public class _Exception {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal animal=new Dog();
Cat c=(Cat)animal;
}
}
class Animal{……}
class Dog extends Animal{……}
class Cat extends Animal{……}
报错:Exception in thread "main" java.lang.ClassCastException: cn.xiaomu_07.Dog cannot be cast to cn.xiaomu_07.Cat
at cn.xiaomu_07._Exception.main(_Exception.java:28)
解决:
public class _Exception {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal animal=new Dog();
if (animal instanceof Cat) {
Cat c=(Cat)animal;
} }}
class Animal{……}
class Dog extends Animal{……}
class Cat extends Animal{……}
3.数组越界(ArrayInsexOutOfBoundsException)异常处理
int[] arr=new int[5];
System.out.println(arr[5]);
解决:
int[] arr=new int[5];
int v=5;
if (v<arr.length) {
System.out.println(arr[5]);
}
System.out.println(arr[5]);
}