黑马程序员--异常

来源:互联网 发布:淘宝订单清洗期几天 编辑:程序博客网 时间:2024/06/06 17:32

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


学习基础过程中经常的遇到的异常总结:

异常:程序出现了不正常的情况。


异常的体系
Throwable

Error:严重 问题,通常出现重大问题如:运行的类不存在或者内存溢出等。是不需要处理的。
一般这种情况是需要修改代码的。
这儿的处理指的是(try{}catch(){}或者throws),出现error这样严重问题的时候
靠处理的方式是解决不了的,必须找出那个地方犯了这么严重的错误,然后修改代码,改正确了之后,
程序才能够运行起来,否则程序绝对运行不起来。
 
Exception:不严重
  1:编译期间:这个是我们需要处理的。(Exception下面 非RuntimeException 的异常)

处理异常的方式有两种:

1)声明异常(就是抛出异常)
在方法声明的后面(即大括号前面):throws 异常类型,不明确要怎么处理的时候

2)try{
  编译期异常代码
    }catch(异常类名 变量名){
  异常处理代码。
    }


  2:运行期间:这个是我们不需要处理,但是也可以处理  (RuntimeException下的异常)

1)如果不处理,java就会用jvm会采用自动的处理方式,
它就把异常的类型,原因,位置直接显示在了控制台。并且退出当前线程(可以理解为退出虚拟机)
同时后面的代码是不能执行的。


2)如果处理,   我们会采用try{}catch(){}
try{
  可能发生问题的代码。
  }catch(异常类名 变量名){
  异常处理代码。
  }



①:一个代码中,有多个问题,怎么解决呢?
 A:一个个用异常处理方案解决。(也就是写多个try{}catch(){})
 B:针对所有问题,写一个try...catch代码。
  try{}catch(){}catch(){}...


针对多个异常,写一个try的代码,catch里面会不会有顺序问题呢?
*如果异常是平级关系,没有顺序问题。
*如果异常存在着子父关系,父一定要放在最后。

写多个catch(){}我们觉得很麻烦这时候就有了JDK7的新特性
JDK7新特性:多个catch用一个catch替代。 不是说多个catch的内容,用一个Exception处理。
 格式:
  catch(异常1 | 异常2 | 异常3 ... 变量名){}


②:我们一直在处理异常的时候都是打印的一句话,虽然我们提示了有错误,但是告诉开发人员是哪一行代码出错了吗?
告诉开发人员是哪个异常了吗?没有吧? 那这样的话,不利于开发人员对代码进行维护,所以我们就有了
标准的异常catch代码,既能打印出异常消息,显示出哪一行出的错,又能不影响后面的代码执行


首先介绍:Throwable中的方法:
  public String getMessage():返回的是异常的消息字符串。
  public String toString():返回异常的简单描述信息。
  全路径类名 : 消息字符串
public void printStackTrace():把错误信息显示在控制台。


学完了printStackTrace()后,就学习了catch标准代码
try{
  可能有问题的代码
}catch(异常类名 变量名){
  变量名.printStackTrace();
}finally{
释放资源代码。(数据库,IO)
}



3)如果处理运行期异常,我们还可以采用Throws 抛出异常,但是我们一般不用

编译期异常:Exception下面 非RuntimeException 的异常
运行期异常:RuntimeException下的异常



3:自定义异常


1)先定义一个类
2)继承Exception或者RuntimeException。
3)写一个有参构造方法
public MyException(String message) {
super(message);
}
4)在不满足条件的代码里面直接throw异常
if (score < 0 || score > 100) {
// System.out.println("分数错误");
MyException my = new MyException("分数不在指定范围内");
throw my;
} else {
System.out.println("分数正确");

}

4:常见的五种异常

1)NullPointerException

经常遇到的“空指针异常”,就是调用了未经初始化的对象或不存在的对象。

2) ClassNotFoundException

“指定的类不存在异常”,类的名称或路径不正确。

3) ArithmeticException

“数学运算异常”,有关的数学运算是否正确,公式是否正确。

4) ArrayIndexOutOfBoundsException

“角标越界异常”,调用的角标超出数组的范围。

5) IIIegalAccessException

“没有访问权限”,当前的方法对该类没有访问权限。

0 0