什么是以异常?
Java代码在运行时期发生的问题就是异常。
比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等
一、异常的分类
1、ERROR错误:java虚拟机的错误,程序无法解决
2、Exception 异常:编程时出现的错误;
二、异常结构
java.lang.Object
java.lang.throwable
java.lang.Error java 虚拟机的错误
java.lang.Exception 编程时出现的错误
编译异常:编译时出现的异常
运行时异常:运行时出现的异常
常见的异常:
1、数组下标越界异常
java.lang.ArrayIndexOutOfBoundsException
int [] num = new int[5];
System.out.println(num[5]);
2、空指针异常
java.lang.NullPointerException
Person p = new Person();
p = null;
System.out.println(p.toString());
3、算数运算异常
java.lang.ArithmeticException
int i = 10/0;
System.out.println(i);
4、类型转换异常
java.lang.ClassCastException
Object date = new Date();
String dt = (String)date;
5、数字转换异常
java.lang.NumberFormatException
String s = "1a3";
int n = Integer.parseInt(s);
System.out.println(n);
三、处理异常
1、处理异常的方式:捕获(抓取),抛出异常
方式1:try{
//可能会出现异常的代码,
//编译时出现错误的代码
//作用域(局部变量或对象)
}catch(抓取或捕获异常对象的类型 e){
//捕获错误信息
//捕获错误信息常用的两种方式:
1.e.getMessage()
2.e.printStackTrace();
//输出自己定义的错误信息
}finally{
}
注意:1、catch块:异常类型如果是子父类关系,子异常在前,父异常在后
2、写多个catch块的目的是更详细捕获不同的错误
3、finally 块无论如何都会执行
4、如果说有异常,同块中后面的代码都不执行
try-catch
try-catch-finally
try-finally
方式2:throws抛出(不能输出异常消息,是一个声明)
一个方法中可能会发生多种异常,但是不能确定,可以用抛出的方式,将异常抛给调用者
throws进行抛出
声明:在方法名的后面throws异常类型,异常类型
2、抛出异常(真正地把异常抛出去)
1、自动抛出:int i= 10/0;
throw
2、手动抛出
方式:throw new RuntimeException("比较对象有误");


package com.lulei.abnormal; public class TestRectangle { public static void main(String[] args) { Rectangle r1 = new Rectangle(2, 3); Rectangle r2 = new Rectangle(2, 2); try { int n = r1.getArea(new String("haha")); } catch (RuntimeException e) { // TODO Auto-generated catch block System.out.println("run"+e.getMessage()); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } } class Rectangle{ int i;//长 int j;//宽 public Rectangle(int i, int j) { super(); this.i = i; this.j = j; } //比较面积 public int getArea(Object obj) throws Exception { if(this == obj) { return 0; }else if(obj instanceof Rectangle) { Rectangle r = (Rectangle)obj; if(this.i*this.j>r.i*r.j) return 1; else if(this.i*this.j<r.i*r.j) return -1; else return 0; }else { throw new RuntimeException("比较对象有误"); } } }
四、自定义异常:
1 package com.lulei.abnormal; 2 3 4 public class MyException extends Exception { 5 6 static final long serialVersionUID = -338751893124229948L; 7 8 public MyException() {} 9 10 public MyException(String msg) { 11 super(msg); 12 } 13 14 }