常见异常分类:

import java.io.File;
import java.io.FileInputStream;public class Test{public static void main(String[] args) {//FileNotFoundExceptionFile file = new File("test.txt");FileInputStream f = new FileInputStream(file);int i = f.read();f.close();}
}
import java.util.Date;
import java.util.Scanner;public class Test{public static void main(String[] args) {//NullPointerException(空指针异常)String str = null;System.out.println(str.charAt(0));//ClassCastException(类型转换异常)Object obj = new Date();String str3 = (String)obj;//NumberFormatException(数值转换异常)String str4 = "ab";int i1 = Integer.parseInt(str4);//InputMismatchException(输入不匹配)Scanner scanner = new Scanner(System.in);int i2 = scanner.nextInt();System.out.println(i2); //如果输入的不是数字,则异常//ArithmeticException(算数异常)int a = 2;int b = 0;System.out.println(a / b);//ArrayIndexOutOfBoundsException(数组角标越界)int[] arr = new int[3];System.out.println(arr[3]);//StringIndexOutOfBoundsException(字符串角标越界)String str2 = "abc";System.out.println(str.charAt(3));}
}

程序在执行过程中,一旦出现异常,系统就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。一旦抛出对象以后,后面的代码就不再执行。

处理异常的方式:(1)try-catch-finally;(2)throws

一.   try-catch-finally

try{

可能出现异常的代码

}catch(异常类型1  变量名1){

处理异常的方式1

}catch(异常类型2  变量名2){

处理异常的方式2

} . . .

. . .

finally{

一定会执行的代码

}

IDEA快捷键:CTRL+ALT+T  (鼠标选中准备进行try-catch-finally的区域,然后使用快捷键)

(1)finally是可选的。

(2)使用try将可能出现异常的代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。

(3)一旦try中的异常对象匹配到某一个catch时,就进入到catch中进行异常处理。一旦处理完成,就跳出当前的try-catch结构,继续执行后面的代码。

(4)catch中的异常类型如果有子父类关系,则要求子类一定声明在父类的上面,否则会报错。

(5)异常处理的常用方式:getMessage()、printStackTrace()

(6)try结构中定义的变量,在try结构外不能被调用。

(7)try-catch-finally在处理编译时异常时,使程序在编译时不报错,但是执行时仍可能报错。

public class Test{public static void main(String[] args) {//NumberFormatExceptionString str = "ab";try{int i1 = Integer.parseInt(str);}catch(NumberFormatException e){System.out.println("出现数值转换异常");System.out.println(e.getMessage());//e.printStackTrace();}catch(NullPointerException e){System.out.println("出现空指针异常");}catch(Exception e){System.out.println("出现异常");}System.out.println("end");//输出:出现数值转换异常//     For input string: "ab"//     end}
}

(8)finally中声明的是一定会被执行的代码,即使catch中又出现了异常、try中有return语句或catch中有return语句等情况。

public class Test{public static void main(String[] args) {//NumberFormatExceptionString str = "ab";try{int i1 = Integer.parseInt(str);}catch(NumberFormatException e){System.out.println("出现数值转换异常");int[] arr = new int[3];System.out.println(arr[3]);}catch(NullPointerException e){System.out.println("出现空指针异常");}catch(Exception e){System.out.println("出现异常");}finally{System.out.println("一定会执行");}System.out.println("end");//输出:出现数值转换异常//     一定会执行}
}

(9)像数据库连接、输入输出流、网络变成Socket等资源,JVM不能自动回收,我们需要手动进行资源释放,此时的资源释放需要声明在finally中。

(10)try-catch可以嵌套使用

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class Test{public static void main(String[] args) {//FileNotFoundExceptionFileInputStream f = null;try{File file = new File("test.txt");f = new FileInputStream(file);int i = f.read();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}finally {try{if(f != null){f.close();}}catch (IOException e){e.printStackTrace();}}}
}

二.    throws + 异常类型

“ throws + 异常类型 ”写在方法的声明处,指明执行此方法时可能会出现的异常类型,一旦方法体执行时出现异常,会在异常代码处生成一个异常类对象,此对象满足throws后的异常类型时,就会被抛出,后面的代码不会继续执行。

IDEA快捷键:ALT+ENTER (光标移到标红线处,然后使用快捷键)

try-catch-finally:真正把异常解决了;throws:将异常抛给方法的调用者,并没有真正处理异常。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class Test{public static void main(String[] args) {try{test2();               //不能继续往上抛,必须使用try-catch解决}catch (IOException e){e.printStackTrace();}test3();  //不会报错}public static void test3(){try{test1();}catch (IOException e){e.printStackTrace();}}public static void test2() throws IOException{test1();}public static void test1() throws IOException{//FileNotFoundExceptionFile file = new File("test.txt");FileInputStream f = new FileInputStream(file);int i = f.read();f.close();}
}

子类重写的方法抛出的异常不大于父类被重写的方法抛出的异常

父类中被重写的方法没有用throws抛异常,则子类重写的方法也不能用throws抛异常,如果有异常,只能使用try-catch-finally方式处理。

import java.io.FileNotFoundException;
import java.io.IOException;public class Test{public static void main(String[] args) {}}class SuperClass{public void test1() throws IOException{}
}class SubClass extends SuperClass{public void test2() throws FileNotFoundException{}}

三.   手动生成异常,并抛出(throw)

public class Test{public static void main(String[] args) {try{Person person = new Person();person.show(-2);System.out.println(person.age);}catch (Exception e){System.out.println(e.getMessage());}//输出:输入数据错误}}class Person{int age;public void show(int age) throws Exception{   //处理异常if(age > 0){this.age = age;}else{throw new Exception("输入数据错误");     //手动抛出异常对象}}
}

Java学习(8) —— 异常处理相关推荐

  1. (JAVA学习笔记) 异常处理

    文章目录 什么是异常 异常分类 异常体系结构 Error Exception Error和Exception的区别: 异常处理机制 代码演示 自定义异常 代码演示 什么是异常 异常指程序运行中出现的不 ...

  2. JAVA学习笔记——异常处理与调试

    目录 错误与异常 异常分类 声明受查异常 抛出异常 创建异常类 异常捕获与处理 基本结构 再次抛出异常与异常链 带资源的 try 语句 使用异常机制的技巧 断言的使用 启用和禁用断言 使用断言完成参数 ...

  3. Java学习笔记 --- 异常处理

    一.基本介绍 异常处理就是当异常发生时,对异常处理的方式 二.异常处理的方式 1.try - catch - finally 程序员在代码中捕获发生的异常,自行处理 处理机制示意: try {代码// ...

  4. Java学习笔记——异常处理

    目录 一.异常 (一)异常的相关概念 (二)异常产生的原因 (三)异常的分类 二.Exception (一)检查性异常 (二)非检查性异常 (三) 异常方法 三.Java处理异常的关键字 (一)捕获异 ...

  5. JAVA学习心得——异常处理try、catch、finally用法

    要了解try.catch.finally的用法,首先了解什么是异常. 异常就是代码出现了问题,不同寻常的意思. java语言把程序运行过程中所发生的不正常严重错误成为异常. 异常的结构: 异常也是有子 ...

  6. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin

    云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...

  7. java catch空指针异常处理_Java基础学习:java文件空指针异常处理

    在Java编程中,我们或多或少地会遇到一些程序异常的情况,为了不影响程序的正常执行,我们需要在程序发生异常的情况下,进行一些操作来防止造成更大的损失.例如在我们平时的除法运算中,被除数是不能为0的,如 ...

  8. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  9. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  10. Java学习---RMI 技术分析[Hessian]

    一.什么是Hessian Hessian 是一个基于 binary-RPC 实现的远程通讯 library.使用二进制传输数据.Hessian通常通过Web应用来提供服务,通过接口暴露.Servlet ...

最新文章

  1. 谷歌AI一次注释了10%的已知蛋白质序列,超过人类十年研究成果
  2. ISA2006标准版安装及无人值守安装
  3. IBatis.Net学习笔记四--数据库的缓存模式
  4. Ubunt16.04 搭建 GPU 显卡驱动 + CUDA9.0 + cuDNN7 详细教程
  5. SAP CRM中间件队列CSAPR_HIERR3MATCLASS
  6. 怎么做图片文字二维码一起_怎么做?才能让文字编排更出彩
  7. linux下带密码的scp,linux下带密码的scp
  8. 连接 F5 大 IP 设备
  9. 相信什么,生命就走向什么
  10. java打包拆包_关于java中JDK5的打包,拆包以及==和equals的问题
  11. java读文件几种方式_java中读取文件的方式有哪几种
  12. 如何编写一份合格的测试计划
  13. springcloud 高可用的服务注册中心
  14. 2007年各大论坛最新经典WindowsXP操作系统
  15. 建筑业加速提高智能建造水准
  16. 使用HBuilder mui将图片保存到手机相册(移动端将图片、文件保存至手机相册)
  17. FlutterComponent最佳实践之沉浸式
  18. 一、学海无涯,再出发!【2020.02.14-25】
  19. 查看APP的MD5值
  20. Go语言学习二 语言结构 基础语法 数据类型

热门文章

  1. JAVA 之父高斯林:廉颇老矣,尚能饭否?
  2. HTML 显示梯形图片
  3. 百分之99的人都不知道的Python爆破ZIP文件
  4. C# 解析种子文件(bt文件)
  5. Doris export任务概率性cancelled
  6. python创建person类_Python类与方法的私有化
  7. 我讨厌计算机作文500,我讨厌谎言作文500字(精选5篇)
  8. Windows NAT端口映射
  9. 【转】2014阿里巴巴面试经历
  10. 计算机网络 --- IP地址的详细分类