`
cpf1985
  • 浏览: 76604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java异常

    博客分类:
  • java
阅读更多



--异常
 *异常是java提供的处理程序中运行时错误的一种机制
 *java程序在执行过程中如果出现异常,会生成一个异常类实例,该实例封装了异常的信息交给java运行时系统,这一过程叫抛出异常
 *当异常抛出时如果没有捕获那么java运行时默认的处理方式是将异常信息打印到控制台
 *所以一般情况下需要在异常被抛给运行时系统之前将其捕获
--异常体系结构
         --Error(系统的内部错误是程序员无法控制的错误,虚拟机错误)
 Object--Throwable--      --(一般的Exception必须要显示的捕获)
         --Exception-- (程序员可以控制的错误)                       
              --RuntimeException(运行时异常,不需要显示捕获)
 *只要是Throwable的实例或者它的子类的实例都能被throws(方法中),也能被throw(代码块中)
 *Exception我能处理的
 *Error系统断电,无法处理
 *RuntimeException--经常出的错误(可以逮它可以不逮它,比如一些小错误)
 *一般异常是指比较重大的错误(要求必须处理后才能继续运行)
--一般异常和运行时异常的区别
 一般异常是编译器可以“感知”的异常,所以程序被要求必须捕获并处理这些异常,一般是比较严重的异常,并且JDK中声明抛出的方法抛出的都是该类型的异常,也就是必须要要捕获的异常
 而运行时异常时是程序经常发生的异常,不是很严重的异常,可以捕获也可以不捕获,编译器不感知这类异常,如果这类异常全需要处理的话那程序效率会受到一定得影响
 我这里用是否严重来区分两者只是在编译器层面做一定的分析,实际上任何异常都因该考虑!写健壮点总会减少一定得问题
 Error编译器也不会自动感知
--printStackTrace()
 *只将异常的所有堆栈信息全部打印,包含抛出异常的方法的位置,调用该方法的位置,这就是堆栈信息
--getMessage()方法就是返回构造进去的字符串信息

--
try{
 ...
}catch(Exception e){
 ...
}catch(AtimeticException e){
 ...
}
这是无法通过编译的,尝试去理解编译器就能很好的理解这样的问题了 

--什么是API---引文翻译:Application Programming Interface应用程序编程接口   

--异常在继承中方法重写中的一个问题
 *如果父类的方法抛出异常,子类在重写这个方法的时候要么抛出相同的异常要么什么也不抛出,如果什么也不抛出不会继承父类方法的抛出特性(这里和指针移位有点冲突)
 *注意一个原则编译时不会有多态的情况发生,也是试图从编译器的角度去考虑问题就行了
 *为什么继承能这样做,记住一个原则所重写的方法的限制必须要比父类的宽松才能实现多态
 public class Test {
 public void function() throws Exception{
  throw new Exception("test");
  }
 }
 class Test2 extends Test{
  public void function(){//这样是比限制父类的宽松
   
  }
 }
 class App{
  public static void main(String[] args){
   Test t=new Test2();
   t.function();//这样是错误的
   
   Test2 t=new Test2();
   t.function();//这样是可以的
  }
 }          

[size=medium][/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics