Java基础——如何处理程序出现的问题


在程序运行过程中难免会出现问题,Java中有一些类专门表示常见的问题。

错误和异常

过程:先抛出异常给JRE,再由JRE捕获异常。所有相关类都是throwable 的子类

错误(error)是比较严重的问题,基本上是运行代码时JVM出现的问题,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError用Error类及其子类表示。

异常则一般是代码出现的问题,如方法使用的参数值为null值,被除数是0等。

分类::

  • Error类(不需要程序员处理):表示错误。
    Exception。

unchecked异常是运行时异常,Exception类的子类RuntimeException及其子类表示这类异常,如不建议在代码里处理。

checked异常是非运行时异常,一般是外部问题,如处理的文件格式不对,直接在代码里处理。

异常处理原则:
异常处理不能替代用户的问题,比如用户名错误;
异常处理不能替代测试;
异常处理不能小粒度地处理,最好是整个任务放在一个try语句里。
异常处理最好在高层即父类进行。

常见unchecked异常处理方法:
ArithmeticException,举例:

    int b=0;
    if(b != 0) {
        System.out.println(1/b);
    }

NullPointerException,举例:

        String str=null;
        if(str!=null) {
            System.out.println(str);
        }

ClassCastException,举例:

        User u = new Student();
        if(u instanceof Teacher) {
            Teacher t = (Teacher) u;<>Teacher和Student均为User的子类<>
        }

ArrayIndexOutOfBoundsException,举例:

        int[] a = new int[5];
        int l = 10;
        if(l<a.length) {
            System.out.println(a[l]);
        }

NumberFormatException,举例:

        String s = "123abc";
        Pattern p = Pattern.compile("^\\d+$");
        Matcher m = p.matcher(s);
        if(m.matches()) {
            int num = Integer.parseInt(s);
        }

try/catch语句

如果异常可能会导致编译通不过,那么必须要用try/catch语句来处理。
try语句:放入可能出现异常的一段代码。

catch语句:放入异常处理代码,

finally语句:无论异常是否发生,一定会执行的语句,一般不要设置return语句,否则会覆盖前面语句的返回结果。

举例:

    FileReader reader = null;
    try {
        reader = new FileReader("d:");
        char c = (char) reader.read();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
        try {
            if(reader != null) {
                reader.close();
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

throw/throws 语句

throws声明异常后,调用这个对象的时候才需要处理异常。

不建议在main里调用的时候继续声明,不然就会抛给JRE。

子类声明异常的条件:
不能超过父类的异常等级,即不能抛异常类的父类或上层类;
声明的异常不能是父类异常的同级别异常的子类异常。

public void run() throws IOException{...}

如果想在方法体内抛异常,就需要使用throw关键词,后面跟着异常对象而不仅仅是异常类,举例:

public void run(){
	throw new FileNotFoundException("file not found!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值