- java.lang.Object
-
- java.lang.StackTraceElement
-
- All Implemented Interfaces:
-
Serializable
public final class StackTraceElement extends Object implements Serializable
堆栈跟踪中的一个元素,由Throwable.getStackTrace()
返回。 每个元素表示单个堆栈帧。 堆栈顶部除堆栈之外的所有堆栈都表示方法调用。 堆栈顶部的帧表示生成堆栈跟踪的执行点。 通常,这是创建与堆栈跟踪相对应的throwable的点。- 从以下版本开始:
- 1.4
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。StackTraceElement(String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object obj)
如果指定的对象是另一个表示与该实例相同的执行点的StackTraceElement
实例,则返回true。String
getClassLoaderName()
返回包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称。String
getClassName()
返回包含由该堆栈跟踪元素表示的执行点的类的完全限定名称。String
getFileName()
返回包含由该堆栈跟踪元素表示的执行点的源文件的名称。int
getLineNumber()
返回包含由该堆栈跟踪元素表示的执行点的源行的行号。String
getMethodName()
返回包含由该堆栈跟踪元素表示的执行点的方法的名称。String
getModuleName()
返回包含由该堆栈跟踪元素表示的执行点的模块的模块名称。String
getModuleVersion()
返回包含由该堆栈跟踪元素表示的执行点的模块的模块版本。int
hashCode()
返回此堆栈跟踪元素的哈希码值。boolean
isNativeMethod()
如果包含由此堆栈跟踪元素表示的执行点的方法是本机方法,则返回true。String
toString()
返回此堆栈跟踪元素的字符串表示形式。
-
-
-
构造方法详细信息
-
StackTraceElement
public StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。 堆栈跟踪元素的module name
和module version
将为null
。- 参数
-
declaringClass
- 包含由堆栈跟踪元素表示的执行点的类的完全限定名称 -
methodName
- 包含由堆栈跟踪元素表示的执行点的方法的名称 -
fileName
- 包含由堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,null
-
lineNumber
- 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。 值-2表示包含执行点的方法是本地方法 - 异常
-
NullPointerException
- 如果declaringClass
或methodName
为空 - 从以下版本开始:
- 1.5
-
StackTraceElement
public StackTraceElement(String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。- 参数
-
classLoaderName
- 类加载器名称,如果包含由堆栈跟踪表示的执行点的类的类加载器被命名; 否则null
-
moduleName
- 如果包含由堆栈跟踪表示的执行点的类在一个命名模块中的模块名称; 否则null
-
moduleVersion
- 模块版本如果包含由堆栈跟踪表示的执行点的类在具有版本的命名模块中; 否则null
-
declaringClass
- 包含由堆栈跟踪元素表示的执行点的类的完全限定名称 -
methodName
- 包含由堆栈跟踪元素表示的执行点的方法的名称 -
fileName
- 包含由堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,null
-
lineNumber
- 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。 值-2表示包含执行点的方法是本地方法 - 异常
-
NullPointerException
- 如果declaringClass
是null
或methodName
是null
- 从以下版本开始:
- 9
-
-
方法详细信息
-
getFileName
public String getFileName()
返回包含由该堆栈跟踪元素表示的执行点的源文件的名称。 通常,这对应于相关class
文件的SourceFile
属性( 根据Java虚拟机规范 4.7.7节)。 在某些系统中,名称可能指的是文件之外的一些源代码单元,例如源存储库中的条目。- 结果
-
包含此堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,
null
。
-
getLineNumber
public int getLineNumber()
返回包含由该堆栈跟踪元素表示的执行点的源行的行号。 一般来说,这是源自相关class
文件的LineNumberTable
属性( 根据Java虚拟机规范 ,第4.7.8节)。- 结果
- 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。
-
getModuleName
public String getModuleName()
返回包含由该堆栈跟踪元素表示的执行点的模块的模块名称。- 结果
-
包含由该堆栈跟踪元素表示的执行点的
Module
的模块名称;null
如果模块名称不可用。 - 从以下版本开始:
- 9
- 另请参见:
-
Module.getName()
-
getModuleVersion
public String getModuleVersion()
返回包含由该堆栈跟踪元素表示的执行点的模块的模块版本。- 结果
-
Module
的模块版本包含由该堆栈跟踪元素表示的执行点;null
如果模块版本不可用。 - 从以下版本开始:
- 9
- 另请参见:
-
ModuleDescriptor.Version
-
getClassLoaderName
public String getClassLoaderName()
返回包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称。- 结果
-
包含由该堆栈跟踪元素表示的执行点的类的类加载器的名称;
如果类加载器未命名,
null
。 - 从以下版本开始:
- 9
- 另请参见:
-
ClassLoader.getName()
-
getClassName
public String getClassName()
返回包含由该堆栈跟踪元素表示的执行点的类的完全限定名称。- 结果
-
包含由此堆栈跟踪元素表示的执行点的
Class
的完全限定名称。
-
getMethodName
public String getMethodName()
返回包含由该堆栈跟踪元素表示的执行点的方法的名称。 如果执行点包含在实例或类初始化程序中,则该方法将返回相应的特殊方法名称<init>
或<clinit>
,如“Java虚拟机规范”第3.9节所述。- 结果
- 包含由该堆栈跟踪元素表示的执行点的方法的名称。
-
isNativeMethod
public boolean isNativeMethod()
如果包含由此堆栈跟踪元素表示的执行点的方法是本机方法,则返回true。- 结果
-
如果包含由该堆栈跟踪元素表示的执行点的方法是本机方法,
true
。
-
toString
public String toString()
返回此堆栈跟踪元素的字符串表示形式。- 重写:
-
toString
在Object
- API Note:
-
此字符串的格式取决于实现,但以下示例可能被视为典型的:
- “
com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)
” - 见下面的描述。 - “
com.foo.loader/foo@9.0/com.foo.Main.run(Main.java)
” - 行号不可用。 - “
com.foo.loader/foo@9.0/com.foo.Main.run(Unknown Source)
” - 文件名和行号都不可用。 - “
com.foo.loader/foo@9.0/com.foo.Main.run(Native Method)
” - 包含执行点的方法是本地方法。 - “
com.foo.loader//com.foo.bar.App.run(App.java:12)
” - 执行点的类在名为com.foo.loader
的类加载器的未命名模块中定义。 - “
acme@2.1/org.acme.Lib.test(Lib.java:80)
” - 执行点的类定义在acme
模块中,由一个内置的类加载器(如应用程序类加载器)加载。 - “
MyClass.mash(MyClass.java:9)
” -MyClass
类是在应用程序类路径上。
第一个示例显示了由三个元素组成的堆栈跟踪元素,每个元素由
"/"
分隔,后跟源文件名和包含执行点的源代码行的行号。 第一个元素“com.foo.loader
”是类加载器的名称。 第二个元素“foo@9.0
”是模块名称和版本。 第三个元素是包含执行点的方法; “com.foo.Main"
”是完全限定的类名,“run
”是方法的名称。 “Main.java
”是源文件名,“101
”是行号。如果在未命名的模块中定义了一个类,那么第二个元素被省略,如“
com.foo.loader//com.foo.bar.App.run(App.java:12)
”所示。如果类加载器是一个built-in class loader或者没有命名,那么第一个元素及其以下的
"/"
被省略,如“acme@2.1/org.acme.Lib.test(Lib.java:80)
”所示。 如果省略第一个元素,并且模块是未命名的模块,则第二个元素及其以下的"/"
也被省略,如“MyClass.mash(MyClass.java:9)
”所示。该
toString
方法可以在两个返回两个不同的值StackTraceElement
实例是equal ,例如一种通过构造创建,并且从获得的一个Throwable
或StackWalker.StackFrame
,其中一个实现可以选择省略一些元件返回的字符串英寸 - “
- 结果
- 对象的字符串表示形式。
- 另请参见:
-
Throwable.printStackTrace()
-
equals
public boolean equals(Object obj)
如果指定的对象是另一个表示与该实例相同的执行点的StackTraceElement
实例,则返回true。 当且仅当以下情况下,两个堆栈跟踪元素a
和b
是相等的equals(a.getClassLoaderName(), b.getClassLoaderName()) && equals(a.getModuleName(), b.getModuleName()) && equals(a.getModuleVersion(), b.getModuleVersion()) && equals(a.getClassName(), b.getClassName()) && equals(a.getMethodName(), b.getMethodName()) equals(a.getFileName(), b.getFileName()) && a.getLineNumber() == b.getLineNumber()
equals
的语义为Objects.equals
。- 重写:
-
equals
在Object
- 参数
-
obj
- 要与此堆栈跟踪元素进行比较的对象。 - 结果
-
如果指定的对象是另一个表示与该实例相同的执行点的
StackTraceElement
实例,则为true。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此堆栈跟踪元素的哈希码值。- 重写:
-
hashCode
在类Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-