这才是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 ...
随机推荐
- win11添加开机自启动
方法1 win + R 打开运行,输入 shell:startup 会打开一个文件夹 将想要启动的程序快捷方式放进文件夹 在设置里面搜索"启动",可以看到开机启动项,确认已经打开. ...
- debian11 使用podman搭建 nacos-server
前言 基于debian11 + podman 搭建 nacos-server 用于简单测试. nacos-server基于java,如果直接运行还要准备java环境,在docker/podman 镜像 ...
- vulnhub - hackme1
vulnhub - hackme1 信息收集 端口扫描 详细扫描 目录扫描跟漏洞探测没发现什么可用信息,除了登录还有一个uploads目录应该是进入后台之后才能使用 web主页是个登录注册页面,爆了一 ...
- Linux Shell 常用命令 - 02篇
系列文章: Linux Shell 常用命令 - 01篇 8. shell 中各种括号的作用 参考 https://www.jb51.net/article/123081.htm https://ww ...
- yb 课堂实战之视频列表接口开发+API权限路径规划 《三》
开发JsonData工具类 package net.ybclass.online_ybclass.utils; public class JsonData { /** * 状态码,0表示成功过,1表示 ...
- 防火防盗防CDN流量盗刷
没想到自己的小破站也逃不掉被攻击的命,分分钟就给我刷欠费了. 本来不想写这篇文章的,但看到好多大佬(小林coding. JavaGuide)近期cdn都被盗刷了. 还是来提醒下大家,防火防盗防cdn流 ...
- PAT-1003 我要通过! (20分) JavaScript(node)
"答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正确&q ...
- C#开源、简单易用的Dapper扩展类库 - Dommel
前言 今天大姚给大家分享一个C#开源(MIT License).免费.简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel. 项目特性 Dommel ...
- Aug. 2024 杭二训练游记
\(\text{前言}\) 我在 \(\text{Aug. 6th}\) 到 \(\text{Aug. 25th}\) 在杭州某知名中学集训,但是我亲爱的母亲却在一开始告诉我是 \(\text{Aug ...
- 结合拦截器描述mybatis启动流程
简介 mybatis的启动入口一般有两个,在结合spring框架后由spring整合包下的SqlSessionFactoryBean启动 如果没有整合spring,则有XMLConfigBuilder ...