java中,想记录异常信息,该如何获得发生异常的类名和方法名呢不要用log4j等。

java中,想记录异常信息,该如何获得发生异常的类名和方法名呢不要用log4j等。,第1张

我觉得你写的是对的

StackTraceElement[] st = exgetStackTrace();

for (StackTraceElement stackTraceElement : st) {

String exclass = stackTraceElementgetClassName();

String method = stackTraceElementgetMethodName();

Systemoutprintln(exclass);

Systemoutprintln(method);

}

}

这个就是整个异常抛出的栈结构啊

1首先,把你指定的包,转换成本地路径

2列出本地路径下的所有类,并把class去掉,再拼接上 包名

3根据上面获取的类的全限定名,依次利用ClassforName(StringName)newInstance()来创建实例

4把创建好的实例添加到集合中。

Code:

/

根据包名来获取此包下所有的类名及其实例

@param packName

@return

/

public static Set<Object> getObjectsInPackage(String packName){

Set<Object> objs = new HashSet<Object>();

String packageName = packName;

String packageDirName = packageNamereplace("", "/");

Enumeration<URL> dirs = null;

try {

dirs = ThreadcurrentThread()getContextClassLoader()getResources(packageDirName);

//迭代此 Enumeration

while(dirshasMoreElements()){

URL url = dirsnextElement();

File file = new File(urlgetFile());

//把此目录下的所有文件列出

String[] classes = filelist();

//循环此数组,并把class去掉

for(String className : classes){

className = classNamesubstring(0,classNamelength()-6);

//拼接上包名,变成全限定名

String qName = packageName+""+className;

//如有需要,把每个类生实一个实例

Object obj = ClassforName(qName)newInstance();

//添加到集合中

objsadd(obj);

}

}

} catch (Exception e) {

eprintStackTrace();

}

return objs;

}

先通过IO,定位到这个包

通过Filelist得到一个包含这个包下所有class的文件的数组。

循环这个数组,用包名拼接每一个遍历出来的文件的名字,得到每一个完整的类名(即,包名加类名)

通过classforname反射得到每一个类实例

使用反射可以获取到;

代码如下:

import javalangreflectField;  //这是需要引入的包Field[]  f = 类名classgetDeclaredFields(); //获取该类的字段(public, protected, default (package) access, and private)

for(Field ff:f)            //遍历字段

{

  Systemoutprintln(ffgetType());    //获取字段类型

  Systemoutprintln(ffgetName());    //获取字段名

}

String packageName = AclassgetPackage()getName();

或者:

packageName = new A()getClass()getPackeage()getName();

即可获得包名了。

以上就是关于java中,想记录异常信息,该如何获得发生异常的类名和方法名呢不要用log4j等。全部的内容,包括:java中,想记录异常信息,该如何获得发生异常的类名和方法名呢不要用log4j等。、java 获取指定包下类的实例(100分)、java如何通过反射获取包中所有的类等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9449160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存