常见的异常分类:java
程序中的异常
示例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(); //在这里进行捕获
}code
1.RuntTimeException运行时异常分析_运行时异常处理
这类错误一般是由编程错误致使的,因此在编写程序时,并不要求必须使用异常机制来处理这类异常,常常须要经过增长“逻辑判断来处理这些异常”对象
int b=0; System.out.println(1/b);
解决:blog
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]); }