我们知道java.lang包底下有一个java.lang.Throwable他实现了两个接口,一个是Error;另一个是Exception
其中Error:致命的错误,不可修复的,一般出现在JAVA虚拟机
接下来我们主要来介绍一下Exception
一、Exception:异常,代码写错了
1、编译时异常:编译的时候要检查,并且一定要写try-catch编译才能通过
2、运行时异常,他是比较特殊的一个异常,变现为编译时正常,运行的时候出异常 RuntimeException是java.lang包底下的所有的异常当中的唯一一个运行时的异常;其中常出现的异常有:
ArrayIndexOutOfBoundsException
NumberFormatException
NullPointException:当一个引用的值为NULL的时候,试图用他来调用方法或者访问属性就会发生空指针异常
下面这个代码也说明了NumberFormatException这个异常,同时也了解try-catch语句块的使用方法:
import java.util.*;
public class test{
public static void main(String[] args){
try{
int num1 = new Integer(args[0]);
int num2 = new Integer(args[1]);
int num3 = num1 + num2;
System.out.println(num3);
}catch(NumberFormatException e){
System.out.println("请输入合法的整数!!");
}finally{
System.out.println("计算完成");
}
}
}
程序详解:这个程序如果输入计算的数字的时候输入了非整数就会执行catch语句块里面的代码,也就是说如果try语句块里面的代码运行时出现了异常那么try语句块里面异常语句下面的代码就不会再执行,转而执行catch语句块里面的语句,但是finally语句块是始终都会执行的,不管程序有没有发生异常他里面的语句都会执行。
知识扩展:try-catch语句块可以捕获多个异常,但是要注意的是先捕获子类的异常再捕获父类的异常
二、Throws、Throw关键字
1、Throws关键字 :把异常抛给调用他的环境也就是说把异常往上一级抛
2、Throw关键字:手动抛出,用于自己写的异常,今后会在strus框架个性化异常的时候使用。下面这个简单的程序详细的实现该关键字的使用方法
import java.util.*; public class test{ public static void main(String[] args){ Person p = new Person(); p.SetAge(134); } } class Person{ int age; public void SetAge(int age){ if(age<0||age>120){ throw new MyAgeException("年龄是在0到120岁之间"); } else{ this.age = age; } } } class MyAgeException extends RuntimeException{ MyAgeException(String msg){ super(msg); } }
程序详解:上述程序自己手动的写了一个异常MyAgeException继承至RuntimeException当main函数传入年龄的时候我们自己对传入的年龄进行判断,如果不符合条件的话就使用关键字throw新建一个MyAgeException异常对象并把异常传给这个对象,同时传入一个异常的提示信息。因为父类中已经写好了显示信息的方法,所以我们只要调用父类的显示方法即可,所以重写MyAgeException 构造方法的时候方法体里面直接调用父类的方法super(msg)来显示信息