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

简介: <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Helvetica,Tahoma,Arial,sans-serif; font-size:14px; line-height:21px"> 在实例方法中如何获取该方法所属的类名、方法名、行数呢?</p>

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

例子项目有两个类:

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();


相关文章
|
8月前
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
169 1
|
3月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
17 0
|
8月前
引用构造器练习
引用构造器练习
60 0
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
101 0
|
XML Java Maven
可以让反射获取到方法参数实际的变量名设置
可以让反射获取到方法参数实际的变量名设置
180 0
|
缓存 Dart 安全
Dart中的类——初始化列表、命名构造器、factory构造器、常量构造器、构造器私有化、get和set方法、枚举
Dart中的类——初始化列表、命名构造器、factory构造器、常量构造器、构造器私有化、get和set方法、枚举
|
Java C++
Java方法03——构造方法与可变参数
Java方法03——构造方法与可变参数
612 0
Java方法03——构造方法与可变参数
self,和类实例化加不加括号的理解
# class Dog(object): # def talk(self): # print('汪汪~~~') # print(self) # self就是对象,默认将对象传递到类方法,self不需要程序手动传递 # # erha = Dog() # talk是一个函数,是类里面的函数,只有对象能使用:对象名.
1156 0
|
移动开发
【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号
今天在处理异常日志保存过程中,想要获取到异常抛出在具体在那个文件,哪个类下的哪个方法中的具体第几行,所以具体实现如下 try{ Integer adminID = Integer.
1351 0

热门文章

最新文章