模块  java.base
软件包  java.lang

Class StackTraceElement

  • 实现的所有接口
    Serializable

    public final class StackTraceElement
    extends Object
    implements Serializable
    堆栈跟踪中的元素,由Throwable.getStackTrace()返回。 每个元素代表一个堆栈帧。 除堆栈顶部的堆栈帧之外的所有堆栈帧表示方法调用。 堆栈顶部的框架表示生成堆栈跟踪的执行点。 通常,这是创建与堆栈跟踪相对应的throwable的点。
    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • StackTraceElement

        public StackTraceElement​(String declaringClass,
                                 String methodName,
                                 String fileName,
                                 int lineNumber)
        创建表示指定执行点的堆栈跟踪元素。 堆栈跟踪元素的module namemodule version将是null
        参数
        declaringClass - 包含堆栈跟踪元素表示的执行点的类的标准名称
        methodName - 包含堆栈跟踪元素表示的执行点的方法的名称
        fileName - 包含堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用, null
        lineNumber - 包含此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。 值-2表示包含执行点的方法是本机方法
        异常
        NullPointerException - 如果 declaringClassmethodName为空
        从以下版本开始:
        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 - 如果 declaringClassnullmethodNamenull
        从以下版本开始:
        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)上返回两个不同的值,例如通过构造函数创建的一个,以及从ThrowableStackWalker.StackFrame获得的一个,其中实现可以选择省略返回的字符串中的某个元素。

        结果
        对象的字符串表示形式。
        另请参见:
        Throwable.printStackTrace()
      • equals

        public boolean equals​(Object obj)
        如果指定的对象是另一个表示与此实例相同的执行点的StackTraceElement实例,则返回true。 当且仅当以下情况时,两个堆栈跟踪元素ab相等:
           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