首页 > 代码库 > 1java异常详解

1java异常详解

语法错误、编译时错误
语义错误、逻辑错误、运行时错误
1、注意:这里说的异常是运行期错误,不包括编译期错误。
2、try尝试运行,catch捕获并处理,finally无论出错不出错都会执行。
3、异常类根类:Throwable(注意,这是一个类)
技术分享
Throwable又有两个子类,Error和Exception。Error不是我们关注的,不是我们能够处理的。
Exception还有一个子类,RuntimeException,可捕捉也可不捕捉。其它的Exception必须处理。
4、注意:不要轻易地抛出异常,不要轻易地吞掉异常。
  该处理的一定要处理;处理不了,没关系,可以往外抛。在main方法上也可以抛异常,但永远都不要这样做,除非测试。
5、printStackTrace()打印堆栈错误信息,一个地方出错可能是另一个地方引起的。
6、java异常处理机制:
6.1、java程序执行过程中如出现异常,系统会监测到并自动生成一个相应的异常类对象,然后再将它交给运行时系统。
(自定义异常需要我们自己监测,并手动生成这个异常的对象,然后抛出交给运行时系统)
6.2、运行时系统再寻找相应的代码来处理这一异常。如果java运行时系统找不到可以处理异常的代码,则运行时系统将终止,相应的java程序也将退出。
 
public static void main(String[] args) {
        String str = "1";
        for(int i=0;i<10000;i++) {
            str += str;
        }
    }
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常见异常类:
RuntimeException          运行时异常
IndexOutOfBoundsException      下标越界异常 
NullPointerException          空指向异常
ArrayIndexOutOfBoundsException  数组下标越界异常
StringIndexOutOfBoundsException    字符串下标越界异常
ClassCastException          类型转换异常
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exception:
IOException
FileNotFoundException
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String[] str = {"1","2","3"};
try {
  for(int i=0;i<5;i++) {
    System.out.print(str[i]);
  }
}catch(ArrayIndexOutOfBoundsException e){
  System.out.println("数组下标越界");
  return;//如果return,下面的finally还会执行
  //System.exit(0);//如果是exit()方法,那么下面的finally就不会被执行了。
                   //exit()终止虚拟机的运行
}finally{
  System.out.println("我是finally");
}
System.out.println("程序结束");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
人工抛出异常
java异常类对象除了在程序运行出错时由系统自动生成并抛出之外,也可根据需要人工创建并抛出。
throw new IOException();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自定义异常示例:
自定义异常需要人工抛出。
class MyException extends Exception {
 
    public MyException(String message) {
        super(message);
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public class TestException {
    public void regist(int number) throws MyException {
        if (number < 0) {
            throw new MyException("人数不能为负数");
        }
    }
 
    public static void main(String[] args) {
        TestException t = new TestException();
        try{
            t.regist(-1);
        }catch(MyException m) {
            m.printStackTrace();
        }
    }
 
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
重写:两同两小一大
方法名相同
形参列表相同
返回值类型小于或等于父类方法的返回值类型
抛出异常小于或等于父类方法的返回值类型
访问权限大于或等于父类方法的访问权限

1java异常详解