异常的总结


1.强制异常,非强制异常,Error

java中的异常可以分为三种:
  (1)检查性异常:java.lang.Exception强制异常,编译时会报错
  (2)运行期异常:java.lang.RuntimeException非强制异常,运行时报错
  (3)错误:java.lang.Error,严重的问题
   
顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。 java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.

  检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

  运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。

  错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。


2.Exception,throw,throws,Throwable的区别

     1)throw 是手动抛出异常,throw new **Exception(); 抛出的是某一个异常类型的实例.
    2)throws 是方法抛出异常,写在方法声明处 public void show()throws **Exception,**Exception{} 紧跟throws后的是异常类型,而非异常实例,且可以声明抛出多个异常,同时这些异常类型大多都为 受检查异常类型。
     3)throw 是程序员手动抛出异常,一般可用在某种流程控制,需要显示操作失误情况下可对外抛出异常,进入catch代码块,明示操作有误等。
     throws 方法抛出异常,通常是告知调用此方法者,本方法有可能抛出一个异常,在调用时应当要进行异常监控。且因为throws方法抛出异常为受检查异常类型,这样就从语法上要求更需要对受检查异常类型作出捕获,或者再次向上抛出。

3.四个强制,三个运行,三个Error的例子,出现问题的原因


(JDK中有这样的例子。以下是在JDK中找到的)
  1) ClassFormatError extends LinkageError:
   当 Java 虚拟机试图读取类文件并确定该文件存在格式错误或无法解释为类文件时,抛出 该错误。
   2)IllegalAccessError extends IncompatibleClassChangeError
当应用程序试图访问或修改它不能访问的字段,或调用它不能访问的方法时,抛出该异常。
通常由编译器捕获此错误;如果类定义中存在不兼容的更改,则此错误将只可能发生在运行时。
   3)LinkageError extends ErrorLinkageError 的子类指示一个类在一定程度上依赖于另一个类;但是,在编译前一个类之后,后一个类发生了不相容的改变。






http://lvp.iteye.com/blog/356650(例子)

http://www.javadn.com/read.php?tid-326.html(java中常见异常转载)
http://tech.ccidnet.com/art/3539/20090212/1673063_1.html
http://blog.csdn.net/Mirage520/archive/2010/03/11/5372148.aspx

你可能感兴趣的:(java,jdk,PHP,虚拟机,socket)