class和getClass()
来源:互联网 发布:linux操作系统下载官网 编辑:程序博客网 时间:2024/05/31 06:23
为了解释这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");}}}
在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("... ...");}}
通过以上代码执行的结果,可以得出一个结论:所有的类型类都是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里面的所有的类的类型类都是Class类的对象,比如A.class、B.class都是Class类的对象。
java的设计是通过Class类使得jvm虚拟机能够管理java的类,当一个类被虚拟机装载完毕的时候,就会创建一个Class类的实例,对于类A就是A.class、对于类B就是B.class。
阅读全文
0 0
- getClass() 和类.class
- class和getClass()
- getClass(),class属性和getName()
- .class和.getClass()的区别
- 泛型和反射;getClass()和.class
- 类名.class和类名.getClass()
- 关于.getClass()和.class的区别
- 类名.class和getClass()区别
- 类名.class和getClass()区别
- 类名.class和getClass()区别
- getClass(),forName()和.class的区别
- getClass(),class属性和getName()解析
- JAVA之Class类和getClass
- getClass(),class属性和getName()解析getGenericSuperclass
- 关于.getClass()和.class的区别
- 关于.getClass()和.class的区别
- 关于.getClass()和.class的区别
- 类名.class和getClass()区别
- unity 简单使用protobuf
- 第五章 时序图
- Python开发爬虫完整代码解析
- crontab 任务调度 2
- 广度优先搜索 《挑战程序设计竞赛》——迷宫的最短路径
- class和getClass()
- 黄金投资亏损3万后的经验总结
- 百度地图的开发day1之SHA1的值,包名,安全码
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- Java集合
- 移动端苹果手机 input的readonly 不起效解决方案
- RocketMQ
- python3 socket实现
- okhttp volley retrofit对比