java异常

 异常分为运行时异常和非运行时异常,所有异常类都会直接或者间接继承Exception

  • 对于非运行时异常,必须要对其进行处理。处理方式有两种:第一种是使用try...catch...finally进行捕获;第二种是在调用该会产生一场的方法所在的方法生命throws exception,例如
    IOException,FileNotFoundException
  • 运行时异常是不需要捕获的,运行时异常都会直接或间接地继承自RuntimeException,例如 NullPointerException

 自定义异常类
  我们一般都会直接继承Exception类,一般不会继承某个运行时的异常类

  

public class MyException extends Exception
{
    MyException()
    {
        super();
    }

    /**
     * ex为抛出的具体异常
     * @param ex
     */
    MyException(String ex)
    {
        super(ex);
    }
}
自定义异常类
public class MyExceptionTest
{
    public void isString(String s) throws MyException {
        if (null == s)
        {
            throw new MyException("param is null");
        }
    }
    public static void main(String[] args) throws MyException {

       MyExceptionTest exTest = new MyExceptionTest();
       try{
           exTest.isString(null);
       }
       catch (MyException ex)
       {
          ex.printStackTrace();
       }
       finally {
           System.out.println("入参为空");
       }

       // 直接输出异常
        new MyExceptionTest().isString(null);

    }
}
测试异常类

异常原因:

1、用户输入了非法数据。

2、网络通信是连接中断

3、JVM内存溢出

我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,java编译器会报编译错误;如果多个catch块的异常类型是独立的(MyException, MyException2),那么谁前谁后都是可以的。

如果try块中有retrun,则fianlly里面的代码会执行,如果执行system.exbit(0),那么就不会在执行finally块中的代码,因为会终止当前运行java虚拟机,程序会在虚拟机终止前结束执行

原文地址:https://www.cnblogs.com/yanfeiguo1011/p/12500849.html