请问:
1,看我的理解对不对:
“不受检查异常”(即RuntimeException异常)是不必我们人为的去检查的异常 不必我们人为的抛出 由虚拟机抛出和处理
“受检查的异常”是必须由我们人为的去检查和抛出并捕获处理的异常 得放入try块中
编译器对“受检查的异常”只是检查语法 检查有没有语法错误 
编译器无法检查出“受检查的异常” 只能检查出语句是否会抛出“不受检查异常” 然后保存这些信息 在运行时将这些信息交给虚拟机处理2,网络中断 是什么类型的异常 如果是“不受检查异常” 那么编译器怎么知道会知道网络是否会中断呢 并将这些信息保存传递给虚拟机呢
谢谢

解决方案 »

  1.   

    异常按作用分有分为“与功能相关异常”和“与功能无关异常”
    通常这样处理,如果:比如是UserManager一个类,有个getUser(String name,String password)方法,你可能自定义了一些异常比如,密码错误异常,没有用户异常等等,这些你是希望用户捕捉和处理的,就从方法中抛出。而还有一些异常比如你在取用户信息的时候,读取配置文件,就会有FileNotFoundException这个异常还能一同抛给使用UserManager的人么?当然不能,用户捕捉到了这个异常也没办法知道怎么处理,代表什么意思。所以应就地捕捉然后转化为RuntimeException,RuntimeException通常指系统级比较严重的底层错误,不需要捕捉,因为程序直接中断。
      

  2.   

    “不受检查异常”(Unchecked Exception)和“受检查异常”(Checked Exception)是指编译器在编译时是否对异常捕获和异常抛出声明进行语法检测,Java 的异常处理体系将程序运行中可能出现的意外情况作了比较细致的分类,整体结构如下:java.lang.Throwable
     ├java.lang.Error
     └java.lang.Exception
        ├java.lang.RuntimeException
        ├Others Exception
        ├......一般情况下 Error 和 RuntimeException 的子类所描述的错误和运行时异常都是 Unchecked Exception,即对有可能抛出这些错误或运行时异常的代码段可以作异常捕获处理或对包含它们的方法做异常抛出声明,但这不是必须的。如果没有捕获和抛出声明也一样能通过编译器的语法检测正常编译。比如:OutOfMemoryError 因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该错误。像这样严重的异常情况如果出现,你即便捕获到了也不大可能通过异常处理解决此异常情况,所以不是必须(当然也没必要或不应该)捕获它们或作抛出声明。对于运行时异常,例如:NullPointerExcetion 如果代码编写的没有漏洞,空指针异常完全可以避免(通过 if (s != null) s.doSomething();),所以同样不应该捕获或声明抛出。虽然运行时异常绝大多数不应捕获,但有时做捕获处理有利于简化代码的逻辑,例如:将字符串解析成整数的 Integer.parseInt(String s) 方法,如果字符串格式不正确可能抛出 NumberFormatException 这个运行时异常,作捕获处理会比在解析前用正则表达式先校验其格式方便得多。这之外的其它异常都是 Checked Exception,分别描述了不同的异常情况,对于这些异常都应该也必须作异常捕获处理或对方法作异常抛出声明,否则代码通不过编译器编译。