java打印异常信息
㈠ java编写一个能够产生空指针异常的程序,并将其捕获在控制台输出异常信息,要这个代码
一、空指针异常产生的主要原因如下:
1、当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在;
2、当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在;
3、字符串变量未初始化;
4、接口类型的对象没有用具体的类初始化。
二、实现思路:
1、利用空指针异常的表现之一:对空字符串进行操作。
2、设置一个空的字符串,然后对其进行查找操作(可以使用charAt()方法)
3、对将要出现的异常进行捕获
4、打印到控制台
//java代码
{
/**
*实现思路:
*1.空指针异常的表现之一:对空的字符串进行了操作
*2.设置一个空的字符串,然后对其进行查找操作(可以使用charAt()方法)
*3.对将要出现的异常进行捕获
*4.打印到控制台
**/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//定义一个空的字符串
Stringstr=null;
//尝试对空字符串进行操作,并捕获异常,输出异常
try{
System.out.println(str.charAt(0));
}catch(Exceptione){
System.out.println("异常信息:");
e.printStackTrace();
}
}
}
运行结果图:
程序开发过程中的空指针异常会经常出现,要尽量保持逻辑清晰,能够及时排查错误代码,对可能发生的异常进行捕获,不要影响主程序运行。
㈡ Java异常处理:如何避免重复打印异常
检查日志文件,你就能看到满屏重复的异常。
因此,异常只能被打印一次。在哪儿打异常最好呢?。
原则就是自定义异常在抛出前打印一下,其他各层对自定义异常不作任何打印。甚至不用Catch.
对于上面WebServiceClient.login,在这打印是对的,还可以加上自己的一些log信息,如log.fatal("cannotlogintheXXXsystem");至于在其他层,就不在需要打印,处理这个异常了。这样的异常处理没有什么技术含量,只是个异常处理原则,如果人人都遵循(看到自定义不处理,抛自定义异常前处理)这个原则,就能避免重复打印异常日志
再考虑如何把友好的异常信息给终端用户呢,所谓友好,不能总是提示“系统错误,请稍后再试”,因为这样能让使用者对系统没有信心。好比领导交给你的任务,你没有完成,你总不能每次都说“这是我的问题,以后改正”吧。对异常进行稍微详细的说明,是必要的。另外,也不能总是把异常的stacktrace原封不动的现实给使用者,如java.io.IOExcepiton:Filecannotbefound.这样会被认为你的程序质量不够高。
可以通过异常指定类型来在Web层解释并转化为友好的异常
。如上列子,可以如下定义MyApplicationExceptoin
如下代码:
㈢ java中如何获取throws抛出的异常,并且把异常打印到指定的jsp页面
比如你又一个方法叫a,调用了一个方法b(b方法throws了一个异常),那么在a里面使用try-catch捕获这个异常,在catch块里面,使用jsp的request,或者session将异常对象e.getMessage的内容存储到制定的变量里面(例如request.setAttribute("errorMessage",e.getMessage));
然后到页面使用EL表达式${errorMessage}取出来就好了。
㈣ java中怎么把发生的异常打印在web页面上
用try catch语句实现:
try{
//业务代码
}catch(Exceptione){
e.printStackTrace();//打印异常
thrownewException("WriteInputStreamError"+e.toString());//抛给客户端的异常
}
㈤ 为什么java要把异常打印到堆栈
不是打印到堆栈,而是打印栈信息,因为程序执行的时候,最终还是要靠01二进制代码执行,运行在堆栈里面,所以出错或抛出异常时能被捕获到
㈥ java异常处理包含哪几个环节
可以选择三种方法来进行异常处理1对代码块用try..catch进行异常捕获处理;
2在 该代码的方法体外用throws进行抛出声明,告知此方法的调用者这段代码可能会出现这些异常,你需要谨慎处理。此时有两种情况:
如果声明抛出的异常是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果声明抛出的异常是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
3在代码块用throw手动抛出一个异常对象,此时也有两种情况,跟2)中的类似:
如果抛出的异常对象是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果抛出的异常对象是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
(如果最终将异常抛给main方法,则相当于交给jvm自动处理,此时jvm会简单地打印异常信息)
常处理和设计的建议
1. 只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程
2. 切忌使用空catch块
3. 检查异常和非检查异常的选择
4. 注意catch块的顺序
5. 不要将提供给用户看的信息放在异常信息里
6. 避免多次在日志信息中记录同一个异常
7. 异常处理尽量放在高层进行
8. 在finally中释放资源
㈦ Java 使用e.printStackTrace打印异常信息会减少内存吗
Java抛出异常的方法有很多,其中最常用的两个:
System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常,不过它和另外一个e.printStackTrace()方法不同。后者也是打印出异常,但是它还将显示出更深的调用信息。
比如说:
A extends ---> B extends ----> C
当在创建A的过程中出现问题了,我们抛出异常。
System.out.println(e),除了标准异常外,只打印at A 然后再向外层层输出。
e.printStackTrace(),除了标准异常外,打印
at C
at B
at A
.......再向外层调查。
在向外层调查的情况下,都一样。最后都会回到com.sun.midp.main.Main.main