黑马程序员技术交流社区
标题:
异常
[打印本页]
作者:
oracleserver
时间:
2012-6-25 15:20
标题:
异常
在java中我们会遇到很多异常,但是我们在处理的时候往往都是直接通过(e.printStackTrace())打印内存中堆栈的异常信息,这种处理方式是否合理,还有如果我们在开发应用的时候项目完成了,用户在使用这个程序的时候看见报了一推的英文,这样看起来并不是很友好,请问有什么高效的处理方式吗。
作者:
黄连兵
时间:
2012-6-25 16:12
详细类容,请继续观看毕老师的视频教程~!
后面会讲解将异常捕获后进行存盘,或者异常捕获后在用户界面中显示提示信息等多种具体处理方式。
用这个程序的时候看见报了一推的英文
,估计就是出现了RuntimeException或者Error说明程序编写不合理~
作者:
张华廷
时间:
2012-6-25 17:00
exception是所有异常的父类,一般不管出现什么异常,只要catch
(Exception e)都不会报错,但如果你知道的代码可能发生异常种类,比如是文件找不到异常最好用
FileNotFoundExcption这样抛出异常,你就知道发生了什么错误,便于调试,e.printstacktrace();的意思就是把异常信息在后台打印出来,你不这样写的话发生异常不会有任何提示,
throw new Ioexeption(e.toString());的作用是一样的
就是说这个代码块如果catch到exctption的话还要再抛出
Ioexcptio,n而参数写在里面是因为io异常有个构造方法可以吧异常e像
e.printstack trace();打印出来,其实效果是差不多的
作者:
Forever。
时间:
2012-6-25 17:02
当然不是,你在cacth里打印出异常信息是为了很快的找到你程序的问题所在。我理解的异常更可以看成是一个智能的判断语句,加入你写了一段代码,如果客户在用这段代码时很有可能出现错误,但是呢这种错误呢是无法预知的,你就可以给他加一个try catch 然后再catch里写上你需要对这个异常出现后的处理,比如说操作失败请您从新操作接着跳转到原来的画面。
作者:
Forever。
时间:
2012-6-25 17:02
当然不是,你在cacth里打印出异常信息是为了很快的找到你程序的问题所在。我理解的异常更可以看成是一个智能的判断语句,加入你写了一段代码,如果客户在用这段代码时很有可能出现错误,但是呢这种错误呢是无法预知的,你就可以给他加一个try catch 然后再catch里写上你需要对这个异常出现后的处理,比如说操作失败请您从新操作接着跳转到原来的画面。
作者:
周兴中
时间:
2012-6-25 17:08
本帖最后由 周兴中 于 2012-6-25 17:20 编辑
下文摘自网络,我觉得说得通俗易懂,希望对你有帮助.
Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理。不过,我认为很多人其实并没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道点概念。本文就对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为:
好,不好和恶劣三种。
同时向你提供了一些解决这些问题的技巧。
首先解释一些java异常处理中必须搞清楚的定义和机制。Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都称作“不可检查”(Unchecked)异常;其他所有异常则称作“可检查”(Checked)异常。
所谓可检查异常,是指我们应该自行处理的异常。至于处理的手段,要么加以控制(try catch),要么通告(throws)他们有可能产生。通常,应捕捉那些已知如何处理的异常,而通告那些不知如何处理的异常。
而对那些不可检查异常来说,他们要么在我们的控制之外(Error),要么是我们首先就不该允许的情况(RuntimeException).
至于异常的指定,Java的规则非常简单:一个方法必须通告自己可能产生的所有可检查异常。编写自己的方法时,并不一定要通告出方法实际可能产生的每一个异常对象,要想理解什么时候必须要方法的throws丛句来通告异常,就必须知道对一个异常来说,他只有可能在下面四种情况下才会产生:
1.调用了可能产生异常的方法。比如BufferedReader类的readLine方法。该方法通告java.io.IOException异常
2.侦测到一个错误,并用throw语句产生异常。
3.出现一个编程错误。比如a[-1] = 0。
4.Java产生内部错误。
如果出现头两种情况之一,必须告诉打算使用自己方法的人:假如使用这个方法,可能造成一个异常的产生(即在方法头上使用throws),一个简单的记忆方法:
只要含有throw,就要通告throws。如果一个方法必须同时处理多个异常,就必须在头内指出所有异常。就像下例展示的那样,用逗号对他们进行分割:
1234567 class Animation
{
public Image loadImage(Strint s) throws EOFException,MalformedURLException
{
…………
}
}
然而,我们不需要通告内部java错误,也不应该通告自RuntimeException衍生出来的异常。
好的异常处理
好异常处理提供了处理程序错误的统一机制。事实上,Java语言通过向调用者提出异常警告的方式而显著地提升了软件开发中的异常处理能力。这种方式把Java语言中的“方法(method)”进行了扩展和增强,使之包括了自身的错误条件。下面就让我们看一个例子,这个例子说明了这种情况。
以下是FileInputStream构造器之一的原型:
public FileInputStream(String name) throws FileNotFoundException Java
的方法和构造器必须声明他们在被调用时可能“扔出”的异常,采用的关键字就是“throws”。这种在方法原型中出现的异常提示增加了编程的可靠性。
显而易见,这种方式是向方法的调用者提示了可能出现的异常条件,这样调用者就可以对这些异常作出适当的相应处理。以下代码示意我们是如何捕获并且处理FileNotFoundException 这一异常的:
1234567891011 try
{
FileInputStream fis = new FileInputStream(args[0]); //
由于该方法有可能会抛出"文件未找到异常",FileNotFoundException
// other code here ...
}
catch (FileNotFoundException fnfe)
{
System.out.println("File: " + args[0] + " not found. Aborting."); //
所以当我们捕获到该异常时,应该告诉用户文件未找到这样的提示,用户就知道是自己选文件或路径有误,这样用户体验会好一些.
System.exit(1);
}
Java异常处理还有其他一些优秀的特性,这就是可检查异常、用户定义异常和在JDK 1.4中推出的新型Java记录API(Java Logging API)。java.lang.Exception的所有子类都属于可检查异常。可检查异常(checked exception)是扔出该异常的方法所必须提示的异常,这种异常必须被捕获或者向调用者提示。用户定义异常(User-defined exceptions)是定制的异常类,这种异常类扩展了java.lang.Exception类。优良的Java程序规定定制异常封装、报告和处理他们自己独有的情况。最新的Java记录API(logging API)则可以集中记录异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2