首页 > 其他分享 >创建的对象与class 对象的区别,两者之间的关系

创建的对象与class 对象的区别,两者之间的关系

时间:2024-10-12 15:44:11浏览次数:9  
标签:两者之间 返回 false 对象 Class 方法 class

什么是class 对象

Class对象保存每个类型运行时的类型信息,如类名、属性、方法、父类信息等等。在JVM中,一个类只对应一个Class对象
可以将java 中的class 对象看成一个模具,我们new 出来的对象,则是通过模具按压出来的具体模型,模型里面的各种颜色各不相同(对象内的成员)

class 对象的特点:

运行时,class 对象是唯一的,每当JVM加载一个类就产生对应的Class对象,保存在堆区,类型和它的Class对象时一一对应的关系。
一旦类被加载了到了内存中,那么不论通过哪种方式获得该类的Class对象,它们返回的都是指向同一个java堆地址上的Class对象引用。JVM不会创建两个相同类型的Class对象。
class 对象,是class 类的实例,与我们new 出来的对象是一样的(普适性)

获取class 对象的方法

//1. getClass 方法
DataInfo dataInfo = new DataInfo();
Class<? extends DataInfo > aClass = dataInfo.getClass();
// 2. 使用classloader获取
ClassLoader classLoader = Class.forName("com.test.it.test1.api.entity.form.DataInfo");
Class<? extends ClassLoader> aClass1 = classLoader.getClass();
// 3. .class 获取
Class<DataInfo> aClass2 = DataInfo.class;

Q1 如何对比两个类的 class 对象是否相同?

直接用 == 或者 equals 即可,对比引用对象的地址是否相同

boolean equals1 = aClass.equals(aClass2);
boolean equals2 = aClass == aClass2;

Q2 手动创建的普通类和对象以及Class 对象的关系

普通类,通过classloader 类加载器,创建时读取字节码文件创建,并且会同时创建一个class 对象,这个class 对象存储的是类的相关信息,如成员数量,父类信息,这个class 对象是 class 类的实例;在可以通过Class 类提供的forName方法 获取对应的Class 对象的引用,普通类创建的则为实例对象,普通类通过 .class 获取Class引用。

对象与类之间,只能检查 指定对象是否是某个类的实例,具体可以用 intanceof 判断,或者 isInstance() 方法:

isInstance 方法注释:
确定指定的对象是否与此类表示的对象的赋值兼容。此方法是Java语言instanceof运算符的动态等效方法。如果指定的对象参数为非空,并且可以在不引发ClassCastException的情况下转换为此类对象表示的引用类型,则该方法返回true。否则返回false。

具体来说,如果这个类对象表示一个声明的类,如果指定的对象参数是所表示的类(或其任何子类)的实例,则该方法返回true否则返回false。如果此类对象表示数组类,并且指定的对象参数可以通过标识转换或扩大引用转换转换为数组类的对象,则此方法返回true。否则返回false。如果这个类对象表示一个接口,如果指定对象参数的类或任何超类实现了这个接口,这个方法返回true否则返回false。如果这个类对象表示一个基本类型,这个方法返回false。

// 判断 source 对象是否是 IOException 的实例
Throwable source = new RuntimeException();
boolean check = source instanceof IOException;

示例图,图源参考地址

refer:
https://blog.csdn.net/sinat_29846389/article/details/122513297

标签:两者之间,返回,false,对象,Class,方法,class
From: https://www.cnblogs.com/charler/p/18460681

相关文章

  • 行人重识别——基于文本描述的行人检索与查找查询对象
    介绍人的重新识别,即搜索人的图像,在许多方面都有需求,如从安全摄像机中寻找嫌疑人或丢失的儿童。其中,基于文本的人的重新识别,即不搜索显示与输入图像相同的人的图像,而是从文本中搜索显示与之匹配的人的图像,已经引起了很多人的注意。在基于文本的人的再识别任务中,主要的方法......
  • C# 后端回传的Json数据转换为实体对象转换器JsonConverter的使用
    publicclassJsonDateTimeConverter:JsonConverter<DateTime?>{privatereadonlystring_dateTimeFormat;publicJsonDateTimeConverter(stringdateTimeFormat){_dateTimeFormat=dateTimeFormat;}publicoverridevoidWri......
  • PTA 作业六 JAVA 面向对象程序设计6-2 sdut-oop-list-1 学生集合(类、集合)作者 周雪芹
    6-2sdut-oop-list-1学生集合(类、集合)分数15作者 周雪芹单位 山东理工大学以下程序不完整,请你根据已经给出的程序代码中表达的题意,以及程序的输入、输出信息,完成Student类的设计,补全代码。函数接口定义:classStudent{}裁判测试程序样例:importjava.util.ArrayLi......
  • 对象赋值给变量
    问题:变量a和对象b。直接使变量a=b,改变a的值会使对象b本身跟着改变。原因:变量a得到的是对象b的地址,a和b指向内存堆中同一个对象。解决:        ①:解构对象b再赋值给变量a                 a={...b}        ②:JSON序列化     ......
  • 神经网络之卷积篇:详解经典网络(Classic networks)
    详解经典网络首先看看LeNet-5的网络结构,假设有一张32×32×1的图片,LeNet-5可以识别图中的手写数字,比如像这样手写数字7。LeNet-5是针对灰度图片训练的,所以图片的大小只有32×32×1。实际上LeNet-5的结构和上篇博客的最后一个范例非常相似,使用6个5×5的过滤器,步幅为1。由于使用了6......
  • 【Java】创建对象的几种方式
    【Java】创建对象的几种方式合集-Java基础(11)1.【Java】Integer包装类缓存(cache)05-092.【java】Java之关于基本数据类型和引用数据类型的存放位置05-093.【java】ArrayList和LinkedList的区别05-104.【java】【集合类】HashMap与HashTable的区别05-105.【Java】的四种引用......
  • Java中class对象的学习
    Class对象目录Class对象获取class对象的三种方法获取类的各种信息获取类名获取类修饰符获取包的信息获取父类的class对象获取接口信息构造函数Constructor两种创建对象的方式使用Class.forName()加载类并创建对象使用Class.forName()加载类,并调用特定的构造器获取class对象的三......
  • 理解Java中的面向对象
    文章目录前言1封装性1.1C语言中的封装1.2Java中的封装1.2.1基本概念1.2.2类的使用方法1.2.2.1构造方法1.2.2.2对象的创建与使用1.2.3访问权限2继承性3多态性3.1方法重写3.2方法重载总结前言面向对象与面向过程是当今编程世界的两种编程思想,面向过程......
  • 【图像识别】用于对象识别的良好彩色图像描述符/功能(Matlab实现)
    ......
  • JavaScript的内置对象有哪些?
    一、内置对象1、概念​JavaScript中的对象共分为3种:自定义对象、浏览器对象和内置对象。之前我们自己创建的对象都属于自定义对象,而内置对象又称为API,是指JavaScript语言自己封装的一些对象,用来提供一些常用的基本功能,来帮助我们提高开发速度,例如:数学-Math、日期-Date......