异常
1.常见的异常:
数组下标越界 ArrayIndexOutOfBoundsException
类型转换异常 ClassCastException
空指针异常 NullPointerException
数字方面的异常
2.异常是什么?
Java代码在运行时候发生的问题就是异常,在Java中,把异常信息封装成了一个类。当出现了
问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)
Throwable是Java 语言中所有错误或异常的超类,即祖宗类
Error 和 Exception 是Throwable 的2个子类
RuntimeException (Exception的子类 ) 是运行时异常
Error 是严重错误
3.RuntimeException 和Error 区别特点
异常:指程序在编译、运行期间发生了某种异常(XxxException),我们可以对异常进行具体的
处理。若不处理异常,程序将会结束运行。
l 异常的产生演示如下:
public class Demo01 {
public static void main(String[] args) {
int[] arr=null;
System.out.println(arr.length);//运行时会产生空指针异常
}
}
错误:指程序在运行期间发生了某种错误(XxxError),Error错误通常没有具体的处理方式,程
序将会结束运行。Error错误的发生往往都是系统级别的问题,都是jvm所在系统发生的,并反
馈给jvm的。我们无法针对处理,只能修正代码。
l 错误的产生演示如下:
public static void main(String[] args) {
int[] arr=new int[100010001024];//该句运行时发生了内存溢出错误
OutOfMemoryError,开辟了过大的数组空间,导致JVM在分配数组空间时超出了JVM内存空间,直
接发生错误。
}
4.编译时异常和运行时异常
编译时异常类:
非RuntimeException类及其非RuntimeException子类
运行时异常类:
RuntimeException类及其RuntimeException子类
5.异常处理
5.1 throw 和 throws 抛出处理
public static int method(int [] num,int index)throws
ArrayIndexOutOfBoundsException,NullPointerException{
if(num == null){ //空指针异常
throw new NullPointerException();
}
if(index<0 || index>=num.length){ //数组越界异常
throw new ArrayIndexOutOfBoundsException();
}
return num[3];
}
try catch捕获处理
public static void main(String[] args){
int [] num = new int[5]; //越界
// int [] num = null; //空数组
try{
int result = method(num,3);
System.out.println(result);
}catch(ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}catch (NullPointerException e){
e.printStackTrace();
}finally { //不管程序有没有产生捕获的异常都会输出finally代码块里面的内容
System.out.println(“结束了!”);
}
System.out.println(“main方法结束!”);
}
6.异常在方法重写细节
父类方法没有异常,子类不能抛出Exception异常,可以是其子类异常
父类方法上有异常,子类可以抛出异常,也可以不抛异常,还可以抛出子集
父类方法上有多个异常,子类可以同时一样抛出,也可以用父类异常类
子类抛出的异常不能超过父类
7.自定义异常类
Class 异常名 extends Exception{ *//或继承RuntimeException
public 异常名(){
}
public 异常名(String s){
super(s);
}
}
/
*** 自定义异常类
- */
public class AgeException extends Exception{
public AgeException(){
super();
}
public AgeException(String str){
super(str);
}
}
public class Person {
int age;
Person(){}
Person(int age){
if(age<0){
try {
throw new AgeException(“构造方法处,年龄不能为负”);
} catch (AgeException e) {
e.printStackTrace();
}
}
this.age = age;
}
public void setAge(int age){
if(age<0){
throw new AgeException(“set方法处,年龄不能为负”);
} catch (AgeException e) {
e.printStackTrace();
}
}
this.age = age;
}
public int getAge(){
return age;
}
}