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{…}

posted @ 2018-01-23 21:52  贰零一八  阅读(148)  评论(0编辑  收藏  举报