千家信息网

怎么理解JAVA中类、实例与Class对象

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"怎么理解JAVA中类、实例与Class对象"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2026年11月02日怎么理解JAVA中类、实例与Class对象

本篇内容介绍了"怎么理解JAVA中类、实例与Class对象"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

类

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

实例

简单理解,就是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才能直观的看懂,可以看做是一个模版;而类的实例化对象,就是通过模版,开辟出的一块内存进行实际的使用。

例子:

我们通过一个例子来理解Class实例,为了说明方便,我们新建一个包名深点的类。

新建Name.java(当然,该文件要放在com\dxjia\sample的目录下)

package com.dxjia.sample;public class Name { static int count = 0; static { count++; System.out.println("Name Class Loaded! count = [" + count + "]" ); } public Name() { System.out.println("Name Constructor called!"); }}

再在根目录新建一个Test主类

import com.dxjia.sample.Name;public class Test { static { Name mName; System.out.println("Test Class loaded"); } public static void main(String[] args) { System.out.println("entern Test main()"); // Name.class Class mClassPointClass; // Class.forName("完整包名+类名") Class mClassForName; // new 对象后,对象.getClass() Class mClassObjectPointClass1; Class mClassObjectPointClass2; try { //测试 类名.class mClassPointClass = Name.class; System.out.println("mClassPointClass = " + mClassPointClass); //测试Class.forName() mClassForName = Class.forName("com.dxjia.sample.Name"); System.out.println("mClassForName = " + mClassForName); //测试Object.getClass() Name name1 = new Name(); mClassObjectPointClass1 = name1.getClass(); System.out.println("mClassObjectPointClass1 = " + mClassObjectPointClass1); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } Name name2; System.out.println("defined one Name object"); name2 = new Name(); System.out.println("Name object instance done!"); mClassObjectPointClass2 = name2.getClass(); if (mClassForName == mClassPointClass && mClassPointClass == mClassObjectPointClass1 && mClassObjectPointClass1 == mClassObjectPointClass2) { System.out.println("all the Class object equal..."); } }}

分别对他们进行编译:

javac com\dxjia\sample\Name.java javac Test.java

执行:

java Test

代码中使用了static静态代码块来进行实验,一个类的运行,JVM做会以下几件事情 1、类装载 2、链接 3、初始化 4、实例化;而初始化阶段做的事情是初始化静态变量和执行静态方法等的工作,而且永远只执行一次。

输出结果:

Test Class loadedentern Test main()mClassPointClass = class com.dxjia.sample.NameName Class Loaded! count = [1]mClassForName = class com.dxjia.sample.NameName Constructor called!mClassObjectPointClass1 = class com.dxjia.sample.Namedefined one Name objectName Constructor called!Name object instance done!all the Class object equal...

通过结果可以看出在使用 类名.class获得Class实例时,并不会触发类的初始化,而 Class.forName方法就会触发,当然实例化对象肯定也是会触发的,但因为static代码块只执行一次,所以不会再有打印,最后的打印,说明一个类的Class实例只有唯一的一个。

"怎么理解JAVA中类、实例与Class对象"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

实例 对象 类名 就是 方法 代码 实际 属性 静态 也就是 事物 内存 只是 文件 实实 测试 编译 运行 事情 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 西安纸贵互联网科技有限公司 新华互联网科技学校 疫情对互联网科技公司影响 互联网科技股票 亿策互联网科技 凡科互联网科技 上海万想互联网科技 互联网巨头投资的硬核科技 互联网金融科技公司干啥的 南平创想时代互联网科技有限公司 华夏互联网科技业 开一家科技互联网公司需要多少钱 上海科技产业互联网平台 图游互联网科技 美国五大互联网科技公司市值多少 科技互联网公司两年变化 深圳互联网科技园地址 北京瑞云互联网科技有限公司 现代科技的标志之一的互联网 广州大一互联网络科技有限公司 科技类互联网 互联网科技生活的内容 富国互联网科技创新基金 现代互联网科技股 搜狐科技互联网 烟台灵鸽互联网科技有限公司 互联网公司高科技产品 领航科技大厦互联网公司 吉林省码上互联网科技电话
0