首页 > 其他分享 > Class.forName()、Class.class、getClass() 三者区别以及instanceof与强制类型转换

Class.forName()、Class.class、getClass() 三者区别以及instanceof与强制类型转换

时间:2022-10-07 10:12:11浏览次数:59  
标签:instanceof 类型转换 初始化 对象 实例 反射 Class

Java反射
反射为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说,反射并非编程语言的特性,因为在任何一种语言都可以实现反射机制,但是如果编程语言本身支持反射,那么反射的实现就会方便很多.
Class.class 的形式会使 JVM 将使用类装载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回 Class 对象
只有类能直接调用,对象不能
Class.forName() 的形式会装入类并做类的静态初始化,返回 Class 对象。
返回一个给定类或者接口的一个 Class 对象,如果没有给定 classloader, 那么会使用根类加载器。如果 initalize 这个参数传了 true,那么给定的类如果之前没有被初始化过,那么会被初始化。而我们给定的 MySQL 的 Driver 类中,它在静态代码块中通过 JDBC 的 DriverManager 注册了一下驱动。我们也可以直接使用 JDBC 的驱动管理器注册 mysql 驱动,从而代替使用 Class.forName。
getClass() 的形式会对类进行静态初始化、非静态初始化,返回引用运行时真正所指的对象(因为子对象的引用可能会赋给父对象的引用变量中)所属的类的 Class 对象。
是一种类的实例方法。在获得类型类之后,你就可以调用其中的一些方法获得类型的信息了
静态属性初始化是在加载类的时候初始化,而非静态属性初始化是 new 类实例对象的时候初始化。它们三种情况在生成 Class 对象的时候都会先判断内存中是否已经加载此类。

instanceof
instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。类的实例包含本身的实例,以及所有直接或间接子类的实例。instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树(同级之间是无法比较的),否则会编译错误。左边的对象实例不能是基础数据类型
强制类型转换:
由于父类没有某个属性所以需要转为子类
不满足继承关系的类型间无法强转,所以参考强制类型转换的要求提供了instanceof关键字来判断两种类型是否在同一科继承树上,并返回布尔类型值。
(Object基类中的equals(Object obj)方法无法根据实例的某些属性,比如姓名,ID等主键元素判断对象是否相同,只能判断两个实例的堆区地址是否相同)
注意子类转换为父类,可能丢失自己的本来的一些方法!

标签:instanceof,类型转换,初始化,对象,实例,反射,Class
From: https://www.cnblogs.com/skyles/p/16759143.html

相关文章

  • java类加载器 defineClass和loadClass的区别
    在阅读《自己动手写java虚拟机》时,通过观察P133~P135的代码classLoader会将加载过的class保存起来(包括defineclass的类),而只有在要加载一个类时 没有从已加载的类找到......
  • conflicts with existing, non-compatible bean definition of same name and class
    事情是这样的我生成了一个crud文件然后就  报错是这样的我以为是小问题重名了嘛    然后我就找  这不是对的嘛   我深呼吸一口气去mavencle......
  • javascript类型转换
    转换为数字(调用Number(),parseInt(),parseFloat()方法)转换为字符串(调用.toString()或String()方法)转换为布尔值(调用Boolean()方法)需要注意的是:null、undefined没......
  • 动态class的几种方式
    1、第一种方式最基础的class实现代码如下:<p:class="{'active':isActive,'current':isCurrent}">我是第一种方式最基础的class{{isActive}}</p>2、第二种方式的class......
  • C++ 关键字四种cast类型转换
    1.23四种cast类型转换​作用:克服c中强制类型转化带来的风险,C++引入四种更加安全的强制类型转换运算符(明确转换的目的,偏于程序的维护和分析)const_cast://1.去除const属......
  • python中的decimal类型转换实例详解
    1.Decimal类型的优点Decimal类型是在浮点类型的基础上设计的,但是它在几个地方上要优于floatingpoint:1)Decimal类型可以非常精确地在计算机中存储,而学过c++的都知道,浮点......
  • 错误: 操作符不存在: integer = character varying 建议:没有匹配指定名称和参数类型
    postgresql对变量类型比较敏感,对相应的变量进行类型转换之后就可以了修改前:<iftest="lx!=nullandlx.size>0">ANDt.lxin<foreachcollect......
  • 【CS224n】(lecture2~3)Word Vectors, Word Senses, and Neural Classifiers
    学习总结(1)word2vec主要是利用文本中词与词在局部上下文中的共现信息作为自监督学习信号;(2)还有一种稍微古老的估计词向量方法——基于矩阵分解,如在LSH潜在语义分析,手下对预料......
  • 数据类型转换
    publicclassDemo1{publicstaticvoidmain(String[]args){inti=127;//byteb=i;不能直接转换byteb=(byte)i;doubled=i;......
  • 类型转换及相关函数
    4.11类型转换及相关函数在Python中,不同的数据类型是可以相互转换的,下面列举一些之前没有介绍但是比较常见的数据类型转换及相关函数,以供参考。4.11.1进制转换类4.11.1......