你的位置:首页 > 软件开发 > Java > Java中关于先有鸡还是先有蛋的问题

Java中关于先有鸡还是先有蛋的问题

发布时间:2015-12-07 01:00:05
在Java中,我们常常会看到一个类型:Class。并且在类似Person.class,cache.getClass()等代码中见到它的身影。 众所周知,Class是用来描述一个类的类型,而Object是所有对象的最终父对象。那么就会引申出下边的两个结论: 1、如果从对象的角度来看 ...

Java中关于先有鸡还是先有蛋的问题

 在Java中,我们常常会看到一个类型:Class。并且在类似Person.class,cache.getClass()等代码中见到它的身影。

众所周知,Class是用来描述一个类的类型,而Object是所有对象的最终父对象。那么就会引申出下边的两个结论:

1、如果从对象的角度来看,那么肯定是先有Object对象,其次才有其派生的对象Class。

2、Class表示的是类、对象,肯定是先有类这个概念,其次才有各个类型(抽象的、非抽象的),包括Object。

这就会出现一个问题,到底是先有Class(鸡)还是先有Object(蛋)?

Java中关于先有鸡还是先有蛋的问题

 

好吧,此处先给出答案,是先有Object,然后才有Class的。

原因是Object,是所有对象的最终父对象,而Class本身也是一个对象。所以是先有Object,然后才Class对象的。

那么如何解释第二点呢? 这是因为一个概念被混淆了。

在Java中,所有的对象都派生自Object,而Class类(注意此处是大写也是一个类)所以他也继承自Object,这个我们可以在eclipse里边通过查看类的继承关系清楚的看到。

在Java中,还有一个class(注意此处是小写)。他表示的是一个个(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )对象,也就是一个个类。Object是这些对象的其中之一。同时在这些对象中有一个对象,它的作用是用来识别标记其它对象的内容,这个类叫做Class(注意此处是大写)。 因此就会出现有一个class的名字叫做Class。而问题中将class等价于Class,很显然是不合理的。两者完全不在一个维度里。

所以这样就可以很好的理解,JVM在启动后,会加载各个需要的class,其中包括Class。

 

抛砖引玉----深入学习Class类

Java中关于先有鸡还是先有蛋的问题

了解了class,Object,Class的关系,我们接下来深入说说Class类。(这才是这篇博客的主要目的)

 一、背景知识

类对象在使用之前都会被JVM加载(其实是经过加载、连接、初始化三个步骤对类完成初始化)。类加载指的就是JVM将class文件读入内存,并为之创建一个Class对象。同时当一个类被加载后,再次使用时,就不会被重复加(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )载。这样新建的Class与加载的class就形成一一对应的关系。 通过该Class对象,就可以访问到对应的class。所以我们可以把Class理解为一个类的标识对象,它相当于是一个类的标签(铭牌)。拿到一个Class,我们就可以找到对应的类(class)。

二、获取Class对象的方法

在Java中我们可以使用三个方法拿到Class对象。其中两种是针对已经在家的类对象,去获得他对应的Class对象。剩余一种利用到了反射,根据提供的类名去寻找对应的class文件,进而找到Class对象。

 

1 Class.forName(String className)//className表示完整的名称,包括该类的包名。如果无法找到,该方**抛出一个 2 Person.class //Person代表的是一个类,class字段是其默认的属性 3 person.getClass() //getClass是Obj类的一个实例方法,所有的类都有该方法,包括Class类 

原标题:Java中关于先有鸡还是先有蛋的问题

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。