码迷,mamicode.com
首页 > 其他好文 > 详细

获取Class对象

时间:2021-03-04 13:10:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:静态变量   java虚拟机   类加载器   多少   是什么   src   技术   引用   产生   

“java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。每一个类都有一个Class对象,每当编译一个新类就产生一个Class对象。”(以上是在网上找的资料)

下面来看一段代码:

 1 package com.hw.Class0228;
 2 
 3 public class Demo01_GetClass {
 4     public static void main(String[] args) {
 5         User user1 = new User(18,"小明",98);  //这里先创建两个对象
 6         User user2 = new User(20,"小红",100);
 7         
 8         Class c1 = user1.getClass(); //调用getClass()方法获取一个Class对象
 9         Class c2 = user2.getClass();
10         
11         System.out.println(c1==c2); 
12     }
13 }

技术图片

 

 为啥输出true呢?这是因为,c1和c2都是Class对象,Class对象是什么时候创建的呢?当类被加载的时候创建的。所以当user类被加载的时候,会创建一个跟user类对应的对象。而类只会被加载一次,所以Class对象也只会被创建一次。一个类只有一个对应的Class对象。因此通过user的对象获取的时候,获取到的就是同一个对象。换句话说,不管有多少个对象,只要是user的对象,那么获取到的都是同一个对象。

 

我这么来一下就不是同一个对象了:

 1 package com.hw.Class0228;
 2 
 3 public class Demo01_GetClass {
 4     public static void main(String[] args) {
 5         User user1 = new User(18,"小明",98);  //这里先创建两个对象
 6         User user2 = new User(20,"小红",100);
 7         
 8         Class c1 = user1.getClass(); //调用getClass()方法获取一个Class对象
 9         Class c2 = user2.getClass();
10         
11         
12         Demo01_GetClass dg = new Demo01_GetClass();
13         Class c3 = dg.getClass();
14         
15         System.out.println(c1==c2); 
16         System.out.println(c3==c2);
17     }
18 }

技术图片

 

 为啥不一样呢?因为c2是user的对象,而c3是Demo01_GetClass的对象。所以,每一个类,都会创建一个与其对应的class对象,有且只有一个。

 

总结

再来看看大佬怎么说:

Class类被创建后的对象就是Class对象,Class对象表示的是自己手动编写类的类型信息,比如创建一个Shapes类,那么,JVM就会创建一个Shapes对应Class类的Class对象,该Class对象保存了Shapes类相关的类型信息。

实际上在Java中每个类都有一个Class对象,每当我们编写并且编译一个新创建的类就会产生一个对应Class对象并且这个Class对象会被保存在同名.class文件里(编译后的字节码文件保存的就是Class对象),那为什么需要这样一个Class对象呢?是这样的,当我们new一个新对象或者引用静态成员变量时,Java虚拟机(JVM)中的类加载器子系统会将对应Class对象加载到JVM中,然后JVM再根据这个类型信息相关的Class对象创建我们需要实例对象或者提供静态变量的引用值。注意,我们定义的一个类,无论创建多少个实例对象,在JVM中都只有一个Class对象与其对应,即:在内存中每个类有且只有一个相对应的Class对象。

 。

 

获取Class对象

标签:静态变量   java虚拟机   类加载器   多少   是什么   src   技术   引用   产生   

原文地址:https://www.cnblogs.com/EvanTheGreat/p/14476051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!