这才是java对象正解
这才是 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 引用变量。因为 child 是 Person 的子类,所以这里可以将 Child 类的值赋值给 Person 类的引用变量。
关键点在于,尽管 example1 是 Person 类的引用,但实际上它引用的是 Child 类的对象。这意味着 example1 可以访问 Person 类中的属性和方法,但不能访问 Child 类中特有的属性和方法,除非进行类型转换。
因此,实例化过程(new Child())创建了一个对象,并将其分配给一个引用变量,但这并不意味着对象包含了所有的属性和方法,而是取决于引用变量的类型和对象的实际类型。在代码示例中,example1 是 Person 类的引用,但引用的是 Child 的对象,这就反映了多态性的概念,其中一个引用可以引用不同类型的对象,从而在调用相同的方法时产生不同的行为。
总结:了解以上内容后,我们知道在面向对象编程中,对象和实例在大多数情况下是一样的概念,可以互换使用,只不过在某些特定的上下文中会存在差异。
这才是java对象正解的更多相关文章
- java对象详解
java对象及线程详解 内存布局 普通对象布局 数组的内存布局 内部类的内存布局 对象分解 对象头-mark word(8字节) 实例数据 对齐填充(可选) java锁分析 volatile关键字 v ...
- 复杂Java对象所占内存的大小
我们在Java单个对象内存布局中讲解了单个简单的Java对象所占内存的大小的计算.那么这篇文章主要是讲解复杂Java对象所占内存大小的计算,我们把继承.复合的对象称为复杂对象 继承对象 class P ...
- jvm源码解读--15 oop对象详解
(gdb) p obj $15 = (oopDesc *) 0xf3885d08 (gdb) p * obj $16 = { _mark = 0x70dea4e01, _metadata = { _k ...
- java对象池commons-pool-1.6详解(一)
自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...
- JAVA对象头详解(含32位虚拟机与64位虚拟机)
为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...
- Java对象初始化详解
在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...
- Java对象初始化详解(转)
在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...
- Java IO详解(六)------序列化与反序列化(对象流)
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java对象的内存布局以及对象所需内存大小计算详解
1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...
- 【Java】详解java对象的序列化
目录结构: contents structure [+] 序列化的含义和意义 使用对象流实现序列化 对象引用的序列化 自定义序列化 采用实现Serializable接口实现序列化 采用实现Extern ...
随机推荐
- 高通Android Cam-x Actuator Bring up
高通Android Camera Bring Up Actuator reference:https://blog.csdn.net/mr_zjc/article/details/105736925 ...
- 使用kk在centos7上离线部署kubesphere v3.0.0详解
环境准备 以三台centos 7.7 64bit 为例: 确保所有机器已经安装所需依赖软件(sudo curl openssl ebtables socat ipset conntrack docke ...
- map端join和reduce端join的区别
MapReduce Join MapJoin和ReduceJoin区别及优化 maptask处理后写到本地,如果再到reduce,又涉及到网络的拷贝. map端join最大优势,可以提前过滤不需要的数 ...
- Java基础:线程的三种创建方式
一.继承Thread类 定义一个类继承线程类Thread 重写run()方法 创建线程对象 调用线程对象的start()方法创建线程 Thread类的常用API setName(String name ...
- Redis挂了,怎么补救?谈谈如何实现redis的高可用
Redis挂了,怎么补救?谈谈如何实现redis的高可用! Redis实现高可用主要有三种部署模式:主从模式.哨兵模式和集群模式. 分区 分区(Partitioning)是一种最为简单的拓展方式. 在 ...
- css浅谈Flex布局
1.打开Flex布局 .box{ display: flex; } 2.容器的属性 flex-direction flex-wrap flex-flow justify-content align-i ...
- 全新发布!桌面端效率工具RunFlow
RunFlow是一款跨平台的生产力工具,可以启动应用程序和搜索文件等,类似于Windows平台的Wox和PowerToys,同样也类似于Mac平台的Alfred和Raycast.但我们并不与这些工具相 ...
- 2行JS代码实现Vue全选和反选
实现效果: 第一行:子选项的选中状态 等于 全选框的状态 this.letters.forEach(item => item.check = this.checkAll) 第二行: 使用数组 e ...
- [oeasy]python0003_ 终端大冒险_终端命令_whoami_pwd_ls
终端大冒险_终端命令_ls_pwd_whoami 回忆 上次 了解基本环境 简称 含义 CLI 命令行界面 GUI 图形用户界面 在 CLI 中 通过终端 连接 远程服务器的 壳(shell) 控制 ...
- [oeasy]python0022_框架标题的制作_banner_结尾字符串_end
结尾字符串(end) 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面存的是 cpu 指令 可以执行的那种 我们可以把指令对应的汇编找到 ...