通过观看视频讲解,我得知,Class 老师讲解的是 这个是类的类,即是管理类的类.当时不是很理解,随后查询了相关资料后,以及真切的运行了几行代码后,才有一些深层次的体会, 在这里想要跟大家分享一下.如果有说的不对的地方,还欢迎老师和同学进行纠错指正.

首先,我做的就是查看源码,也就是getClass(); 的源码,下面的截图就是我查询到的源码.

Class Object 类的介绍:

接着 点击其方法,找到个体Class() ,点击进去查找源码.

通过查询源码,我得知的是 getClass();运行的结果返回的是是正在运行的实例化对象的Class.也就是说返回的是一个类,而不是一个对象,

接着,我根据我查看源码得到的结论,在代码实例中进行验证,请看下面的代码:

 package concreteHandler;

 import java.util.GregorianCalendar;

 public class ObjectDemo {
public static void main(String[] args) { // create a new ObjectDemo object
GregorianCalendar cal = new GregorianCalendar(); // print the class of cal
System.out.println("" + cal.getClass()); // create a new Integer
Integer i = new Integer(5); // print the class of i
System.out.println("" + i.getClass());
}
}

代码输出的结果跟我预想的结果是一致的:

 class java.util.GregorianCalendar
class java.lang.Integer

确实是返回运行实例的Class,但是我有一个新的想法,如果这个类和另一个类有着继承的关系的话,那么在运行getClass(); 后,会输出什么样的值,在我没有尝试之前,我个人猜测是会返回其父类的运行实例.于是我开始尝试代码运行,运行代码如下:

 package concreteHandler;

 import java.util.Date;

 public class Test extends Date {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
Test myTest=new Test();
myTest.test();
}
public void test(){
System.out.println(super.getClass().getName());//concreteHandler.Test
System.out.println(this.getClass().getName());//concreteHandler.Test System.out.println(Test.class.getName());//concreteHandler.Test
System.out.println(Date.class.getName());//java.util.Date System.out.println(Test.class.getClass().getName());
//java.lang.Class
//因为类.class就可以获得class了,再一个getClass()就直接到java.lang.Class
System.out.println(Date.class.getClass().getName());//java.lang.Class
System.out.println(Test.class.getClass());//class java.lang.Class
System.out.println(Date.class.getClass());//class java.lang.Class System.out.println(Test.class);//class concreteHandler.Test
System.out.println(Date.class);//class java.util.Date System.out.println(Test.class.getSuperclass()); //class java.util.Date }
}

其返回值显而易见,关于super.getClass().getName()的返回值,我猜测错误,于是我又查阅了相关的博文和资料,看到有相关总结为以下三个原因,:

第一点:Test还是Dtae的getClass()都是从Object继承来的

第二点:返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

第三点:想要获得运行实例对象的父类,使用Test.class.getSuperclass()。而不能用 Test.getClass().getSuperclass().

注:Java的每个类都带有一个运行时类对象,该Class对象中保存了创建对象所需的所有信息。
可以用.class返回此 Object 的运行时类Class对象,也可以用getClass()获得。

获取Class的三种方法:

实例化对象.getClass()、类.class、Class类的静态方法 Class.forName("包名.类路径")

关于getClass()的一些自己的见解的更多相关文章

  1. 关getClass().getClassLoader()

    InputStream   is   =   getClass().getClassLoader().getResourceAsStream("helloworld.properties&q ...

  2. super.getClass()方法调用

    下面程序的输出结果是多少?import java.util.Date;public class Test extends Date{public static void main(String[] a ...

  3. java中Class对象详解和类名.class, class.forName(), getClass()区别

    一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到Java的反射----- Java反射学习 所谓反射,可以 ...

  4. Java类名.class和getClass()区别

    区别 类名.class叫做“类字面量”,因class是关键字, 所以类名.class编译时确定. getclass()运行时根据实际实例确定,getClass()是动态而且是final的. Strin ...

  5. super getClass()

    首先看一段代码: import java.util.Date;public class Test extends Date{ public static void main(String[] args ...

  6. [OC笔记] Category分类之见解

    用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...

  7. Java枚举类型getClass和getDeclaringClass区别(未完待续)

    Java中的枚举类型有getClass()和getDeclaringClass()两个方法,在通常情况下这两个方法返回的类型一样,在某些场景下会有不同的表现 参照 http://stackoverfl ...

  8. Java的super调用案例: super.getClass()返回的是子类自己

    If you override a method from your superclass (or your superclass's superclass etc.), super.theMetho ...

  9. Java 基础【08】.class getClass () forName() 详解

    类名.class是Class对象的句柄,每个被加载的类,在jvm中都会有一个Class对象与之相对应. 如果要创建新的对象,直接使用Class对象的局部class.forName就可以了,不需要用ne ...

随机推荐

  1. docker中的oracle-11g-安装配置

    docker镜像:wnameless/oracle-xe-11g 启动镜像的命令: docker run -d -v /data/oracle_data:/data/oracle_data -p 11 ...

  2. ZIP、tar.gz压缩时排除指定目录

    1.ZIP 压缩时排除一个文件夹下所有内容zip -r sss.zip sss/ -x "sss/222/*" 压缩时排除指定多个文件夹下所有内容zip -r sss.zip ss ...

  3. int与integer的区别

    int 是基本类型,直接存数值 integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者>>integer 是后者(也就是一个 ...

  4. Qt学习资料

    网址:http://www.qter.org/portal.php?mod=list&catid=18 qt开源社区 (门户)里面有在线学习资料(讲的比较粗略 但是进程比较快 适用于快速学习) ...

  5. Maven配置pom.xml,正在下载时网络不佳下载失败的解决方案

    环境:jdk1.7.0_17,Myeclipse 10,apache-maven-3.2.5 配置项目中pom.xml的dependencies时 ,如果本地仓库没有的话,就会自动下载.找不到仓库位置 ...

  6. linux systemd详解

    CentOS 7 使用systemd替换了SysV.Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务. s ...

  7. less的安装和使用

    资料: https://www.cnblogs.com/starof/p/5226739.html 

  8. python smtp邮件

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  9. Java基础语法入门

    一.Java运行原理 写好java代码,执行javac命令,通过jvm把.java源文件编译成.class文件,执行java命令把字节码文件编译成特定平台能识别的机器码 二.标识符 1.标识符是用于数 ...

  10. [IOS][已越狱]配合网易云音乐,使用Bridge快速免iTunes导入音乐到“音乐”

    前置:已越狱IOS设备   工具表: Bridge{bigboss源,可以使用cydown以非官方服务器下载安装} 网易云音乐{Appstore} Filza{很多源都有}     网易云试听缓存路径 ...