- 1. 什么是异常?
- 2.Java 中异常相关类结构
- 3.Java中常见的异常
- 4.Java异常处理机制
- 5.自定义异常
在程序执行过程中出现的报红现象叫作异常,如下图:
异常(Exception) 指在程序正常运行过程中,由于某些意外发生而引起程序终止运行的意外情况。需要注意的是异常不是错误(Error)
,Java中的错误特指毁灭性的、程序员无法解决的错误,如JVM崩溃、硬件损坏。
3.Java中常见的异常
- Throwable类:所有异常和错误的超类,有两个子类分别是错误(Error)和异常(Exception)。
- 其中异常类Exception又可分为编译期异常(非运行期异常)和运行期异常(RuntimeException)。编译期异常是除过运行期异常以外的异常,是强行处理的异常;运行期异常一般是由程序逻辑错误引起的异常,在程序运行过程中会出现的异常。
1.java.lang.NullPointerException:空指针异常
2. java.lang.ArrayIndexOutOfBoundsException:数组下标越界
3. java.lang.ClassCastException:类型转换异常
4. java.lang.ArithmeticException:算术异常
5. java.lang.NumberFormatException:数字格式化异常
6. java.io.IOException:IO 异常(输入输出异常)
7. java.sql.SQLException:SQL 异常(数据库异常)
8. java.lang.ClassNotFoundException:类找不到异常
9. java.io.FileNotFoundException:文件找不到异常
4.Java异常处理机制1.try(引发异常):是由于引发异常或监控可能出现异常的代码,将可能出现异常的代码放到try块中,当其中的代码一旦出现异常,则try块就可以检测到并交给catch进行捕获及处理。例:
Scanner scanner = new Scanner(System.in);
Integer result = null;
try {
System.out.print("请输入第一个数字:");
Integer num1 = scanner.nextInt();//非法输入异常
System.out.print("请输入第二个数字:");
Integer num2 = scanner.nextInt();//非法输入异常
result = num1 / num2;//算数异常
}finally{//单纯try语句会报异常: 'try' 不带有 'catch', 'finally' 或资源声明
System.out.print("结果为:" + result);
}
System.out.println("程序结束!");
注意
:try{}不能单独使用,必须和catch或finally一起使用。
2.catch(处理):是用于捕获并处理异常;由于一段或n段代码可能出现多个不同类型的异常,我们在使用时一般使用多重catch来处理不同类型的异常。例:
Scanner scanner = new Scanner(System.in);
Integer result = null;
try {
System.out.print("请输入第一个数字:");
Integer num1 = scanner.nextInt();//非法输入异常
System.out.print("请输入第二个数字:");
Integer num2 = scanner.nextInt();//非法输入异常
result = num1 / num2;//算数异常
}catch (InputMismatchException ex){
System.out.println("您输入的数字有误!");
ex.printStackTrace();//打印异常信息
}catch (ArithmeticException ex){
System.out.println("除数不能为零");
ex.printStackTrace();
}catch (Exception ex){
/**其他异常
* Exception可以捕获到所有异常;如果需要捕获多个异常的情况将
* Exception放到最后一个catch处理
*/
System.out.println("未知异常");
}
3. finally(最终):最终会被执行的,在finally代码块中的代码无论是否出现异常都会被执行到。(完整例子):
Scanner scanner = new Scanner(System.in);
Integer result = null;
try {
System.out.print("请输入第一个数字:");
Integer num1 = scanner.nextInt();//非法输入异常
System.out.print("请输入第二个数字:");
Integer num2 = scanner.nextInt();//非法输入异常
result = num1 / num2;//算数异常
}catch (InputMismatchException ex){
System.out.println("您输入的数字有误!");
ex.printStackTrace();//打印异常信息
}catch (ArithmeticException ex){
System.out.println("除数不能为零");
ex.printStackTrace();
}catch (Exception ex){
/**其他异常
* Exception可以捕获到所有异常;如果需要捕获多个异常的情况将
* Exception放到最后一个catch处理
*/
System.out.println("未知异常");
}finally {
System.out.print("结果为:" + result);
}
System.out.print("程序结束");
4.throws(抛出异常):在方法声明部分抛出异常,告诉调用者当前方法内部会出现XXX异常;抛出去,让别人处理。
public void chu(Integer num1, Integer num2) throws ArithmeticException, NullPointerException {
int result = num1 / num2;
System.out.println(result);
}
public void Jisuan() throws ArithmeticException, NullPointerException {
chu(10, 0);//运行期异常不会报错,需要抛出去
}
5.throw(引发新异常):在方法体内部使用,用于抛出新异常(引发新异常),新异常为业务异常;通过 throw 关键字来引发新异常,引发的新异常需要直接使用 try-catch 处理或使用 throws 抛出。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入您的年龄:");
int age=scanner.nextInt();
if(age>=18){
System.out.println("欢迎光临!");
}else{
throw new AgeException("未成年人不得入内");//出现异常要么处理要么抛出
}
}
5.自定义异常
当系统提供的异常类无法满足我们实际开发需求时,开发人员就要根据实际情 况自定义异常;自定义异常需要继承 Exception 类 或 Exception 的子类;
public class AgeException extends RuntimeException {
public AgeException(){
System.out.println("年龄不符");
}
public AgeException(String message){//提供明确的提示信息
super(message);
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)