如何理解java继承中内存分布

java中与继承有关的程序内存分析 想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件 立即下载

继承是java面向对象的一大特征,继承是多态的基础。将两个具备共性属性的事物向上抽取,是泛化的过程。在java中,则是相反的继承过程。那么,继承在内存中的特点是怎样的呢?通过下面这段代码,我们来具体分析:
class A {
private int a = 1;
public A() {
println();
}
public void println() {
System.out.println(“A-a:”+a);
}
}
class B extends A{
private int a = 2;
public B() {
println();
}
public void println() {
System.out.println(“B-a:”+a);
}
}
class C extends B{
private int a = 3;
public C() {
println();
}
public void println() {
System.out.println(“C-a:”+a);
}

}
public class TestExtend {

public static void main(String[] args) {

    new C();
}

}
运行结果:
C-a:0
C-a:0
C-a:3

分析,new C( )的执行过程。首先在编译TestExtend类后产生了A、B、C、TestExtend四个class文件,执行java TestExtend后启动jvm,jvm内存方法区中加载进TestExtend.class文件,jvm调用main方法。此时,在栈区中开辟了main方法的栈帧。
加载C类文件进方法区,执行new运算,此时则在堆区开辟内存空间,创建C对象。C对象中包含有父类的属性,并要对父类成员变量进行初始化,要使用到父类构造方法,所以,将A、B类文件都加载进方法区中。
需要对C的直接父类B类成员变量a进行初始化,而B类又需要对其直接父类A类的成员变量a进行初始化,先执行默认初始化动作,此时对象中A类成员变量a为0,后执行显示初始化动作,为1,然后调用构造方法,构造方法中调用println()方法,非静态成员的调用必定要使用到对象,此时A类中构造方法的this指向了调用当前方法的B类对象,即C对象,这其中就有了多态的出现,A类引用指向B类对象。根据动态绑定,此时调用的是C对象的println()方法,此时C类的成员变量a是默认值0,所以输出结果是0。A类成员变量a初始化完成之后,执行B类成员变量a的初始化,同理,输出0。
当B类成员变量a初始化完成之后,最后执行C对象的成员变量初始化,执行显示初始化后a=3,然后执行构造方法,输出a的值为3。

Prometheus+Grafana部署及企业微信邮件/群消息告警通知配置 本文详细介绍了在Ubuntu 22.04系统上部署普罗米修斯监控系统的完整流程。首先说明了系统配置要求(2核CPU、4G内存、100G硬盘),然后分步骤指导下载、解压和安装普罗米修斯服务。文章包含配置prometheus.yml文件、启动服务、设置系统服务等关键操作,并提供了访问9090端口验证服务的方法。接着介绍了通过node_exporter监控Linux主机的配置过程,包括安装、启动服务和修改普罗米修斯配置文件添加监控项。最后还涉及了mysqld_exporter的部署流程,用于监控MySQL数据库服 阅读详情

相关推荐

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5845

java 继承关系的内存图解 (通俗易懂)

Java 继承关系中的内存图解,逐步拆分!

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 5060

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6924

Java 基础进阶篇(二):继承的内存原理与特点

一、继承概述 二、内存运行原理 三、继承的特点 四、继承后:成员变量和方法的访问特点 五、继承后:方法重写 六、继承后:子类构造器的特点 七、继承后:子类构造器访问父类有参构造器 八、this、super 总结

秀岩的博客 2795

PowerDesigner16.5下载和安装教程

一、软件下载 1.下载地址(不用复制,直接点击下载链接即可):链接:https://pan.baidu.com/s/1MSnWHWt3SO2Uz5dt9AANAg提取码:z9kk 二、软件安装 1.下载安装包(包含安装文件、汉化包、注册文件) 2.下载后文件内容如下 3....

cicong2374的博客 10万+

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3190

关于继承的细节和内存分析

继承细节

2301_76901971的博客 463

Arduino应用——PWM控制直流电机风扇

Arduino应用——PWM控制直流电机风扇PWM原理实验器件功能描述如何改变文本的样式插入链接与图片实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 最近在使用arduino UNO开发板完成课程小作业。其中一个要求设计一个电风扇控制系统,要求能够通过PWM调节风扇的转速。期间搜索了许多例程和方法,但受限于器件,效果不

hypecycle的博客 2万+

# Java继承与内存分析详解:从代码设计到内存布局

**单继承原则**:Java中子类只能有一个直接父类(C++支持多继承),但可以通过多级继承形成链式结构。private void fushow1() { /*...*/ } // 私有方法,子类不可见。void fushow2() { /*...*/ } // 默认方法,子类可继承。- **命名规范**:父类命名需体现抽象共性(如`Animal`),子类命名需具体(如`Dog`)。// 调用继承自父类的方法。| **堆** | 通过`new`创建的对象及实例变量 |

tfboys6666的博客 393

MFC实现图书管理系统(附完整源码)

MFC实现图书管理系统(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 804

【MT7628】固件开发-SDK4320添加MT7612E WiFi驱动操作说明

【MT7628】固件开发-SDK4320添加MT7612E WiFi驱动操作说明

wgl307293845的博客 2081

关于java成员方法继承内存图

如下下图。

qq_61604908的博客 415

2024阅读AOSP源码的正确打开姿势

在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。

虎哥LoveDroid 2714

Java面向对象——继承(3)

上篇文章给大家带来了继承的特性以及面向对象中继承带来的优缺点,能够深入理解这些特性,对OOP设计也有的新的认识,在JDK中绝大多数都是通过继承来扩展代码提高复用性,也为今后的学习打下了坚实的基础。 本篇内容给大家讲解继承在JVM虚拟机中内存的分布和动态变化,从对象的创建初始化再到对象的销毁过程,如果能够深入理解此篇内容,无疑这对你今后的提升有着很大的帮助! 首先编写一个伪代码,通过代码来进行研究。 编写三个类,分别为A、B、C,让他们依次继承,A为最高基类。在main方法中new

m0_68828514的博客 303

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java关键字,super,this,static关键字

摘要:本文介绍了Java面向对象编程中的继承、super、this和static关键字。继承实现代码复用,子类继承父类属性和方法;创建子类对象时会先创建父类对象。super用于访问父类成员,this指代当前对象。static修饰的成员属于类而非对象,存储在方法区,具有特定的加载顺序和执行规则。文章通过代码示例详细说明了这些关键字的用法、内存模型及注意事项,帮助理解Java面向对象的核心概念。

2401_88603156的博客 1283

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java中继承方法的使用,以及使用方法的注意事项,继承方法重写的理解,白话文详解,简单易理解

如今能给我安全感的,却只有出门时口袋里的钱包和钥匙,以及手机里显示的满格电 首先创建父类子类测试类: //父类 public class Fu { } //子类 public class Zi { } //测试类 public class TestA { } 子类继承父类: //子类 public class Zi extends Fu{ } 随后我们在父类中添加非静态方法aa: public class Fu { public void aa(){ Syste.

秃头的博客 364

java 虚继承_多重继承和虚继承的内存布局

这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(ByEdsko de Vries, January 2006)敬告:本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。本文我们将阐释GCC编译器针对多重继承和虚拟继承下的对象...

weixin_31304499的博客 328

Java高并发编程-Thread源码分析及内存分布详解

没有强大的理论支撑的代码,都是自娱自乐,架构师带你学习多线程的原理到实战项目中的高并发解决方案,闲暇之余,分享技术干货,和喜爱技术的coder们一起交流,互相学习进步 本次主要和大家分享Thread的源码,分析Thread创建都做了什么事情,通过介绍JVM内存分布了解Thread在内存中的分布情况,从而了解Thread的原理 Thread构造介绍 默认线程名词构造 如果构造函数中没有指定线程名称,线程默认线程名称的规则是什么呢?,查看JDK源码 从源码中,我们可以看到...

weixin_42737131的博客 475

java 继承

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表`在这里插入代码片`创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导...

norang的博客 201

多重继承和虚继承的内存布局,超级…

这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006)           敬告: 本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。    本文我们将阐释G

路漫漫其修远兮,吾将上下而求索 1411

Java继承特性以及重写现象的内存分析

今天我们说一下Java面向对象中的一个特性-继承,然后做一下他的内存分析,理解一下重新现象的情况。 怎么理解继承? 下面先介绍一下怎么理解继承的特性,继承呢在Java中的关键是extends,那么其实所谓的继承是比较简单的也是很好理解的,Java中如果一个类继承了父类,那么我们就说他们是一个继承的关系,那么被继承的那个类的所有属性,继承者都是存在的,除了构造器,构造器是不可以被继承的,用fin...

红岸基地 1737

Java面向对象——继承(1)

本篇文章来给大家讲解java面向对象三大特性中的继承。本次的内容相比上篇的封装内容要多很多,同时难度也有所增加,我会用最通俗,最直观的案例带大家学习。继承这一章节我会分三次进行讲解,初识继承、深入继承特性以及继承JVM内存分布。如果能将继承深入的理解,那么你对OOP设计思想也会得到质的飞跃,同时也为今后的学习打下坚实的基础!接下来带大家初识面向对象的继承。

m0_68828514的博客 621

Java 学习笔记(6)——继承

之前说过了Java中面向对象的第一个特征——封装,这篇来讲它的第二个特征——继承。一般在程序设计中,继承是为了减少重复代码。 继承的基本介绍 public class Child extends Parent{ //TODO } 使用继承后,子类中就包含了父类所有内容的一份拷贝。 子类与父类重名成员的访问。 重名属性 当子类与父类中有重名的数据成员时,如果使用子类对象的引用进...

weixin_30699235的博客 82

Java基础-面向对象(封装、继承、多态)

再次学习J2SE,不得不慨叹自己对这部分基础内容掌握的并不牢靠,因此再在这里进行总结。面向对象的基础思想在这里不再提及,此文只针对java中的面向对象的基础内容进行讲述。   封装         (1)属性         ①变量(静态属性)         成员变量可以是java中的任何一种数据类型,定义时如不初始化java可默认对其初始化,初始化值为:

Flash~ 2213
上一篇: 从数组元素交换窥探java值传递和引用传递
下一篇: 线程状态及面试常见问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值