Class类对象和普通类对象的初步理解(一)

看了网上几篇关于反射以及Class类对象和普通类实例对象的文章。

简单总结一下我理解的Class类对象和普通类对象。

首先JVM是通过读取字节码文件.class文件,用二进制流的方式读取到内存当中,这个时候就生成了一个Class类的对象。

普通类的对象是根据这个Class类的对象为模板生成的。也就是说Class类可以有多个普通类对象,普通类对象只能有一个Class对象。

而且java还有三种生成Class类对象的方式,我想不同的生成方式肯定有其不同的作用的。比如说,有的是在编译时候就进行检测,有的在编译时就确定普通类对象,有的是在运行时候才去读取字节文件,运行时候才确定是哪个Class对象。各有各的优缺点和用途。

类是一种抽象,用生活中的例子可以理解。比如家居生活用品,有大类,小类,大类是对小类的抽象,小类是对具体实物,具体物品(或者说具体对象)的抽象。大类其中还可以是某些分类的对象。所以,放到java上面也是理解的通的。

----------------------------------------------------------------------------------------------------------------------------------------

一下摘录网上的一些文章

转自:https://blog.csdn.net/u010325193/article/details/88740414

      类是面向对象编程语言的一个重要概念,它是对一项事物的抽象概括,可以包含该事物的一些属性定义,以及操作属性的方法。面向对象编程中,我们都是以类来编码。

扫描二维码关注公众号,回复: 12674488 查看本文章

实例

简单理解,就是new,就是对类的实例化,创建这个类对应的实际对象,类只是对事物的描述,而实例化就相当于为这个描述新开辟了一块内存,可以改变这块区域里的各种属性(成员变量),当然,也可以实例化多块区域,只是不同的对象而已。

Class

注意这里C大写了,与类概念区分开,在java里,Class是一个实实在在的类,在包 java.lang 下,有这样一个Class.java文件,它跟我们自己定义的类一样,是一个实实在在的类,Class对象就是这个Class类的实例了。在Java里,所有的类的根源都是Object类,而Class也不例外,它是继承自Object的一个特殊的类,它内部可以记录类的成员、接口等信息,也就是在Java里,Class是一个用来表示类的类。(o(∩_∩)o 有点绕啊,抓住关键一点,Class是一个实实在在的类,可以为它创建实例,也就是本文后面提到的Class对象,也看叫做Class实例)。

  java提供了下面几种获取到类的Class对象的方法:

    1) 利用对象实例调用getClass()方法获取该对象的Class实例;
         2) 使用Class类的静态方法forName("包名+类名"),用类的名字获取一个Class实例

              3)运用 类名.class 的方式来获取Class实例;

  我们知道java世界是运行在JVM之上的,我们编写的类代码,在经过编译器编译之后,会为每个类生成对应的.class文件,这个就是JVM可以加载执行的字节码。运行时期间,当我们需要实例化任何一个类时,JVM会首先尝试看看在内存中是否有这个类,如果有,那么会直接创建类实例;如果没有,那么就会根据类名去加载这个类,当加载一个类,或者当加载器(class loader)的defineClass()被JVM调用,便会为这个类产生一个Class对象(一个Class类的实例),用来表达这个类,该类的所有实例都共同拥有着这个Class对象,而且是唯一的。

总结

  在java里,类只是信息描述的,写明了有哪些内部属性及接口,你可以理解为是定义了一套规则;而Class对象在java里被用来对类的情况进行表述的一个实例,也就是是类的实际表征,可以理解为是对规则的图表化,这样JVM才能直观的看懂,可以看做是一个模版;而类的实例化对象,就是通过模版,开辟出的一块内存进行实际的使用。

猜你喜欢

转载自blog.csdn.net/yemenlinweihan/article/details/104058865