Java基础--异常处理
1.异常的传统处理方式
缺点:
[1] 通过判断影响执行效率。
[2] 判断逻辑和业务逻辑交织在一起,可维护性很差。
 public class Test01 {
     public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入第一个数:");
         int num1 = 0;
         if(sc.hasNextInt()) {
             num1 = sc.nextInt();
             System.out.println("请输入第二个数:");
             int num2 = 0;
             if(sc.hasNextInt()) {
                 num2 = sc.nextInt();
                 if(0 == num2) {
                     System.out.println("除数不能为0!");
                 }else {
                     int r = num1 / num2;
                     System.out.println("num1/num2 = "+r);
                 }
             }else {
                 System.out.println("第二个数输入不是数字");
             }
         }else {
             System.out.println("第一个数输入不是数字!");
         }
     }
 }
2.Java异常处理的定义
异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序。
3.Java异常处理机制
java中通过异常处理机制为程序提供异常处理的能力,保持程序继续运行而不中断!

4.try/catch
把有可能产生异常的代码放到try代码块中,catch代码块负责捕获并处理异常。
[1]正常执行,没出现任何异常

[2]出现异常,异常处理,正常结束

[3]异常类型不匹配

[4] 多重catch
 public class Test03 {
     public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入第一个数:");
         int num1 = 0;
         int num2 = 0;
         try {
             num1 = sc.nextInt();
             System.out.println("请输入第二个数:");
             num2 = sc.nextInt();
             int r = num1 / num2;
             System.out.println("num1/num2 = " + r);
         }catch (ArithmeticException e) {
             System.out.println("数学计算异常:"+e.getMessage());
         }catch(InputMismatchException e) {
             System.out.println("输入不匹配异常:"+e.getMessage());
         }catch (Exception e) {
             System.out.println("发送异常:"+e.getMessage());
         }
         System.out.println("程序正常结束");
     }
 }
5.try/catch/finally
把有可能产生异常的代码放到try中,catch负责匹配并处理异常,finally块用于进行收尾工作(关闭数据库、关闭文件、释放内存等资源),不管是否发生异常,finally都执行。
 public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入第一个数:");
         int num1 = 0;
         int num2 = 0;
         try {
             num1 = sc.nextInt();
             System.out.println("请输入第二个数:");
             num2 = sc.nextInt();
             int r = num1 / num2;
             System.out.println("num1/num2 = " + r);
         } catch (Exception e) {
             System.out.println("程序出现异常");
         } finally {
             System.out.println("不管是否出现异常,finally都执行");
         }
         System.out.println("程序正常结束");
     }
6.异常的分类
Exception 根据是否处理分为两种情况。
RuntimeException:运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。
CheckedException:检查时异常。要求程序必须处理,不处理编译不通过。
7.声明异常(throws关键字)
当一个方法可能存在异常,而此时自身又无法更好的处理,可以交给外界处理。此时用throws声明并抛出异常。
如果调用处也不知道如何处理异常,可选择继续声明异常,我们把这个过程称为异常上抛。
 public class Test01 {
     public static int div(int a, int b) throws ArithmeticException{
         int r = 0;
         r = a / b;
         return r;
     }
     public static void main(String[] args) {
         try {
             Test01.div(10, 0);
         } catch (ArithmeticException e) {
             System.out.println("除数不能为0");
         }
     }
 }
8.手动抛出异常(throw关键字)
除了系统自动抛出异常外,有些问题需要开发者手动抛出异常,使用关键字throw。
 package cn.sxt02.exception06;
 public class Student {
     private String name;
     private String gender;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public String getGender() {
         return gender;
     }
     public void setGender(String gender) throws Exception{
         if(gender.equals("男") || gender.equals("女")) {
             this.gender = gender;
         }else {
             throw new Exception("性别不合法!");
         }
     }
     public Student(String name, String gender) {
         super();
         this.name = name;
         this.gender = gender;
     }
     public Student() {
         super();
     }
 }
 public class Test01 {
     public static void main(String[] args){
         Student stu = new Student();
         stu.setName("二狗");
         try {
             stu.setGender("xxx");
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
     }
 }
9.自定义异常
如果开发者需要手动抛出的异常在系统不存在,可以自定义异常。
如果要自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。
异常的命名方式,参考系统命名方式,以Exception结尾。
 public class AgeException extends Exception{
     public AgeException() {
         super();
     }
     public AgeException(String message) {
         super(message);
     }
 }
Java基础--异常处理的更多相关文章
- Java基础—异常处理总结
		
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地 ...
 - 十二、Java基础---------异常处理机制
		
异常 异常 异常就是程序在运行时产生的异常情况. 异常的由来 问题也是现实生活中的具体事物,也可以通过java 类的形式进行描述,并封装成对象.异常就是java 对不正常情况进行描述后的对象的体现. ...
 - Java基础——异常处理
		
异常的层次结构 所有的异常类都是 java.lang.Exception 类的子类型.异常类都是 Throwable 类的子类.除了异常类 Error 类也是由 Throwable 类产生的的子类1. ...
 - java基础—异常处理
		
一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要.
 - Java基础-异常处理机制 及异常处理的五个关键字:try/catch/finally/throw /throws
		
笔记: /** 异常处理机制: 抓抛模型 * 1."抛", 一旦抛出,程序终止! printStackTrace()显示异常路径! * 2."抓", 抓住异常 ...
 - Java 基础-异常处理
		
在 Java 中声明了很多异常类,每个异常类都表示一种运行错误.程序运行过程中发生一个可识别的运行错误时(可以找到与错误匹配的异常类,例如被除数为 0 时会触发 java.lang.Arithmeti ...
 - java基础异常处理
		
异常的定义:中断了正常指令流的事件. try..catch..finally结构: class Test{ public static void main(String[] args){ System ...
 - Java基础(四)-异常处理机制及其设计
		
本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...
 - Java基础学习之异常处理(6)
		
@ 目录 1.异常是什么 1.1.Error 1.2.Exception 2.异常处理机制 2.1.捕获异常 2.2.抛出异常 3.自定义异常 3.1.自定义检查性异常 3.2.自定义运行时异常 1. ...
 
随机推荐
- Snapde和常用的CSV文件编辑器对比
			
Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. CSV是一种用逗号分隔列.回车分割行的文本文件,市面上常用的CSV编辑软件有:Snap ...
 - Android Monkey压力测试使用
			
一.Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换.横竖屏.应用关闭)实现对 ...
 - 如何做好SQLite 使用质量检测,让事故消灭在摇篮里
			
本文由云+社区发表 SQLite 在移动端开发中广泛使用,其使用质量直接影响到产品的体验. 常见的 SQLite 质量监控一般都是依赖上线后反馈的机制,比如耗时监控或者用户反馈.这种方式问题是: 事后 ...
 - gitbook 入门教程之主题插件
			
主题插件 目前 gitbook 提供三类文档: Book 文档,API 文档和 FAQ 文档. 其中,默认的也是最常使用的就是 Book 文档,如果想要了解其他两种文档模式,需要引入相应的主题插件. ...
 - TCP点对点转发的实现与原理(nodejs)
			
Nagent Nagent是TCP点对点转发实现,名称来源于Nat与Agent的组合.类似frp项目,可以在局域网与互联网提供桥梁. 前提是你要有一台流量服务器并且有一个公网IP.如果没有,也可以找服 ...
 - golang 使用匿名结构体的问题
			
golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...
 - 仿EXCEL插件,智表ZCELL产品V1.5 版本发布,IE8/9完全兼容
			
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要解决了IE8/9等低版本浏览器兼容的问题,新增了部分功能,欢迎大家体验使用. 本次版本更新内容如下 ...
 - 【java学习】Intelli Idea集成开发工具的使用
			
== mac版直接下载地址: https://download.jetbrains.com/idea/ideaIU-2018.1.6.dmg ==mac配置java环境变量: https://ji ...
 - PHP设计模式概述
			
PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
 - java.util.Arrays.useLegacyMergeSort=true 作用
			
(原) 今天看了一下现场的环境,发现有个其它部门的项目用到了这样一个参数: -Djava.util.Arrays.useLegacyMergeSort=true 于是查看了一下什么作用. 在JDK1. ...