java怎样得到运行时程序的行号
来源:互联网 发布:ali个人域名怎么转企业 编辑:程序博客网 时间:2024/06/08 11:54
注意到log4j可以输出代码的行号,我就感到很奇怪,log4j是怎样输出代码的行号的?带着这个疑问,到网上找了一些列子,才发现原来是这个样子,具体是怎么一回事,就听我下面细细道来,不要怪我文笔太差,希望大家多多的指教。
先来看下下面的代码:
StackTraceElement[] elements = Thread.currentThread().getStackTrace();for(StackTraceElement element : elements){System.out.println("className : " + element.getClassName());System.out.println("fileName : " + element.getFileName());System.out.println("lineNumber : " + element.getLineNumber());System.out.println("methodName : " + element.getMethodName());System.out.println("*************************************");}
运行可以得到如下的输出:
className : java.lang.Thread
fileName : Thread.java
lineNumber : 1479
methodName : getStackTrace
*************************************
className : com.warnow.test.StackTraceElementTest
fileName : StackTraceElementTest.java
lineNumber : 9
methodName : main
*************************************
StackTraceElement到底是个什么样的对象,参看java api,可以看到这个类有这样的构造器StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)在构造这个类的时候已经把相关的信息存进来了, StackTraceElement代表堆栈中的每个Element,用来存放类名,方法名,文件名,行号等信息。也可以通过 Throwable.getStackTrace()来获取StackTraceElement数组(存放的是所有的),通过StackTraceElement对象就可以获取到类名,文件名,运行的代码的行号,方法名。从上面的输出可以看出最后的那个StackTraceElement就是我们当前运行主函数。加入有类似如下的代码运行的结果会是怎样呢?
//get all StackTraceElement instance.//StackTraceElement[] elements = Thread.currentThread().getStackTrace();StackTraceElement[] elements = new Throwable().getStackTrace();for(StackTraceElement element : elements){System.out.println("className : " + element.getClassName());System.out.println("fileName : " + element.getFileName());System.out.println("lineNumber : " + element.getLineNumber());System.out.println("methodName : " + element.getMethodName());System.out.println("*************************************");//System.out.println("class : " + element.getClass());//System.out.println("*****************************************************");//throw new RuntimeException("xxxx");}
与上面不同这次同过Throwable.getStackTrace()来获取的,输出结果如下:
className : com.warnow.test.StackTraceElementTest
fileName : StackTraceElementTest.java
lineNumber : 10
methodName : main
*************************************
这次的输出就只有主函数信息,先就写到这里了。
- java怎样得到运行时程序的行号
- 怎样查看Eclipse运行java程序时用的命令
- 怎样查看Eclipse运行java程序时用的命令
- JAVA怎样得到当前程序所在文件夹的路径
- 怎样得到程序的运行路径,以系统时间命名文件
- 程序是怎样运行的
- JCreator中怎样设置运行带参数的java程序
- eclipse中怎样运行带命令行参数的java程序
- 一个java程序是怎样运行起来的(1)
- 一个java程序是怎样运行起来的(2)
- 一个java程序是怎样运行起来的(3)
- 如何得到程序运行时占用的内存?
- 怎样在android系统启动时自动运行自己的程序
- 怎样在android系统启动时自动运行自己的程序
- 这个程序是怎样运行的?
- 怎样知道程序运行消耗的时间
- MFC怎样编写后台运行的程序
- MFC怎样编写后台运行的程序
- 计算机网络协议第三章,网络层协议
- uva 10012 - How Big Is It?
- HDU 5014 Number Sequence
- ftp的web访问格式
- 安卓实现底部弹出框/自定义对话框
- java怎样得到运行时程序的行号
- 数字图像处理,小波变换一维Mallat算法的C++实现(matlab验证)
- Linux学习笔记(七)打造vim下的IDE
- 【Shell】【学习笔记】Linux Shell脚本应用(七)
- Android 获取手机SIM资料详解
- Mysql 5.5.40实现一主多从 One-Master muil-slave
- ARM学习记录_ARM2440--J-link烧写设置
- VFS文件系统结构分析
- 单元格选择模式