通过观看视频讲解,我得知,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. CCF-Crontab-201712-3

    大概是CCf第三题中最麻烦的一个吧 我的思路其实我觉得还可以,模拟...可是超时了233 只有90分 [ 可是我看网上其他人也是模拟算法啊, 速度还是太慢了 120行, 1个半小时  大部分花在了de ...

  2. SQLI DUMB SERIES-18

    (1)对username和password无论怎么输入,都没有回显,再看题目,POST - Header Injection - Uagent field - Error based (基于错误的用户 ...

  3. Ubuntu使用总结二

    Ubuntu使用 - 1.ubuntu怎么切换到root用户,切换到root账号方法 ubuntu怎么切换到root用户,我们都知道使用su root命令,去切换到root权限,此时会提示输入密码, ...

  4. 【学习】C++多态机制

    多态:静态(早绑定) 在编译阶段和链接就能确定功能调用的函数.     动态(晚绑定) 在程序运行时根据需要的功能确定调用的函数. 实现晚绑定就要定义虚函数,使用虚函数则会用到基类指针. 继承基类虚成 ...

  5. java 线程理解

    import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util. ...

  6. C++ Object实体类

    *暂未完成,因为无尽BUG滚滚来. 好长时间没写完,一是能力不够,二是我还得给老板写WEB的代码.可是我不会WEB!js和PHP简直就是世界上最好的语言,因为它们能够让人更快地进入极乐世界. 让我写一 ...

  7. [随笔][Java][something]

    import 只能导入包中的类,不能导入某个包.为了方便,一般不导入单独的类,而是导入包下的所有类.import java.util.*; 包java.lang中的所有类默认由编译器全部导入了,不必手 ...

  8. python 基础之自动类型转换和强制类型转换

    一:自动类型转换 自动类型转换注意针对Number数据类型来说的 当2个不同类型的数据进行运算的时候,默认向更高精度转换 数据类型精度从低到高:bool int float complex #关于bo ...

  9. rust visual studio editoe & debugger

    step Visual studio Try VisualRust-0.1.2 (1).msi, error. find no vs2017 extension. try RustLanguageEx ...

  10. MPU9250九轴陀螺仪--连接MPU9250

    树莓派连接MPU9250九轴加速度传感器1,配线方法 树莓派侧 MPU9250侧 3.3V VCC (SDA)GPIO2 SDA (SCL)GPIO3 SCL GND GND 2,I2C有效在树莓派里 ...