java获取类名的方法详解

如果我们要获取当前运行的类名,怎么来获取?

在Class类中,有如下一个方法:

比如现在有一个类Demo7.java

package pxx.test1;

public class Demo7 {
    public static void main(String[] args) {
        Demo7 demo7 = new Demo7();
        System.out.println(demo7.getClass().getName());
    }
}

运行结果:

上面就是直接这个对象调用了getClass()得到了Class对象,然后调用getName()得到运行类名。

那么假如一个类继承了一个类,又怎么获取当前类名还有父类名呢

Demo8.java

package pxx.test1;

public class Demo8 {
    int num;
    String name;
    public Demo8(){};
}

Demo9.java

package pxx.test1;

public class Demo9 extends Demo8 {
    public void test() {
        System.out.println(super.getClass().getName());
    }
    public static void main(String[] args) {
        new Demo9().test();
    }
}

上面我们就用super调用了一个getClass()方法,然后又来获取类名,这里需要注意的是super只能调用父类的非静态方法,并且不能在static方法中调用,因为super与this一样,是基于对象操作的。说回来,这里调用父类的getClass(),因此想来得到父类的类名,好了,运行一下

还是拿不到父类的类名 ,那我们去看一下这个geClass()方法,这个方法在Object对象里面

原来这个方法是一个final,也就是说,这个方法被其他类继承可以,但是不能被重写,因此,this.getClass与super.getClass最终调用的都是Object类中的getClass方法,而这个方法的定义是返回Object的运行时类,所以,上面会返回自己的类名而不是父类名。

那么怎么获取父类的名字呢?

我们去到Class类里面去看一下,发现有下面这个方法:

上面这个意思也就是说,会返回这个当前调用类的父类,拿到父类之后我们依然可以用getName()来获取名字,上代码

package pxx.test1;
public class Demo9 extends Demo8 {
    public void test() {
        System.out.println(super.getClass().getSuperclass().getName());
    }
    public static void main(String[] args) {
        new Demo9().test();

    }
}

 运行结果:

这样就拿到了父类的类名

到此这篇关于java获取类名的问题详解的文章就介绍到这了,更多相关java获取类名内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 获取当前类名和方法名的实现方法

     Java 获取当前类名和方法名的实现方法 这里提供了四种方法并比较,大家需要的可以参考下,          为了测试各个函数,如果手动打印每个类名.函数名,那么多函数的话能把人累死,Java早已准备好了一堆记录自身的函数. 获取类名: public static void testGetClassName() { // 方法1:通过SecurityManager的保护方法getClassContext() String clazzName = new SecurityManager() {

  • 利用Java获取文件名、类名、方法名和行号的方法小结

    大家都知道,在C语言中,我们可以通过宏FILE. __LINE__来获取文件名和行号,而在Java语言中,则可以通过StackTraceElement类来获取文件名.类名.方法名.行号,具体代码如下: public static int getLineNumber( ){ StackTraceElement[] stackTrace = new Throwable().getStackTrace(); return stackTrace[1].getLineNumber( ); } public

  • java获取类名的方法详解

    如果我们要获取当前运行的类名,怎么来获取? 在Class类中,有如下一个方法: 比如现在有一个类Demo7.java package pxx.test1; public class Demo7 { public static void main(String[] args) { Demo7 demo7 = new Demo7(); System.out.println(demo7.getClass().getName()); } } 运行结果: 上面就是直接这个对象调用了getClass()得到

  • Java获取工程路径方法详解

    第一种: File f = new File(this.getClass().getResource("/").getPath());  System.out.println(f); 结果: C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin 获取当前类的所在工程路径: 如果不加"/": File f = new File(this.getClass().getResource(

  • SpringBoot中获取profile的方法详解

    目录 spring boot与profile 静态获取方式 autowire ProfileConfig spring boot与profile spring boot 的项目中不再使用xml的方式进行配置,并且,它还遵循着约定大于配置. 静态获取方式 静态工具类获取当前项目的profile环境. import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte

  • Java获取当前时间戳案例详解

    获取当前时间戳 //方法 一 System.currentTimeMillis(); //方法 二 Calendar.getInstance().getTimeInMillis(); //方法 三 new Date().getTime(); 获取时间戳三种方法执行效率比较: import java.util.Calendar; import java.util.Date; public class TimeTest { private static long _TEN_THOUSAND=1000

  • Java实现定时任务的方法详解

    目录 前言 定时任务是什么 定时任务的有哪些是实现方式 纯手写单线程循环 Timer 和它的小伙伴 ScheduledExecutorService Spring 提供的定时任务 总结 前言 学过定时任务,但是我忘了,忘得一干二净,害怕,一直听别人说: 你写一个定时任务就好了. 写个定时任务让他去爬取就行了. 我不会,所以现在得补回来了,欠下的终究要还的,/(ㄒoㄒ)/~~ 定时任务是什么 大家都用过闹钟,闹钟可以说是一种定时任务. 比如我们设定了周一到周五早上7点半的时间响铃,那么闹钟就会在周

  • Java枚举的使用方法详解

     Java枚举的使用方法详解 前言  你代码中的flag和status,都应该用枚举来替代 很多人都说,枚举在实际开发中很少用到,甚至就没用到.因为,他们的代码往往是这样子的: public class Constant { /* * 以下几个变量表示英雄的状态 */ public final static int STATUS_WALKING = 0;//走 public final static int STATUS_RUNNINGING = 1;//跑 public final stati

  • java Future 接口使用方法详解

    java Future 接口使用方法详解 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算. Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务.期间我自己可以去做任何想做的事情.一段时间之后,我就便

  • Java String对象使用方法详解

    Java String对象使用方法详解 先来看一个例子,代码如下: public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str == str1); System.out.println(str1

  • Java螺旋矩阵处理方法详解

    题目描述: 给定一 m*n 的矩阵,请按照逆时针螺旋顺序,返回矩阵中所有元素. 示例: 思路: 这是一道典型的模拟问题: 我们可以分析一下,遍历前进轨迹: 向右 - > 向下 -> 向左 -> 向上 -> 向右 … 于是,我们可以在循环中模拟这样的前进轨迹,记录 右,下,上左,四个边界,每次拐弯时更新边界值,再进行下一次拐弯,循环往复,直至结束.结束条件为 左边界加一大于右边界,或者上边界加一大于下边界. 图解: 代码: class Solution { public List&l

  • SpringMVC实现获取请求参数方法详解

    目录 1.通过ServletAPI获取 2.通过控制器方法的形参获取请求参数 3.@RequestParam 4.@RequestHeader 5.@CookieValue 6.通过POJO获取请求参数 7.解决获取请求参数的乱码问题 1.通过ServletAPI获取 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 <a th:href="@{/testServletAPI(username=

随机推荐