java中,想记录异常信息,该如何获得发生异常的类名和方法名呢?不要用log4j等。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,想记录异常信息,该如何获得发生异常的类名和方法名呢?不要用log4j等。相关的知识,希望对你有一定的参考价值。
StackTraceElement[] st = e.getStackTrace();
string exclass=st[0].getClassName();
这样不行,得到的不是发生异常的类,而是the name of the exception.
StackTraceElement[] st = e.getStackTrace();
string exclass=st[0].getClassName().toString();
这样不行,得到的不是发生异常的类,而是the name of the exception.
StackTraceElement[] st = ex.getStackTrace();
for (StackTraceElement stackTraceElement : st)
String exclass = stackTraceElement.getClassName();
String method = stackTraceElement.getMethodName();
System.out.println(exclass);
System.out.println(method);
这个就是整个异常抛出的栈结构啊追问
谢谢啊,是我想错了。获取当前类名和方法名怎么获取?
追答?
exclass这个就是当前类名
method就是当前异常处的方法名
比如
public static void getA()
try
throw new Exception();
catch (Exception ex)
StackTraceElement[] st = ex.getStackTrace();
for (StackTraceElement stackTraceElement : st)
String exclass = stackTraceElement.getClassName();
String method = stackTraceElement.getMethodName();
System.out.println(new Date() + ":" + "[类:" + exclass + "]调用"
+ method + "时在第" + stackTraceElement.getLineNumber()
+ "行代码处发生异常!异常类型:" + ex.getClass().getName());
调用后打印结果就是
Thu Sep 27 14:59:41 CST 2012:[类:AAA]调用getA时在第6行代码处发生异常!异常类型:java.lang.Exception
Thu Sep 27 14:59:41 CST 2012:[类:sss]调用main时在第4行代码处发生异常!异常类型:java.lang.Exception
我写的运行出来不是这个结果啊。是不是跟我抛出的异常类型有关,我抛出的是SQLException,最后得到是类名和方法名都是sql上层的类和方法。
追答应该不是 这个是个栈结构 你去取st[0]应该是最上层的位置吧,你需要取的是st[st.length-1]
参考技术A 楼主你问的这个问题很有水平啊 你要获得方法名和类名 建议你Debug跟踪一下 或者1楼写的那样看看什么异常 查查api 参考技术B 使用的st应该转换成String追问谢谢,刚才我随便写的,没注意。但我要问的不是这个问题。
追答try
//代码块
catch (Exception e)
System.out.println(e.getMessage());
这样就可以了
//代码块
catch (Exception e)
System.out.println(e.getMessage());
//这样就可以捕获你的错误追问
是我没说明白么?我想获得发生异常的类名,方法名,并把他们单独存放在相应的变量里。
Java学习记录7 异常
1. 异常机制
-
异常(Exception):意思是例外。软件程序在运行过程中遇到的例外。
-
格式:try{}catch(Exception e){e.printStackTrace();}
-
Java是采用面向对象的方式来处理异常的。处理过程:
-
抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
-
捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法来开始追溯,直到找到相应的异常处理代码为止。
-
-
异常的分类:
-
所有异常的根类:Throwable。
-
Error:自己处理不了的问题,需要重启虚拟机。
-
Exception:程序本省能够处理的异常。是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。
-
Checked Exception已检查异常:编译器需要处理。编译时通不过。方法1:try catch,方法2:throws抛出
try{
语句1;
语句2:
}catch(Exception1 e){
}catch(Exception2 e/*异常类型*/){
}finally{
//是否遇到异常,这里都会最后执行。
}
如果语句1有异常,语句2就不执行了,直接执行相应的异常处理语句,最后执行finally。
//方法1:捕获异常try catch
FileReader reader = null;
try {
reader = new FileReader("d:/bb.txt");
char c1 = (char) reader.read();//读文件的一个字符
System.out.println(c1);
} catch (FileNotFoundException e) {//子类异常在父类前面
e.printStackTrace();//打印异常信息
} catch(IOException e){
e.printStackTrace();
}finally{
try {
if(reader != null)
{
reader.close();
}
} catch (IOException e) {
?
e.printStackTrace();
}
}
方法2:声明异常throws抛出,谁调用谁处理
public static void main(String[] args) throws IOException /*抛給了JRE*/{
readMyFile();
}
?
public static void readMyFile() throws IOException {
FileReader reader = null;
reader = new FileReader("d:/bb.txt");
char c1 = (char) reader.read();// 读文件的一个字符
System.out.println(c1);
?
if (reader != null) {
reader.close();
}
} -
Runtime Exception(Unchecked Exception)运行时异常:编译器不需要处理。逻辑判断处理来避免这些异常。
int a = 0;
int b = 1;
if(a != 0)
{
System.out.println(b/a);
}
//java.lang.NullPointerException 空指针异常
String str = null;
if(str != null)
{
System.out.println(str.length());
}
-
-
手动抛出异常
-
自定义异常:如果继承Exception类,则为受检查异常,必须对其进行处理。如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
-
alt+shift+s:弹出Source下拉框
-
public static void main(String[] args) {
Person p = new Person();
p.setAge(-10);
}
?
class Person{
private int age;
?
public int getAge() {
return age;
}
?
public void setAge(int age) {
if(age < 0){
try {
throw new IllegaAgelException("年龄不能为负数");
} catch (IllegaAgelException e) {
e.printStackTrace();
}
}
this.age = age;
}
}
class IllegaAgelException extends Exception{
public IllegaAgelException(){
}
public IllegaAgelException(String msg){
super(msg);
}
} -
以上是关于java中,想记录异常信息,该如何获得发生异常的类名和方法名呢?不要用log4j等。的主要内容,如果未能解决你的问题,请参考以下文章