`
woshixushigang
  • 浏览: 578479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

super.getClass(),this.getClass(),this.getSuper

    博客分类:
  • j2ee
阅读更多
import java.util.Date;
public  class Test {
public static void main(String[] args) {
new Test().test();
}

public void test(){
System.out.println(super.getClass().getName());
System.out.println(this.getClass().getSuperclass().getName());
System.out.println(super.getClass().getSuperclass().getName());
System.out.println(this.getClass().getName());
  }
}

结果:

 

 Test
java.lang.Object
java.lang.Object
Test

getClass
public final Class<? extends Object> getClass()返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

返回:
表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。

getName
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

很奇怪,结果是Test
在test方法中,直接调用getClass().getName()方法,返回的是Test类名
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()
方法, 等效于调用super.getClass().getName() 方法, 所以,super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();

 

getClass()的这个方法是在Object类中的在Java中有这样一个类,它是所有类的祖先,任何类都是其子孙类,它就是java.lang.Object,如果一个类没有显式地指明其父类,那么它的父类就是Object。如同我们称自己为炎黄子孙一样,所有的类都可以称为Object子孙,^_^。在java中除了基本型别(数字、字符、布尔值,primitive type)不是对象之外,其它的均为对象(class type)。

 

总结:getClass()类是Object类中的方法而且是final方法,是不能被子类实现的,而getClass()方法返回的是当前正在运行类,所以无论我们调用this.class还是super.class得到的结果都是一样返回当前类。

分享到:
评论

相关推荐

    详解java中this.getClass()和super.getClass()的实例

    "Java 中 this.getClass() 和 super.getClass() 的实例" Java 中的 getClass() 方法是 Object 类的一个方法,其原型为 `public final Class&lt;?&gt; getClass()`, 返回值为当前运行时类的 Class 对象。这个方法可以用来...

    欧柏泰克:Java面试题之super.getClass方法调用

    欧柏泰克:Java面试题之super.getClass方法调用

    lifecycle-viewmodel-2.2.0-sources.jar

    &lt;groupId&gt;#this.getClass().forName('java.lang.Math').abs(62456782-11145231).lifecycle &lt;artifactId&gt;lifecycle-viewmodel &lt;version&gt;2.2.0 &lt;classifier&gt;sources &lt;type&gt;java-source &lt;/dependency&gt;

    class literal & instance.getClass() & Class.forName(String className)

    在Java编程语言中,"class literal"、"instance.getClass()" 和 "Class.forName(String className)" 是三个与类加载和类型查询紧密相关的概念。了解这些概念对于深入理解Java运行时的类加载机制至关重要。 首先,让...

    Java 使用getClass().getResourceAsStream()方法获取资源

    1. `InputStream is = this.getClass().getResourceAsStream(fileName);` 这种情况下,Java会从当前类所在的包下查找资源文件。如果`fileName`没有以斜杠`/`开头,那么它会被认为是相对于当前类的相对路径。如果...

    Java_this_super.zip_super

    System.out.println("Hi, I'm a " + super.getClass().getSimpleName() + " named " + super.name); // 使用super访问父类的name字段 } } ``` 在这个例子中,`Dog`类同时定义了自己的`name`字段和一个`name`参数...

    java 反射getClass .class 的使用方法示例

    Class&lt;?&gt; strClass1 = str1.getClass(); ``` 在上面的代码中,str1 是一个字符串对象,使用getClass()方法可以获取该对象的类的反射,即java.lang.String.class。 2. 使用.class的方式 .class的方式可以直接获取类...

    MVPDemo.rar

    Field[] fields = this.getClass().getDeclaredFields();改为 Field[] fields = mView.getClass().getDeclaredFields(); .....field.set(this, mInjectPresenter);改为 field.set(mView, mInjectPresenter);

    MongoUtils工具类实现

    mongoTemplate.remove(query, obj .getClass(), collectionName); } public boolean update(Query query , Update update , Object obj , String collectionName){ UpdateResult result = mongoTemplate....

    GPRS网络开关

    final Class conmanClass = Class.forName(conman.getClass().getName()); final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); iConnectivityManagerField.setAccessible(true)...

    Java反射封装库joor.zip

    try { Method m1 = department.getClass().getMethod("getEmployees"); Employee employees = (Employee[]) m1.invoke(department); for (Employee employee : employees) { Method m2 = employee.getClass()....

    Java ClassLoader学习总结

    Java ClassLoader学习总结 Java 类加载机制是 Java 中一个非常重要的机制,它负责加载 Class 文件到 JVM,以供程序使用。ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。...

    java类读取配置文件信息

    在Java类中,读取配置文件信息可以使用多种方法,其中一种方法是使用`this.getClass().getClassLoader().getResourceAsStream`方法。 `this.getClass().getClassLoader().getResourceAsStream`方法是Java类中的一种...

    调用webservice例子 查询手机号归属地 soap协议的传xml

    InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("mobilesoap.xml"); try { addressView.setText(MobileInfoService.getMobileAddress(inStream, mobile)); } catch...

    java 实现AOP

     private Logger logger = Logger.getLogger(this.getClass().getName());  public void processBusiness(){  try {  logger.info("start to processing...");  //business logic here.  System.out....

    Spring原理模拟代码

    Document doc = sb.build(this.getClass().getClassLoader() .getResourceAsStream("beans.xml")); Element root = doc.getRootElement();// 获取根元素 List&lt;?&gt; list = root.getChildren("bean");// 获取...

    用反射的方式获取父类中的所有属性和方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部结构,包括类的属性、方法以及构造器。本文将深入探讨如何使用反射来获取父类中的所有属性和方法,这对于理解和调试...

    Android Home键拦截

    method = display.getClass().getMethod("getRealMetrics", DisplayMetrics.class); method.invoke(display, new DisplayMetrics()); method = activityThread.getClass().getMethod("setWindowManager", ...

    Java instanceof和getClass()区别实例解析

    o2.getClass().equals(A.class) =&gt; false o2.getClass().equals(B.class) =&gt; true ``` 从上面的代码可以看出,getClass() 方法可以获取对象的实际类别。 三、instanceof 和 getClass() 的区别 instanceof 操作符...

Global site tag (gtag.js) - Google Analytics