Java学习(8) —— 异常处理
常见异常分类:
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) —— 异常处理相关推荐
- (JAVA学习笔记) 异常处理
文章目录 什么是异常 异常分类 异常体系结构 Error Exception Error和Exception的区别: 异常处理机制 代码演示 自定义异常 代码演示 什么是异常 异常指程序运行中出现的不 ...
- JAVA学习笔记——异常处理与调试
目录 错误与异常 异常分类 声明受查异常 抛出异常 创建异常类 异常捕获与处理 基本结构 再次抛出异常与异常链 带资源的 try 语句 使用异常机制的技巧 断言的使用 启用和禁用断言 使用断言完成参数 ...
- Java学习笔记 --- 异常处理
一.基本介绍 异常处理就是当异常发生时,对异常处理的方式 二.异常处理的方式 1.try - catch - finally 程序员在代码中捕获发生的异常,自行处理 处理机制示意: try {代码// ...
- Java学习笔记——异常处理
目录 一.异常 (一)异常的相关概念 (二)异常产生的原因 (三)异常的分类 二.Exception (一)检查性异常 (二)非检查性异常 (三) 异常方法 三.Java处理异常的关键字 (一)捕获异 ...
- JAVA学习心得——异常处理try、catch、finally用法
要了解try.catch.finally的用法,首先了解什么是异常. 异常就是代码出现了问题,不同寻常的意思. java语言把程序运行过程中所发生的不正常严重错误成为异常. 异常的结构: 异常也是有子 ...
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...
- java catch空指针异常处理_Java基础学习:java文件空指针异常处理
在Java编程中,我们或多或少地会遇到一些程序异常的情况,为了不影响程序的正常执行,我们需要在程序发生异常的情况下,进行一些操作来防止造成更大的损失.例如在我们平时的除法运算中,被除数是不能为0的,如 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- java学习笔记12--异常处理
java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...
- Java学习---RMI 技术分析[Hessian]
一.什么是Hessian Hessian 是一个基于 binary-RPC 实现的远程通讯 library.使用二进制传输数据.Hessian通常通过Web应用来提供服务,通过接口暴露.Servlet ...
最新文章
- 谷歌AI一次注释了10%的已知蛋白质序列,超过人类十年研究成果
- ISA2006标准版安装及无人值守安装
- IBatis.Net学习笔记四--数据库的缓存模式
- Ubunt16.04 搭建 GPU 显卡驱动 + CUDA9.0 + cuDNN7 详细教程
- SAP CRM中间件队列CSAPR_HIERR3MATCLASS
- 怎么做图片文字二维码一起_怎么做?才能让文字编排更出彩
- linux下带密码的scp,linux下带密码的scp
- 连接 F5 大 IP 设备
- 相信什么,生命就走向什么
- java打包拆包_关于java中JDK5的打包,拆包以及==和equals的问题
- java读文件几种方式_java中读取文件的方式有哪几种
- 如何编写一份合格的测试计划
- springcloud 高可用的服务注册中心
- 2007年各大论坛最新经典WindowsXP操作系统
- 建筑业加速提高智能建造水准
- 使用HBuilder mui将图片保存到手机相册(移动端将图片、文件保存至手机相册)
- FlutterComponent最佳实践之沉浸式
- 一、学海无涯,再出发!【2020.02.14-25】
- 查看APP的MD5值
- Go语言学习二 语言结构 基础语法 数据类型