- java.lang.Object
-
- java.lang.StackTraceElement
-
- 实现的所有接口
-
Serializable
public final class StackTraceElement extends Object implements Serializable
堆栈跟踪中的元素,由Throwable.getStackTrace()
返回。 每个元素代表一个堆栈帧。 除堆栈顶部的堆栈帧之外的所有堆栈帧表示方法调用。 堆栈顶部的框架表示生成堆栈跟踪的执行点。 通常,这是创建与堆栈跟踪相对应的throwable的点。- 从以下版本开始:
- 1.4
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。StackTraceElement(String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)
创建表示指定执行点的堆栈跟踪元素。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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()
返回包含此堆栈跟踪元素表示的执行点的模块的模块名称。- 结果
-
包含此堆栈跟踪元素表示的执行点的
模块
的模块名称;null
如果模块名称不可用。 - 从以下版本开始:
- 9
- 另请参见:
-
Module.getName()
-
getModuleVersion
public String getModuleVersion()
返回包含此堆栈跟踪元素表示的执行点的模块的模块版本。- 结果
-
模块
的模块版本,包含由此堆栈跟踪元素表示的执行点;null
如果模块版本不可用。 - 从以下版本开始:
- 9
- 另请参见:
-
ModuleDescriptor.Version
-
getClassLoaderName
public String getClassLoaderName()
返回包含此堆栈跟踪元素表示的执行点的类的类加载器的名称。- 结果
-
包含此堆栈跟踪元素表示的执行点的类的类加载器的名称;
null
如果没有命名类加载器。 - 从以下版本开始:
- 9
- 另请参见:
-
ClassLoader.getName()
-
getClassName
public String getClassName()
返回包含此堆栈跟踪元素表示的执行点的类的完全限定名称。- 结果
-
包含此堆栈跟踪元素表示的执行点的
类
标准名称。
-
getMethodName
public String getMethodName()
返回包含此堆栈跟踪元素表示的执行点的方法的名称。 如果执行点包含在实例或类初始值设定项中,则此方法将根据Java虚拟机规范的第3.9节返回相应的特殊方法名称<init>
或<clinit>
。- 结果
- 包含此堆栈跟踪元素表示的执行点的方法的名称。
-
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
模块中定义,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
实例,则StackTraceElement
true。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此堆栈跟踪元素的哈希码值。- 重写:
-
hashCode
在类Object
- 结果
- 此对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-