关于getClass()的一些自己的见解

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

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

Class Object 类的介绍:

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

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

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

 1 package concreteHandler;
 2
 3 import java.util.GregorianCalendar;
 4
 5 public class ObjectDemo {
 6     public static void main(String[] args) {
 7
 8         // create a new ObjectDemo object
 9         GregorianCalendar cal = new GregorianCalendar();
10
11         // print the class of cal
12         System.out.println("" + cal.getClass());
13
14         // create a new Integer
15         Integer i = new Integer(5);
16
17         // print the class of i
18         System.out.println("" + i.getClass());
19     }
20 }

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

1 class java.util.GregorianCalendar
2 class java.lang.Integer

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

 1 package concreteHandler;
 2
 3 import java.util.Date;
 4
 5 public class Test extends Date {
 6     private static final long serialVersionUID = 1L;
 7     public static void main(String[] args) {
 8         Test myTest=new Test();
 9         myTest.test();
10     }
11     public void test(){
12         System.out.println(super.getClass().getName());//concreteHandler.Test
13         System.out.println(this.getClass().getName());//concreteHandler.Test
14
15         System.out.println(Test.class.getName());//concreteHandler.Test
16         System.out.println(Date.class.getName());//java.util.Date
17
18         System.out.println(Test.class.getClass().getName());
19         //java.lang.Class
20         //因为类.class就可以获得class了,再一个getClass()就直接到java.lang.Class
21         System.out.println(Date.class.getClass().getName());//java.lang.Class
22         System.out.println(Test.class.getClass());//class java.lang.Class
23         System.out.println(Date.class.getClass());//class java.lang.Class
24
25         System.out.println(Test.class);//class concreteHandler.Test
26         System.out.println(Date.class);//class java.util.Date
27
28         System.out.println(Test.class.getSuperclass()); //class java.util.Date
29
30
31     }
32 }

其返回值显而易见,关于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("包名.类路径")

原文地址:https://www.cnblogs.com/Hveritas/p/9351238.html

时间: 2024-11-15 00:43:53

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

《数据结构编程实验》 2.4.4Calendar个人见解,求指导

题目大意: 制作一个日历系统,输入年份,一些周年纪念日,及服务要求日期,根据要求日期输出,输出重要程度小于发生日期的周年纪念日. 题目地址: UVA  145 个人见解: 纯模拟,在闰年,输出顺序及输出范围可能跨年上有坑.解决了这些后,依旧困了我十多天,一直没过,求指导. 我的程序里先读入周年纪念日,l代表周年纪念日的数量,每读入一个服务日期,调用f()函数,f()函数里先计算每日期相对于当年月号的日期,然后Is()函数判断是否要输出并将要输出移至数组前方,k代表要输出的周年纪念日的数量,最后按

GetClass与RegisterClass的应用一例

这是转来的一篇文章,我自己在项目中也使用到了类似于根据类名创建类实例并调用相应函数的功能.具体代码我会在今后发布出来. 利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的.其他的应用如子窗体切换,算法替换等都能得到应用. unit Example1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For

小小见解之python循环依赖

a.py from b import b print '---------this is module a.py----------' def a(): print "hello, a" b() a() b.py print '----------this is module b.py----------' def b(): print "hello, b" def c(): print "hello, c" c() from a import

JavaScript getClass() 函数

定义和用法 getClass() 函数可返回一个 JavaObject 的 JavaClass. 语法 getClass(javaobj) 参数 描述 javaobj 一个 JavaObject 对象. 返回值 javaobj 的 JavaClass 对象. 说明 该函数可接受一个 JavaObject 对象作为其参数,并返回该对象的 JavaClass,即返回 JavaClass 对象.该 JavaClass 对象表示 Java 对象的 Java 类,而这个 Java 对象所表示的 Java

Qt见解:Post 与 Get 的区别(Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分)

第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝试了.原先以为Post专门用于向服务器发送请求,然后接收服务器应答的: 而Get只是单纯从服务器获取资源,比如下载这个网页,获得网页上存储的资源等.但是做项目的时候,测试的结果彻底地证明了我的天真和误解. 事实上,Post和Get都是用于向服务器发送请求的,两者都可以带参数,只不过方式略有不同而已.不同之处就在于,Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分,一部分是网址,另一个部分才是参数,

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.

各种封装——封装getClass

因为用Class获取元素时,有兼容性问题,需要分情况获取 显示判断是否可以用getElementsByClassName,若是不介意用就要先获取全部的元素,在用正则判断 function getClass(oParent,sClass){    if(oParent.getElementsByClassName)    {        return oParent.getElementsByClassName(sClass);    }    else    {        var arr=

java中instanceof和getClass()的作用

初学者难免有点混淆java中instanceof和getClass()的作用,  下面就来一一讲解.    父类A: class A { }     子类B: class B extends A { }      构造对象 Object o1 = new A(); Object o2 = new B(); 一.instanceof     演示一: 1.o1 instanceof A => true  2.o1 instanceof B => false  3.o2 instanceof A

程序的模块化的一些见解6-读牛人代码之感

今天看来一位牛人的程序,说是牛人,一点不夸张,在行业做了10年多,平时做的 项目快问题少,因为他有自己的成熟模块,自己也很熟悉,而且还是用汇编写的程 序,在控制方面很多客户见了之后,经常毫不犹豫选择他的程序控制.虽然我入行 也有3.4年,但就是很难看懂他的程序,个人觉得原因:1:没有注释2:缺少沟通 3:自己理解能力有限4:分格不一样. 因此,我觉得,为让自己可以被别人当为真正的牛人,写出来的代码可以让别 人看懂是一个必要的前提,当然,我也做得不好,我也一直向这方面靠近. 程序的模块化的一些见解