`

在成员方法中获取类名、方法名、行数

    博客分类:
  • Java
阅读更多

在实例方法中如何获取该方法所属的类名、方法名、行数呢?

例子项目有两个类:

package com.jn.bean;

public class Student {
	public String method2(int age,String name) {
		System.out.println("execute....");
		Class clazz = this.getClass();
		String className = clazz.getCanonicalName();/* com.jn.bean.Student */
		String classSimpleName = clazz.getSimpleName();
		Object[] objs = clazz.getSigners();
		//当前的线程
		Thread currentThread=Thread.currentThread();
		//当前的线程名称
		String threadName =currentThread .getName();
		StackTraceElement stackElement=currentThread.getStackTrace()[1];
		//当前的方法名
		String methodName=stackElement.getMethodName();
		//当前的文件名
		String filename=stackElement.getFileName();
		int lineNum=stackElement.getLineNumber();
		System.out.println("class name:\t\t" + className);
		System.out.println("class simple name:\t" + classSimpleName);
		System.out.println("thread name:\t\t" + threadName);
		System.out.println("method name:\t\t"+methodName);
		System.out.println("file name:\t\t"+filename);
		System.out.println("line number:\t\t"+lineNum);
		System.out.println("----------------------------------\n");
		System.out.println("objs:" + objs);
		if (objs != null) {
			for (int i = 0; i < objs.length; i++) {
				Object object = objs[i];
				System.out.println(object);
			}
		}
		return "success";
	}
}

package com.jn.main;

import com.jn.bean.Student;

public class Main2 {
	public static void main(String[] args) {
		Student student=new Student();
		student.method2(1,null);
	}
}

 运行结果

 

项目结构如下:

 

总结

(1)在实例方法中获取类名

Class clazz = this.getClass();//因为是实例方法,所以可以用this

String className = clazz.getCanonicalName();/* com.jn.bean.Student */

String classSimpleName = clazz.getSimpleName();

 

(2)获取方法名

//当前的线程

Thread currentThread=Thread.currentThread();

StackTraceElement stackElement=currentThread.getStackTrace()[1];

//当前的方法名

String methodName=stackElement.getMethodName();

 

(3)获取当前行数

//当前的线程

Thread currentThread=Thread.currentThread();

StackTraceElement stackElement=currentThread.getStackTrace()[1];

int lineNum=stackElement.getLineNumber();

 

  • 大小: 15.2 KB
  • 大小: 12.7 KB
0
0
分享到:
评论

相关推荐

    java命名规范java的命名规范java的命名规范java的命名规范

    11. **获取属性的方法**:使用 `get` 加上属性名,如 `getX()`。 12. **设置属性的方法**:使用 `set` 加上属性名和值,如 `setX(X value)`。 13. **返回布尔值的方法**:对于布尔变量,可以使用 `is` 加形容词,`...

    利用Windows消息获取Memo的行和列

    当我们需要获取Memo控件中的特定信息,如行数和列数时,可以通过处理Windows消息来实现。 Windows消息是操作系统用来在窗口之间传递信息的一种机制。每个消息都由一个特定的消息标识符(例如WM_GETTEXT、WM_CHAR等...

    Java基础学习笔记

    - 如果方法具有返回值,则需要在方法体中使用return语句返回对应的值。返回值类型必须与方法声明的返回值类型兼容。 - 方法调用时,可以通过对象名.方法名()的形式来调用。如果方法不带参数,调用时可以省略括号。...

    C#程序设计复习题.doc

    8. 在派生类中重新定义基类方法时,应保持与基类完全相同的方法名、参数列表和返回类型,这是方法的重写(Override),否则就是定义新的方法。 9. C#中所有异常类的基类是`Exception`,主动引发异常的语句关键字是`...

    JAVA反射机制和JDBC和各种数据库的连接

    1. 获取Class对象:反射的起点是获取`Class`对象,可以通过`Class.forName()`方法,或者对象的`getClass()`方法,以及类名.class的方式获取。 2. 创建对象:`Class`对象的`newInstance()`方法用于创建指定类的新...

    JAVA开发统一规范

    - 整个应用系统使用自定义的异常类,该类包含了错误信息(message)和异常类型ID号(整型),在创建异常时自动获取类名、方法名、行号等信息。 - 在系统开发阶段以及上线后一段时间内,异常信息应该直接显示在浏览器页面...

    PHP面向对象技术(全面讲解)

    面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它强调将数据和操作数据的方法封装在独立的实体——类(Class)中。PHP支持面向对象编程,尽管它最初的设计并不是完全面向对象的,但在...

    测量程序设计两周课程设计

    在本课程设计中,我们将设计一个名为CMatrix的矩阵类,用于表示矩阵的基本操作和性质。 一、类名和私有成员变量 在CMatrix类中,我们定义了三个私有成员变量: * pElement(double*):矩阵元素存储地址 * nRow...

    C#面向对象考试题目

    10. 方法重写:在C#中,如果要重写父类的方法,父类的方法必须是虚方法(virtual),而子类的方法则需要使用override修饰符。因此,正确答案是d)以上所有。 11. 继承和方法重写:Base类有一个虚拟方法M(),Sub类...

    2021-2022计算机二级等级考试试题及答案No.14549.docx

    - **知识点**:构造方法的方法名必须和类名相同,方法名前面没有返回值类型的声明,在方法中不能使用 return 语句返回一个值。 - **解释**:构造方法是类的一个特殊成员,主要用于对象的初始化。它具有与类名相同的...

    java父子资料(答案)

    - **成员方法**: 定义类的行为。 **8. 主类的概念** - **知识点**: Java 程序中的主类是指包含 `main` 方法的类,这是程序的入口点。对于 Java Application 来说,`main` 方法是必需的;而对于 Java Applet,则...

    iOS开发技巧

    - `+`前缀的方法是类方法,可以直接通过类名调用。 3. 属性(Property): 使用`@property`关键字定义属性,可以控制成员变量的访问权限、访问方式(nonatomic或atomic)。例如: ```objc @property(nonatomic,...

    大连理工大学软件学院第一次java上机作业

    - **方法调用**: 可以通过类名或对象名调用方法。 - 示例:`swap(c1, c2);` - 这行代码调用了`swap`方法,并传入了两个`Card`类型的对象`c1`和`c2`作为参数。 ### 3. 参数传递 - **按值传递**: Java中所有参数都...

    Java面试题以及答案整理.pdf

    反射机制允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作,提供了对Java对象模型的动态访问能力。 这些只是Java面试中可能会遇到的一部分问题,涵盖范围广泛,从基础语法到高级特性,深入...

    2021-2022计算机二级等级考试试题及答案No.1767.docx

    构造方法与普通成员方法的区别 - **知识点**: 构造方法是类的一个特殊成员,在类实例化对象时被自动调用;而普通方法则需显式调用(正确)。 - **解释**: 构造方法主要用于初始化对象的状态,其名称必须与类名相同且...

    Java面试题大全--比较详细

    重写(Override)发生在子类中,当子类提供与父类完全相同的方法签名(包括返回类型和方法名)的方法时。 10. **Final类**:Final类不能被其他类继承,保证了类的封闭性。 11. **继承执行顺序**:在继承关系中,...

    2021-2022计算机二级等级考试试题及答案No.12333.docx

    - **文件属性查看**:在Windows操作系统中,右键点击文件图标选择“属性”时,并不能直接查看到文件的字数和行数信息。这些信息通常需要借助专门的文字处理软件或其他工具来获取。 ### 3. Java 日期操作类 - **...

    2021-2022计算机二级等级考试试题及答案No.15911.docx

    8. 在Windows中,右击文件图标无法直接查看文件的字数和行数,但可以通过打开文件并使用相关工具来获取这些信息。 9. 数据结构的逻辑结构与所使用的计算机无关,而物理结构和存储结构则与计算机硬件和操作系统有关...

    JNDI数据库访问

    - 在`DBConnection`构造方法中,建议使用更具体的异常类型,而不是泛化的`Exception`。 - 可以使用`SQLException`替代`Exception`,以更准确地处理数据库相关的错误。 2. **资源管理**: - 考虑使用`try-with-...

Global site tag (gtag.js) - Google Analytics