zoukankan      html  css  js  c++  java
  • java异常复习

    如果有时学东西概念太多了,可以反着学,从结果到过程,从代码到概念,也许就不会那么枯燥了,比如学反射的时候。

     

    java异常复习

    异常和错误的区别?

    异常:程序或环境本身出现错误。(程序员可以捕获并处理)

    错误:内部系统错误。(程序员不用做什么,程序员通知用户关掉它即可。)

     

    类Scanner、nextInt用法及其含义:

    import java.util.Scanner;
    public class TestException2{
        public static void main(String[] args) {
            Scanner input=new Scanner(System.in);
            //
            int a,b;
            try{
                System.out.println("输入被除数:");
                a=input.nextInt();
                System.out.println("输入除数:");
                b=input.nextInt();
    
                System.out.println("两数相除结果为:"+a/b);
            }catch(InputMismatchException e){
                System.out.println("你输入的不是数字,这里必须是数字。");
            }        
        }
    
    }

    /*

    类Scanner:一个可以使用正则表达是来解析基本类型

    和字符串的简单文本扫描器。

    如:用户能够从System.in中读取一个数:

    Scanner sc=new Scanner(System.in);

    int i=sc.nextInt();

    //nextInt():类java.util.Random中的方法,返回下一个伪随机数(这里的随机是相对的)

    随机数生成器中的一个均匀分布的一个int值

     

    下面是从一个字符串读取若干项的例子:

    String input = "1 fish 2 fish red fish blue fish";
         Scanner s = new Scanner(input).useDelimiter("\s*fish\s*");
         System.out.println(s.nextInt());
         System.out.println(s.nextInt());
         System.out.println(s.next());
         System.out.println(s.next());
         s.close(); 

    输出为:

     

         1

         2

         red

         blue 

    是如何实现跳读的?

    */

    异常语法格式总结:

    try{

    //程序需要执行的代码,可能有错

    }catch(异常类 变量名){

    //若出现异常类,要执行的代码块

    }

     

    //异常类自定义或继承Exception类或子类定义的,

    异常对象一是运行时环境自动抛出的,比如除数不能为零,二是用户自定义的。

     

    finally任何情况下必须执行的代码,finally唯一不被执行的情况是存在System.exit()终止了JVM的运行。

    import Java.util.InputMismatchException;
    import Java.util.Scanner;
    
    public class TestException{
        public static void main(String[] args){
        Scanner input=new Scanner(System.in);
    
        int a,b;
    
        try{
            System.out.println("输入被除数:");
            a=input.nextInt();
            System.out.println("输入除数:");
            b=input.nextInt();
            System.out.println("两数相除结果为:"+a/b);
        }
        catch (InputMismatchException e) {
            System.out.println("你输入的不是数字,这里必须是数字!");
        }catch(ArithmeticException e){
            System.out.println("你输入的数字除数为0");
            Sytem.out.println(e.getMessage());
        }catch (Exception e) {
            System.out.println("程序出错了!")
        }finally{
            System.out.println("无论异常与否,都会执行这里!");
        }
        }
    }

    4.throws

    有些异常用户不想处理时,用户可能没办法处理或者不想处理,则可以把方法头加上throws语句来放弃本方法处理。

    import Java.util.InputMismatchException;
    import Java.util.Scanner;
    
    public class TestException{
        public static void main(String[] args) throws InputMismatchException,
        ArithmeticException,Exception{
            Scanner input=new Scanner(System.int);
            int a,b;
    
            System.out.println("输入被除数:");
            a=input.nextInt();
            System.out.println("输入除数:");
            b=input.nextInt();
            Sysem.out.println("两数相除的结果是:"+a/b);
    
        }
    }

    如果JVM追溯到调用栈最底部main方法时,仍没有找到异常代码块,则

    1)调用异常对象printStackTrace()方法,打印方法调用栈的异常信息。

    2)如果出现异常线程为主线程,则程序运行终止;若非主线程,则终止,让其他线程继续。

     

    说明:用throws是一种消极的异常用法,所以不提倡,且耗资源和时间多。

             (增加了JVM的运行时间)

     

    5.自定义异常:类java.lang.Throwable是所有类的基类,它包括两个子类:Exception和Error。Exception是

                        描述程序捕获的异常,如ClassNotFoundException。Error类用于指示合理应用程序但是由于

                        JVM出现的错误,比如虚拟机错误VirtualMachineError。(错误不允许程序员捕获)

                        自定义异常可以继承Throwable类或Exception,而不要继承Error类。且自定义异常间可以有继承。

                        public要为自定义异常设计工作函数,为方便构造自定义异常对象。

    public class MyException extends exception{
    
     public MyException(){
    
      super();
    
     }
    
     public MyException(String msg){
    
      super(msg);
    
     }
    
    }

    上面这种MyException类才叫异常类,异常类通过throw关键字来手动抛出异常

    手动抛出异常语法格式:

    throw new 异常类();

    如:

    public void setAge(int age) throws MyException{
     if(age<0 || age>100){
         throw new MyException(“年龄不符合要求”);
      }else{
              this.age=age;
            }
     }
    
    …
    //测试类中
    try{
         t1.setAge(1000);
    }catch(MyException e){
         e.printStackTrace();
    }

    或者

    在测试类中用throws来继承MyException,交给JVM来处理

    即public static void main(String[] args)throws MyException{…}

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    机器学习--决策树
    插入排序、选择排序的实现与性能比较
    【笔记】如何实现属性可修改的函数装饰器
    【笔记】如何为被装饰的函数保存元数据
    【笔记】对文件的一些操作
    【笔记】对字符串的一些操作
    USB鼠标按键驱动
    LCD驱动 15-3
    LCD驱动 15 -2
    LCD驱动 15-1
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8338065.html
Copyright © 2011-2022 走看看