这才是 Java 对象正解

在深入讨论对象之前,让我们先明确对对象和实例的理解。

什么是对象?

对象(Object)是内存中分配的实际数据结构,它包含了数据和方法。在 Java 中,对象是类的一个实例,可以是具体类(例如 Child)的实例,也可以是抽象类或接口的实现类的实例。对象是具体的实体,它具有特定的属性和行为。

实例(Instance)是什么?

实例(Instance)是指一个对象被创建出来并分配了内存空间的过程。这个对象可以是某个类的实例,也可以是子类的实例。实例化是创建对象的过程。

类(Class)是什么?

一个类就好比一个大集体,比如人类。这个类包含了具有相同特征的多个个体,例如张三、李四等。在 Java 编程中,如果我们要表示这个类的所有成员,就需要定义这些成员共有的属性,比如鼻子、眼睛、身高、年龄等等。

在《Java编程思想》这本书中提到,每一个对象都是某一个类的一个实例,其中 "类" 表示一种类型,即某类具有相同特征的事物的模板。

然而,有时候容易混淆对象和实例的关系。举个例子:

Person example = new Person();

在这个例子中,我们使用 new 关键字,在内存堆中创建了一个 Person 对象,而 example 是这个 Person 对象的引用变量。在这里,我们可以说 example 这个引用变量对应的对象是 Person 类的一个实例。

在面向对象编程中,实例和对象通常可以互换使用的概念。

再来看一个例子,以更好理解 Java 对象:

// Child extends Person
Person example1 = new Child();

在这行代码中,我们使用 new 关键字创建了一个 Child 类的实例(对象),并将这个 Child 对象赋值给了 example1 引用变量。因为 childPerson 的子类,所以这里可以将 Child 类的值赋值给 Person 类的引用变量。

关键点在于,尽管 example1Person 类的引用,但实际上它引用的是 Child 类的对象。这意味着 example1 可以访问 Person 类中的属性和方法,但不能访问 Child 类中特有的属性和方法,除非进行类型转换。

因此,实例化过程(new Child())创建了一个对象,并将其分配给一个引用变量,但这并不意味着对象包含了所有的属性和方法,而是取决于引用变量的类型和对象的实际类型。在代码示例中,example1Person 类的引用,但引用的是 Child 的对象,这就反映了多态性的概念,其中一个引用可以引用不同类型的对象,从而在调用相同的方法时产生不同的行为。

总结:了解以上内容后,我们知道在面向对象编程中,对象和实例在大多数情况下是一样的概念,可以互换使用,只不过在某些特定的上下文中会存在差异。

这才是java对象正解的更多相关文章

  1. java对象详解

    java对象及线程详解 内存布局 普通对象布局 数组的内存布局 内部类的内存布局 对象分解 对象头-mark word(8字节) 实例数据 对齐填充(可选) java锁分析 volatile关键字 v ...

  2. 复杂Java对象所占内存的大小

    我们在Java单个对象内存布局中讲解了单个简单的Java对象所占内存的大小的计算.那么这篇文章主要是讲解复杂Java对象所占内存大小的计算,我们把继承.复合的对象称为复杂对象 继承对象 class P ...

  3. jvm源码解读--15 oop对象详解

    (gdb) p obj $15 = (oopDesc *) 0xf3885d08 (gdb) p * obj $16 = { _mark = 0x70dea4e01, _metadata = { _k ...

  4. java对象池commons-pool-1.6详解(一)

    自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...

  5. JAVA对象头详解(含32位虚拟机与64位虚拟机)

    为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...

  6. Java对象初始化详解

    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...

  7. Java对象初始化详解(转)

    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...

  8. Java IO详解(六)------序列化与反序列化(对象流)

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  9. Java对象的内存布局以及对象所需内存大小计算详解

    1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...

  10. 【Java】详解java对象的序列化

    目录结构: contents structure [+] 序列化的含义和意义 使用对象流实现序列化 对象引用的序列化 自定义序列化 采用实现Serializable接口实现序列化 采用实现Extern ...

随机推荐

  1. 12-CSS浮动

    01 介绍 02 浮动规则 03 案例练习 3.1 缝隙的解决方案 <!DOCTYPE html> <html lang="en"> <head> ...

  2. 算法金 | 没有思考过 Embedding,不足以谈 AI

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在当今的人工智能(AI)领域,Embedding 是一个不可或缺的概念 ...

  3. Linux查看系统占用

    ## 查看内存占用 #CPU占用最多的前10个进程: ps auxw|head -1;ps auxw|sort -rn -k3|head -10 #内存消耗最多的前10个进程 ps auxw|head ...

  4. DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021

    论文主要处理Vision Transformer中的性能问题,采用推理速度不同的级联模型进行速度优化,搭配层级间的特征复用和自注意力关系复用来提升准确率.从实验结果来看,性能提升不错 来源:晓飞的算法 ...

  5. Vue2 整理(一):基础篇

    前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一些东西而已,所 ...

  6. yb课堂 注册-登陆-个人模块 《三十九》

    Cube-UI的form表单 https://didi.github.io/cube-ui/#/zh-CN/docs/form 注册 Register.vue <template> < ...

  7. Java-C3P0和Druid连接池的运用

    1.概念 其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器被创建,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器. 好 ...

  8. 魔百和s905l3a蓝牙系列 在armbian驱动并使用蓝牙!

    文章已废弃,因为现在x大的dtb不需要驱动直接可以使用 之后我会重新写文章,感谢大家

  9. [oeasy]python0133_[趣味拓展]颜文字_流石兄弟_表情文字_2ch_kaomoji

    颜文字 回忆上次内容 上次我们了解unicode 里面有各种字体 甚至还有emoji   emoji 本质上也是文字 按照unicode的方式编码 存储时按照utf-8的方式编码 显示时按照系统定义的 ...

  10. oeasy教您玩转vim - 55 - # 参数替换

    ​ [Github地址] (https://github.com/overmind1980/oeasyvim) [Gitee地址] (overmind1980/oeasyvim) [蓝桥实验楼 邀请码 ...