A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡建荣 初级黑马   /  2012-7-15 12:44  /  1782 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在毕老师的第十天课程 异常总结里有讲到 两种异常 一种编译时被检察异常 一种运行时异常  

对这两种分别给一个例子讲解说明.  谢谢

7 个回复

倒序浏览
看API文档,若继承了RuntimeException的都是运行进异常
回复 使用道具 举报
Java异常可分为3种:
(1)编译时异常:Java.lang.Exception
(2)运行期异常:Java.lang.RuntimeException
(3)错误:Java.lang.Error
其中:Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;Java.lang.RuntimeException继承自Java.lang.Exception.
对于编译时异常:由编译器在编译时检测是否会发生在方法的执行过程中的异常。对于编译时的异常类,即使通过仔细编程也无法避免。因为程序正确,但因为外在的环境条件不满足引发。例如,要访问的文件不存在、用户错误及I/O问题等情况。这类异常通常都在JDK说明文档中定义的方法后面通过throws关键字将异常抛出,Java编译器强制要求处理这类异常,编程时必须捕获并做相应处理,如果不捕获这类异常,程序将不能被编译通过。我们经常遇到的一个编译时异常就是IOException,示例如下:
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
  FileWriter fw = null;
  try
  {
   fw = new FileWriter("z:\\Demo.txt"); //注意这里的盘符是z,一般情况下不可能出现z盘,是不是产生异常啊?这是由于外部条件不满足,而代码本身没错误,会抛出FileNotFoundException,这是IOException的子类
   fw.write("ablcdafd");//如果fw为空,这里就无法调用write方法,也会抛出异常。造成的原因都跟外部条件有关
  }
  catch(IOException e)
  {
   System.out.println(e.toString());
  }
  finally
  {
   try{}//close方法也需要抛出异常
   {
   
     fw.close(); //如果fw为空,这里就无法调用close方法,也会抛出异常。造成的原因也跟外部条件有关
   
   }         
   catch(IOException e)
   {
    System.out.println(e.toString());  
   }  
  
  }
  
}
}
以上代码在编译就会产生异常,编译不会成功。

运行时异常: Java运行系统执行过程中的异常,对于此类的异常,不需要声明异常,即使不编写异常处理的程序代码,依然可以编译成功,因为该异常是在程序运行时才有可能发生的,例如算术异常(除数为0)、数组下标越界等。这类异常需要更改程序来避免,Java编译器强制要求程序停止运行处理这类异常。此类异常适合用于异常发生时不处理让程序停止,进行代码修正。我们经常遇到的运行时异常就是数组越界异常IndexOutOfBoundsException,示例如下:
import java.util.*;
class Easy
{
public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
  System.out.print("请输入源程序:");
  String temps = sc.nextLine();
  System.out.println();
  String[] arrays = temps.split(" ");
  for (int i = 0; i < temps.length(); i ++)//这里的temps应该改为arrays,是程序员设计上的错误,只有在执行程序的时候才会被发现,运行时会抛出IndexOutOfBoundsException异常
  {   
   if(arrays.equals("begin"))
     System.out.print("(1,begin)");
    else
      System.out.print("(error)");
    }
  }
}
以上代码没有语法等错误,编译的时候是成功的,运行时才会出现异常,程序会停止运行。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
貌似视频里都有例子吧
回复 使用道具 举报
本帖最后由 蔡建荣 于 2012-7-15 19:10 编辑
刘煜 发表于 2012-7-15 13:37
Java异常可分为3种:
(1)编译时异常:Java.lang.Exception
(2)运行期异常:Java.lang.RuntimeException


你自己知道你自己在说的什么吗? 讲了一大堆   晦涩难懂得要死   

我一个认真的问问题 你却已这种以后答得多版主就给你分 然后我的问题其实也还是没解决  这是无聊的技术分!

点评

陆同学就是怕事儿小!!  发表于 2012-7-15 19:43
顶,明显百度搜来的  发表于 2012-7-15 19:34
回复 使用道具 举报
蔡建荣 发表于 2012-7-15 19:08
你自己知道你自己在说的什么吗? 讲了一大堆   晦涩难懂得要死   

我一个认真的问问题 你却已这种以后答 ...

哥们儿,我希望你能注意你的言辞~~~我是花了两个小时很认真的在回答你的问题,代码我是自己找的加上自己的分析,知识是我搜的资料自己消化后整理总结的,我真心希望你能认真看一下。如果真的对你没帮助,就不要再看一眼!我不否认我是为了技术分而回答你的问题,但是更重要的是我抱着学习的态度在回答你的问题,通过回答你的问题我收获的不仅仅是技术分,收获的还有靠自己的付出获得的知识以及小小的成就感。如果有一天我们有幸在黑马相见,我很愿意和你针对你的问题再探讨一下。
回复 使用道具 举报
韦念欣 黑马帝 2012-7-15 19:39:46
7#
本帖最后由 韦念欣 于 2012-7-15 19:49 编辑
蔡建荣 发表于 2012-7-15 19:08
你自己知道你自己在说的什么吗? 讲了一大堆   晦涩难懂得要死   

我一个认真的问问题 你却已这种以后答 ...

虽然那位同学有些句子表达不通顺,但他确实回答了两种异常的区别并使用代码讲解,我们版主并不是以回答得多而给分的。
楼主可能对异常不太了解,就觉得晦涩难懂,建议楼主最好多看几次毕老师视频中异常的部分,正如刘笑版主所说,楼主的问题在视频中都有讲解,这样你会对异常的理解更好。
回复 使用道具 举报
本帖最后由 陆强强 于 2012-7-15 19:48 编辑
蔡建荣 发表于 2012-7-15 19:08
你自己知道你自己在说的什么吗? 讲了一大堆   晦涩难懂得要死   

我一个认真的问问题 你却已这种以后答 ...


编译异常最多的是IO流异常,几乎所有的流都会报异常。都要对它进行捕捉。
另一种像FileNotFoundException
如果你指定d:\\11.txt文件,而文件在你的硬盘上不存在。运行的时候就会报这个异常。但编译的时候只要是字符串它都算路径,都给通过
如果你用eclipse的话编译异常和语法错误一样是直接用下划线提醒你的。
而运行异常会在你运行这个类以后在控制台打印出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马