Java中exception异常_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java中exception异常

Java中exception异常

 2018/10/17 12:45:44  andrew7676  程序员俱乐部  我要评论(0)
  • 摘要:1.Java中exception异常Java中的异常分为两大类:1)Checkedexception(非RuntimeException)2)Uncheckedexception(RuntimeException)Java中所有的异常类都会直接或间接地继承Exception父类。publicclassExceptionTest{publicstaticvoidmain(String[]args){intc=0;try{inta=3;intb=0;c=a/b;System.out.println
  • 标签:Java 异常
1. Java中exception异常
class="java" name="code">
Java中的异常分为两大类:
1) Checkedexception(非RuntimeException)
2) Uncheckedexception(RuntimeException)

Java中所有的异常类都会直接或间接地继承Exception父类。
public class ExceptionTest {
    public static void main(String[] args) {
        int c = 0;
        try {
            int a = 3;
            int b = 0;
            c = a / b;
            System.out.println("hello world");
        } 
        catch (ArithmeticException e) {
            e.printStackTrace();
        }
        finally{
            System.out.println("welcome");
        }
        System.out.println(c);
    }
}
运行结果:
java.lang.ArithmeticException: / by zero
    at test10.ExceptionTest.main(ExceptionTest.java:9)
welcome
0

可以自己抛出异常throw new Exception()
public class Exception2 {
    public void method() throws Exception{
        System.out.println("hello world");
        throw new Exception();
    }
    public static void main(String[] args) {
        Exception2 test = new Exception2();
        try {
            test.method();    
        } 
        catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            System.out.println("in the end");
        }
    }
}
运行结果:
hello world
java.lang.Exception
    at test10.Exception2.method(Exception2.java:6)
    at test10.Exception2.main(Exception2.java:11)
in the end

对于非运行时异常(checkedexception),必须要对其进行处理,处理方式有两种:第一种是使用try..catch…finally进行捕获;第二种是在调用该会产生异常的方法所在的方法声明throwsException。
对于运行时异常(runtime  exception),我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。
public class Exception3 {
    public static void main(String[] args) {
        String str = null;
        System.out.println(str.length());
    }
}
运行结果:
Exception in thread "main" java.lang.NullPointerException
    at test10.Exception3.main(Exception3.java:6)


2. 自定义exception异常
public class MyException extends Exception{
    public MyException() {
        super();
    }
    public MyException(String message){
        super(message);
    }
}
public class ExceptionTest4 {
    public void method(String str) throws Exception{
        if (null == str) {
            throw new MyException("传入的字符串参数不能为null");
        }
        else if ("hello".equals(str)) {
            throw new MyException2("传入的字符串不能为hello");
        }
        else {
            System.out.println(str);
        }
    }
    
    public static void main(String[] args){
        try {
            ExceptionTest4 test = new ExceptionTest4();
            test.method("hello");
        } 
        catch(MyException e){
            System.out.println("进入到MyException catch块");
            e.printStackTrace();
        }
        catch(MyException2 e){
            System.out.println("进入到MyException2 catch块");
            e.printStackTrace();
        }
        catch(Exception e){
            System.out.println("进入到Exception catch块");
            e.printStackTrace();
        }
        finally{
            System.out.println("异常处理完毕");
        }    
        System.out.println("程序执行完毕");
    }
}
运行结果:
进入到MyException2 catch块
test11.MyException2: 传入的字符串不能为hello
    at test11.ExceptionTest4.method(ExceptionTest4.java:9)
    at test11.ExceptionTest4.main(ExceptionTest4.java:19)
异常处理完毕
程序执行完毕

"hello".equals(str)如果str为null,判断结果返回false;
Str.equals(“hello”)如果str为null,会抛出空指针异常;

exception异常处理可以有多个catch块,但是运行时只能进入一个catch块。
我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误;如果多个catch块的异常类型是独立的(MyException,MyException2),那么谁前谁后都是可以的。
如果try块中存在return语句,那么首先也需要将finally块中的代码执行完毕,然后方法再返回。
public class MyException2 extends Exception{
    public MyException2(){
        super();
    }
    
    public MyException2(String message){
        super(message);
    }
}

public class ExceptionTest5 {
    public void method(){
        try {
            System.out.println("进入到try块");
            // 表示退出不执行后面代码
            System.exit(0);
        } 
        catch (Exception e) {
            System.out.println("异常发生了");
        }
        finally{
            System.out.println("进入到finally块");
        }
        System.out.println("异常处理后续的代码");
    }
    public static void main(String[] args) {
        ExceptionTest5 test = new ExceptionTest5();
        test.method();
    }
}
运行结果:
进入到try块
上一篇: Java中frame对象 下一篇: Java中annotation注解
发表评论
用户名: 匿名