class和getClass()

2024-05-14 01:38
文章标签 class getclass

本文主要是介绍class和getClass(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为了解释这class和getClass()这两个概念,我们创建两个类A和B在同一个test包下,如下:

package test;
public class A {
}

package test;
public class B {
}

下面是我们需要了解的一些java概念

类是java的一种可以自定义的数据类型,和C++一样,C语言的结构体struct同样是可以自定义。java用class表示自定义类类型。比如上面定义的A和B就是类类型。

对象

由类类型创造的实例。比如下面的代码,a就是对象,a是类型A的实例对象。

package test;
public class Main {
public static void main(String[] args) {
A a = new A();
}
}

类型类

 我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。

类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,对于类型类来说,类类型就是类型类的对象实例。

package test;
public class Main {
public static void main(String[] args) {
A a = new A();
if ( a.getClass() == A.class ){
System.out.println("equal");
} else {
System.out.println("unequal");			
}
}
}
运行结果是:equal

在java中,用类类型.class来表示类型类,也就是类的类型。对象可以通过getClass()来获取这个对象所对应的类类型的类。

如果按照这种思维往下推,会有类型类的类型类吗,也就是A.class.class存在吗?注意,这种写法是不对的!

package test;
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.println(A.class);
System.out.println(A.class.getClass());
System.out.println(A.class.getClass().getClass());
System.out.println("... ...");
}
}

执行结果:

class test.A
class java.lang.Class
class java.lang.Class
... ...

存在A.class.getClass(),但是不存在A.class.class,上面的代码和下面一样,如下:

package test;
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.println(a.getClass());
System.out.println(a.getClass().getClass());
System.out.println(a.getClass().getClass().getClass());
System.out.println("... ...");
}
}
不存在a.getClass().class写法

通过以上代码执行的结果,可以得出一个结论:所有的类型类都是Class类(java.lang.Class)的实例。

package test;
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.println(a.getClass().equals(B.class));
}
}
不同的类的类型类是不一样的。但是不同的类的类型类的类型类是同一个类 java.lang.Class


总结

在java里面的所有的类的类型类都是Class类的对象,比如A.class、B.class都是Class类的对象。

java的设计是通过Class类使得jvm虚拟机能够管理java的类,当一个类被虚拟机装载完毕的时候,就会创建一个Class类的实例,对于类A就是A.class、对于类B就是B.class。



这篇关于class和getClass()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987391

相关文章

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

类型信息:反射-Class

在说反射前提一个概念:RTTI(在运行时,识别一个对象的类型) public class Shapes {public static void main(String[] args) {List<Shape> shapes = Arrays.asList(new Circle(), new Square(), new Triangle());for (Shape shape : shapes

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

泛型参Class、Class、Class的对比区别

1.原文链接 泛型参Class、Class、Class的对比区别 https://blog.csdn.net/jitianxia68/article/details/73610606 <? extends T>和<? super T> https://www.cnblogs.com/drizzlewithwind/p/6100164.html   2.具体内容: 泛型参数Class、

c++通用模板类(template class)定义实现详细介绍

有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:class Compare_int { public : Compare(int a,int b) { x=a; y=b; } int max( ) { return (x>y)?x:y; } int min( ) { return (x&... 有时,有两个或多个类,其功能是相同的,仅仅是数

Python方法:__init__,__new__,__class__的使用详解

转自:https://blog.csdn.net/qq_26442553/article/details/82464682 因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际

SpringBoot启动报错Failed to determine a suitable driver class

两种解决办法 1.在Application类上加 ` @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) package com.example.demo3;import org.springframework.boot.SpringApplication;import org.springframewo

easyswoole not controller class match

not controller class match composer.json 注册 App 这个名称空间了吗?执行过 composer dump-autoload 了吗?存在 Index 控制器,但是文件大小写、路径都对了吗? task socket listen fail 注意,在部分环境下,例如 win10 的 docker 环境中,不可把虚拟机共享目录作为 EasySwoole 的 T

JavaBug系列- Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class load

JavaBug系列之Mysql驱动问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 Java/一对一零基础辅导/企业项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 V:study_51ctofx 一、关于错误信息 APPLICATION FAILED TO START Description: Fai