博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java进阶01 异常处理
阅读量:5282 次
发布时间:2019-06-14

本文共 4373 字,大约阅读时间需要 14 分钟。

          异常处理
          异常处理就是错误处理机制
          是面向对象语言区别于面向过程语言的重要标志之一,
          异常处理机制的出现,可以使我们的程序更加强大而且安全。

    

import java.util.Scanner;public class Exception1 {    public static void main(String[] args){        /*         * 异常处理         * 异常处理就是错误处理机制         * 是面向对象语言区别于面向过程语言的重要标志之一         * 异常处理机制的出现,可以使我们的程序更加强大而且安全         * */        Scanner in=new Scanner(System.in);                System.out.println("请输入除数与被除数");        int a=in.nextInt();        int b=in.nextInt();        System.out.print("余数是->"+a%b);        System.out.println("接下来要干的事");        /*         * 当被除数是0的时候会抛出         * Exception in thread "main"     java.lang.ArithmeticException: / by zero         * at Exception.main(Exception.java:17)的异常         * 如果只是这个异常的话 ,用if语句来判断是否输入的为0即可         * 但是 往往异常比这复杂的多         * 当你键入的值 不是整数时候,用if是无法解决的         * 而程序也会中断执行         * 之后的代码将不会被执行         * 所有需要用异常处理机制来解决这个问题         * */    }}

控制台打出:  

请输入除数与被除数

  aa
  Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Exception.main(Exception.java:15)
   从这里可以看出 当输入的不是整数的时候 根本不允许你输入第二个。

  所以才有了异常处理机制

  1:

  用try...catch处理异常

  它适合处理程序猿可以控制和用户输入有误的情况.

  

Scanner in=new Scanner(System.in);                System.out.println("请输入除数与被除数");        try {            int a=in.nextInt();            int b=in.nextInt();            System.out.print("余数是->"+a%b);        } catch (Exception e) {            // TODO: handle exception            System.out.println("你的输入有误");        }                System.out.println("接下来要干的事");

  try里面的语句是可能出现问题的代码,catch里面的语句是出现问题之后要执行的代码。

  这是控制台打出的

  请输入除数与被除数

  aa
  你的输入有误
  接下来要干的事

  这样就很好的处理了输入异常的问题.

  2:

  用Throws处理异常

  它的处理方法是将异常抛给上一级处理,如都不能处理

      最终抛给虚拟机处理,这个过程我们称为抛异常
      这中方法适合比较严重的异常和程序猿无法预料的异常

  

import java.util.Scanner;public class Exception2 {    public static void main(String[] args){                //用Throws处理异常        /*         * 它的处理方法是将异常抛给上一级处理,如都不能处理         * 最终抛给虚拟机处理,这个过程我们称为抛异常         * 这中方法适合比较严重的异常和程序猿无法预料的异常         * */            System.out.println("请输入除数与被除数");            A aa=new A();            try {                                aa.a();            } catch (Exception e) {                // TODO: handle exception                System.out.println("你的输入有误");                }                        System.out.println("接下来要干的事");            }    }class A{    void a() throws Exception{    Scanner in=new Scanner(System.in);    int a=in.nextInt();    int b=in.nextInt();    System.out.print("余数是->"+a%b);        }}

  这里在a()这里throws 如果a()里面出现异常它将抛给它的上级处理 它的上级在哪呢?

  就是在主函数 因为你调用了 aa.a();

  现在在主函数中处理这个异常

  如果主函数中还处理不了 你就继续向上抛

  

import java.util.Scanner;public class Exception2 {    public static void main(String[] args) throws Exception{                //用Throws处理异常        /*         * 它的处理方法是将异常抛给上一级处理,如都不能处理         * 最终抛给虚拟机处理,这个过程我们称为抛异常         * 这中方法适合比较严重的异常和程序猿无法预料的异常         * */            System.out.println("请输入除数与被除数");            A aa=new A();            aa.a();                        System.out.println("接下来要干的事");            }}class A{    void a() throws Exception{    Scanner in=new Scanner(System.in);    int a=in.nextInt();    int b=in.nextInt();    System.out.print("余数是->"+a%b);        }}

 

  由于只有虚拟机能调用主函数,所以就将异常抛给了虚拟机,虚拟机能做的就是正常退出程序.

  这就是2种处理异常的方法

  最后讲一下 Finally

  Finally语句是起到异常处理出口的作用

      用在try...catch语句的最后,无论是否出现异常
      Finally中的语句都会执行

  

import java.util.Scanner;public class Exception3 {    public static void main(String[] args){        /*         * Finally          * Finally语句是起到异常处理出口的作用         * 用在try...catch语句的最后,无论是否出现异常         * Finally中的语句都会执行         * */        Scanner in=new Scanner(System.in);            System.out.println("请输入除数与被除数");        try {            int a=in.nextInt();            int b=in.nextInt();            System.out.print("余数是->"+a%b);        } catch (Exception e) {            // TODO: handle exception            System.out.println("你的输入有误");        }        finally{        System.out.println("接下来要干的事");        }        /*         * 现在看来finally可以不用写         * 但是往往 catch并不能处理全部异常          * 所以用finally能进行收尾工作         * 直观又好控制         * */            }}

   现在看来finally可以不用写

       但是往往 catch并不能处理全部异常
       所以用finally能进行收尾工作
       直观又好控制

 

   关于Exception的种类,就自行百度,不做更多讲解。

   异常处理的笔记就此结束.

 

  

转载于:https://www.cnblogs.com/huangxiaoli/p/3685730.html

你可能感兴趣的文章
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>