当前位置: 首页 > news >正文

QScrollBar滚动条、QSlider滑块、 QDial表盘

                        

QAbstractSlider 类、 QSCrollBar 类、 QSlider 类
一、 基本原理
1、 QAbstractSlider 继承自 QWidget,该类主要用于提供一个范围内的整数值,
2、 QAbstractSlider 类是 QScrollBar 类(滚动条)QSlider 类(滑块)QDial 类(表盘)的父类,因
此该类的属性和函数对这 3 个类都是可行的。
3、对于滚动条和滑块主要就是对其相关的一些值的设置,对于其外观样式比较单一,所以
动条
滑块的主要功能集中在 QAbstractSlider 类中,这个类提供了滚动条和滑块的共同作
用,主要是对其值作了描述,对于他们的外形,分别由 QScrollBar 类和 QSlider 决定。 所
以单独使用 QAbstractSlider 类什么也干不了,通常需要使用他的子类,若使用 sho()显示
该类的对象,他就是一个空的什么也没有的窗口。
4、注意:滚动条默认是不接受键盘焦点的,要使滚动条接受键盘焦点需使用
QWidget::setFocusPolicy()函数设置焦点策略。
5、滚动条、滑块、表盘的外观样式见下表

二、 最大/最小值和步长
1、 最大/最小值, 步长, 滚动范围,滚动条的滑块大小, 文档长度
1)、 单个步长:是指按一下滚动条(垂直方向)的向上/下箭头或按下键盘的上/下键时滑块
移动的距离。水平方向类似
2)、 页面步长:通常是指在滚动条上按下 page up 和 page down 键时移动的距离。 默认值
通常为 10。
3)、 最大和最小值是个逻辑意义上的值,它们不会改变滑块或滚动条的长度,详见后文。
4)、滚动范围:是指滚动条滑块可移动的距离。滚动范围始终是最大值减去最小值。
具体见下面的图示。

   
2、 滑块像素大小(即实际大小)
1)、 像素大小就是指滑块本身的大小(即使用 resize()函数设置的大小),这个大小是以像素
为单位的,以上讲解的最大/最小值、滚动范围、页面步长、文档长度都是逻辑长度,
是没有单位的。


2)、滑块像素大小受到页面步长的影响,


3)、本小节会把按下 page up 或 page down 时滚动到另一端的次数简称为滚动次数


4)、在不影响滑块像素大小的最小大小和最大大小时,可按如下公式计算(可参阅上一点
的图示)

滚动次数=(最大值 - 最小值) 除以 (页面步长)
滑块像素大小 = (文档长度的像素大小) 除以 (滚动次数 + 1)。

 滚动范围 = 最大值 - 最小值、
 文档逻辑长度=最大值 - 最小值 + 页面步长 = 滚动范围 + 页面步长
 滑块逻辑大小 = 页面步长
 滚动一次的像素距离 = (文档像素大小 - 滑块像素大小) 除以 滚动次数
比如,假设文档像素大小为 40,滚动次数为 1,则滑块像素大小为 20 像素,若滚
动次数为 2,则滑块像素大小为 40/3=13.333 像素。由此可见滚动次数越多,滑块
像素大小就越小,滚动次数越少,滑块像素大小就越大。


5)、当按以上公式计算出来的滑块像素大小小于滑块的最小像素大小时,滑块的像素大小
始终为最小像素大小保持不变。此时滚动次数、最小/最大值、滚动范围都不会改变,
但是文档逻辑长度和滑块逻辑大小不能再按以上公式进行计算。但滚动一次的像素距
离比较好计算,其公式为
滚动一次的像素距离 = (文档像素大小 - 滑块像素最小大小) 除以 滚动次数

三、 跟踪(Tracking)与当前值(Value)、 当前位置(Position)
1、 跟踪:若启用跟踪,则在拖动滑块或滚动条时会发送 valueChanged()信号,若禁用了跟踪,
则只在用户释放滑块或滚动条时,才会发送 valueChanged()信号


2、 当启用了跟踪时,当前值与当前位置是相同的,


3、 若未启用跟踪,则当前值与当前位置是不同的, 原理见下图

四、 QAbstractSlider 类中的属性函数
1、 orientation : Qt::Orientation
访问函数: Qt::Orientation orientation() const; void setOrientation(Qt::Orientation); //槽
设置滚动条或滑块的方向,只能是 Qt::Vertical(默认)或 Qt::Horizontal


2、 sliderDown : bool 访问函数: bool isSliderDown() const; void setSliderDown(bool);
描述滑块是否被按下,设置此属性后在外观上可能会没有变化,但会发送 sliderPressed()
信号


3、 maximum : int 访问函数: int maximum() const; void setMaximum (int);
4、 minimum : int 访问函数: int minimum() const; void setMinimum (int);
设置最大和最小值


6、 pageStep : int 访问函数: int pageStep () const; void setPageStep(int);
页面步长


7、 singleStep : int 访问函数: int singleStep() const; void setSingleStep (int);
单个步长


8、 sliderPosition : int 访问函数: int sliderPosition() const; void setSliderPosition (int);
信号: void sliderMoved(int value);
滑块的当前位置,若启用了跟踪,则此值与 value 属性的值相同。


9、 tracking : bool 访问函数: bool hasTracking () const; void setTracking (bool);
是否启用跟踪,若启用跟踪,则在拖动滑块或滚动条时会发送 valueChanged()信号,若禁
用了跟踪,则只在用户释放滑块或滚动条时,才会发送 valueChanged()信号。


10、 value : int 访问函数: int value()const; void setValue(int); //槽
信号: void valueChanged(int value);
滑块的当前值,该值被强制在最大值和最小值的范围内。


11、 invertedAppearance : bool
访问函数: bool invertedAppearance() const; void setInvertedAppearance (bool);
最大值和最小值是否出现相反的位置,若为 flase(默认),则不反转,若为 true 则反转。
该属性对滑块和表盘(dial)更有意义,对于滚动条则取决于样式,大多数样式会忽略滚动
条的此属性。 具体原理见下图


12、 invertedControls : bool 访问函数: bool invertedControls() const; void setInvertedControls (bool);
是否反转鼠标滚轮和键盘事件,若为 false,则鼠标滚轮向上滚或使用向上键将使值向最
小值调整。 注意:该属性是使用滚轮或键盘上的方向键移动滑块的方向为最大/最小值方
向,且影响的是键盘和鼠标滚轮事件,也就是说该属性不会影响滚动条上的箭头。 具体原
理见下图

                

13、 QAbstractSlider(QWidget *parent = Q_NULLPTR); //构造函数


14、 void setRange(int min, int max); //槽,
设置滑块的最大/最小值与 maximum 和 mimimum 属性相同,只不过使用该函数更方便


15、 void triggerAction(SliderAction action)
触发滑块, SliderAction 枚举见下表,此函数可以用来以编程的方式调整滑块的位置,比
如 triggerAction(QAbstractSlider::SliderPageStepAdd)表示把滑块向最大值方长移动一个页面步长。

QAbstractSlider::SliderAction 枚举(无标志)
作用:描述触发滑块动作的方式
成员说明
QAbstractSlider::SliderNoAction0无动作
QAbstractSlider::SliderSingleStepAdd1向最大值方向移动一个单个步长的距离
QAbstractSlider::SliderSingleStepSub2向最小值方向移动一个单个步长的距离
QAbstractSlider::SliderPageStepAdd3向最大值方向移动一个页面步长的距离
QAbstractSlider::SliderPageStepSub4向最小值方向移动一个页面步长的距离
QAbstractSlider::SliderToMinimum5把滑块移至最小值(home 键)
QAbstractSlider::SliderToMaximum6把滑块移至最大值(end 键)
QAbstractSlider::SliderMove7移动滑块

五、 QAbstractSlider 类中的信号
1、 void rangeChanged(int min, int max)
当最大/最小值改变时,发送此信号。


2、 void sliderMoved(int value)
当 sliderDown 属性为 true,且滑块移动时,发送此信号,即使关闭跟踪(tracking 属性),
也会发送此信号。通常表示用户使用鼠标拖动滑块时,注意:使用键盘方向键或 page up、
page down 或按下滚动条上的向上/下箭头都不会触发该信号,使用鼠标时需要按住滑块再
拖动滑块,才会发送此信号。


3、 void sliderPressed()
4、 void sliderReleased()
当用户用鼠标按下或释放滑块时发送以上信号,可使用 setSliderDown()函数以编程的方式
发送以上信号。 注意,以上信号是鼠标信号,也就是说对键盘可能会无效。


5、 void valueChanged(int value)
滑块的值改变时,发送此信号, tracking 属性对此信号有影响。


6、 void actionTriggered(int action)
触发滑块时发送, action 表示触发滑块时的动作, 见 triggerAction()函数。 比如,若滑快以
是单个步长增长,则 action 为 1(即 QAbstractSlider::SliderSingleStepAdd), 单击 end 可触发
QAbstractSlider::SliderToMaximum,此时 action 为 6,同理单击 home 可触发
QAbstractSlider::SliderToMinimum,使用其他方式不会触发最大/最小值。


六、 QScrollBar 类

1、 QScrollBar 类就只有两个构造函数, 其默认为取值为垂直,最小值为 0,最大值为 100,
单个步长为 1,页面步长为 10,初始位置为 0。 原型如下:
QScrollBar(QWidget *parent = Q_NULLPTR);
QScrollBar(Qt::Qrientation orientation, QWidget *parent = Q_NULLPTR);


七、 QSlider 类
1、 QSlider 类,除了从父类继承来的特性,就仅有刻度线的绘制了,详见下文。
2、 QSlider (QWidget * parent = Q_NULLPTR); //构造函数,默认为垂直。
QSlider (Qt :: Orientation orientation, QWidget * parent = Q_NULLPTR)


3、 tickInterval: int 访问函数: int tickInterval() const; void setTickInterval(int);
刻度线之间的间隔(见右图),间隔值是一个逻辑值而不是像素值,
若为 0(默认),将在单个步长和页面步长之间选择。

                                

4、 tickPosition: TickPosition
访问函数: TickPosition tickPosition() const; void setTickPosition(TickPosition);
描述刻度线的位置,默认为 QSlider::NoTicks(无刻度线),枚举 TickPosition 见下表

QSlider::TickPosition 枚举(无标志)
作用:描述刻度线的位置
成员说明
QSlider::NoTicks0无刻度线
QSlider::TicksBothSides3在两侧绘制刻度线
QSlider::TicksAbove1在(水平)滑块上方绘制刻度线
QSlider::TicksBelow2在(水平)滑块下方绘制刻度线
QSlider::TicksLeftTicksAbove在(垂直)滑块左侧绘制刻度线
QSlider::TicksRightTicksBelow在(垂直)滑块右侧绘制刻度线

八、 QDial 类
1、表盘的原理见下图

2、 QDial 类中的属性

1)、 QDial(QWidget *parent = Q_NULLPTR);    //构造函数
2)、 notchesVisible : bool    访问函数: bool notchesVisible () const;

void setNotchesVisible (bool);

是否显示凹槽(即刻度线),默认为 false(不显示)

3)、 notchSize : const int 访问函数: int notchSize () const;
返回凹槽的大小,凹槽的大小的原理见上图示例,默认为 1。

4)、 notchTarget : qreal 访问函数: qreal notchTarget() const; void setNotchTarget (double);
设置凹槽的像素数,默认为 3.7 像素,为了便于计算,可设置为 1。

5)、 wrapping : bool 访问函数: bool wrapping () const; void setWrapping (bool);
是否开启循环,默认为 false(未开启)

int nMin = 0;
int nMax = 200;
int nSingleStep = 20;
// 微调框
QSpinBox *pSpinBox = new QSpinBox(this);
pSpinBox->move(100, 50);
pSpinBox->setMinimum(nMin);  // 最小值
pSpinBox->setMaximum(nMax);  // 最大值
pSpinBox->setSingleStep(nSingleStep);  // 步长
// 滑动条
QSlider *pSlider = new QSlider(this);
pSlider->move(150, 50);
pSlider->setOrientation(Qt::Horizontal);  // 水平方向
pSlider->setMinimum(nMin);  // 最小值
pSlider->setMaximum(nMax);  // 最大值
pSlider->setSingleStep(nSingleStep);  // 步长		
// 连接信号槽(相互改变)
connect(pSpinBox, SIGNAL(valueChanged(int)), pSlider, SLOT(setValue(int)));
connect(pSlider, SIGNAL(valueChanged(int)), pSpinBox, SLOT(setValue(int)));
pSpinBox->setValue(10);

QSlider *pSlider = new QSlider(this);
pSlider->move(150, 50);
pSlider->setOrientation(Qt::Horizontal);  // 水平方向
pSlider->setMinimum(nMin);  // 最小值
pSlider->setMaximum(nMax);  // 最大值
pSlider->setSingleStep(nSingleStep); // 步长
// pSlider->setTickInterval(40);  // 设置刻度间隔
//描述刻度线的位置
pSlider->setTickPosition(QSlider::TicksAbove);  //QSlider::TicksAbove 刻度在上方

相关文章:

QScrollBar滚动条、QSlider滑块、 QDial表盘

QAbstractSlider 类、 QSCrollBar 类、 QSlider 类 一、 基本原理 1、 QAbstractSlider 继承自 QWidget,该类主要用于提供一个范围内的整数值, 2、 QAbstractSlider 类是 QScrollBar 类(滚动条)、 QSlider 类(滑块)、 QDial 类(表盘)的父类,因…...

Prometheus+Grafana可视化监控【MySQL状态】

文章目录 一、安装Docker二、安装MySQL数据库(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装mysqld_exporter七、Grafana添加MySQL监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果…...

五,编译定制rom并刷机实现硬改(二)

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...

Modbus协议详解3:数据帧格式 - RTU帧 ASCII帧的区别

Modbus既然是一种通信协议,那它就应该有规定的通信格式用于在设备之间的指令接收与识别。 本文就着重讲讲Modbus协议的RTU帧和ASCII帧。 Modbus帧在串行链路上的格式如下: 在上图的格式中: 1)地址域:指代的是子节点地址…...

认识数据分析

文章目录 1. 认识数据分析1.1 数据自身的三大属性1.2 建数仓 数据分析的工程技术1.3 数据分析解决问题的原理1.4 数据分析的具体流程1.5 数据的中心化和智能化1.6 数据分析的四种类型和六个方向 1. 认识数据分析 1.1 数据自身的三大属性 客观:用数字衡量和表现一件…...

Learn Prompt-ChatGPT 精选案例:写作博客

在 ChatGPT 的帮助下,文本内容的产出,尤其是撰写博客文章的过程得到了进一步的简化。你可以让 ChatGPT 激发你的灵感,也可以让它美化你的文章内容。 这里我们希望能通过prompt写出一篇以“ChatGPT对社会各行各业的影响”为主题的博客。 本页…...

《确保安全:PostgreSQL安全配置与最佳实践》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…...

Unity中Shader抓取屏幕并实现扭曲效果

文章目录 前言一、屏幕抓取,在上一篇文章已经写了二、实现抓取后的屏幕扭曲实现思路:1、屏幕扭曲要借助传入 UV 贴图进行扭曲2、传入贴图后在顶点着色器的输入参数处,传入一个 float2 uv : TEXCOORD,用于之后对扭曲贴图进行采样3、…...

深浅拷贝详解

深浅拷贝 经典真题 深拷贝和浅拷贝的区别?如何实现 深拷贝和浅拷贝概念 首先,我们需要明确深拷贝和浅拷贝的概念。 浅拷贝:只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷…...

@Scheduled 定时任务

Scheduled(cron"30 * * * * ?") 1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2.cron表达式各占位符解释: {秒数}{分钟} > 允许值范围: 0~59 ,不允许为空值,若值不合法,调度器将…...

丙烯酸共聚聚氯乙烯树脂

声明 本文是学习GB-T 42790-2023 丙烯酸共聚聚氯乙烯树脂. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了丙烯酸共聚聚氯乙烯树脂的外观、物化性能等技术要求,描述了相应的采样、试验方 法、检验规则、标志、包装、…...

Navicat导入Excel数据顺序变了

项目场景: Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中。但是,在导入的过程中,我们常会发现数据顺序出现了问题,导致数据错位,给数据的处理带来了极大的麻烦。 原因分析: 这个问题的…...

uni-app的生命周期

uni-app的生命周期包括应用生命周期和页面生命周期。 应用生命周期涵盖了整个uni-app应用的启动、运行和销毁过程,主要包括以下几个生命周期函数: onLaunch:应用初始化时触发,只触发一次。onShow:应用启动或从后台进…...

Vulnhub实战-DC9

前言 本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。 一、信息收集 对目标网络进行扫描 arp-scan -l 对目标进行端口扫描 nmap -sC -sV -oA dc-9 192.168.1.131 扫描出目标开放了22和80两个端口&a…...

软件设计模式系列之七——原型模式

1 模式的定义 原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新对象,而不是使用构造函数。原型模式将对象的创建委托给原型对象,通过克隆(复制)来生成新…...

PMP考试注意事项有哪些?

1. PMI明确规定:不允许考生使用自带文具,包括自带的笔、削笔刀、橡皮、笔袋、计算器和草稿纸等。 2. 本次考试考场内为每位考生配备2B铅笔、橡皮、计算器(若有需要)和草稿纸。如文具有缺损或考试过程中如需更换铅芯等,请向监考老师举手示意。…...

chartgpt+midjourney

chatGPT程序化生成故事 英文版脚本步骤 步骤一:在chatgpt中输入以下脚本,,标红为可变的文字,输入你想要的,目前是科幻,即科幻故事,你可以改为 fairy-tale,则写的是童话故事&#x…...

【SpringMVC】自定义注解

【SpringMVC】自定义注解 前言1. 什么是注解?2. 注解的用处3. 注解的原理1.1. Override1.2. SuppressWarnings 2. JDK元注解2.1. Retention2.2. Target2.3. Inherited2.4. Documented 3. 自定义注解3.1. 自定义注解的分类注解类 结语 自定义注解及其应用 前言 在J…...

【李沐深度学习笔记】数据操作实现

课程地址 数据操作实现p2 数据操作 首先导入PyTorch包(import torch),虽然叫PyTorch,但实际上要导入torch。 import torch张量 张量表示的是一个数值组成的数组,这个数组可以有很多个维度。 # 生成0-11的顺序序列构成的一维…...

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的…...

详解混合类型文件(Polyglot文件)的应用生成与检测

1. 引入 混合类型文件(Polyglot文件),是指一个文件,既可以是合法的A类型,也可以是合法的B类型。 比如参考3中的文件,是一个html文件,可以用浏览器正常打开;它也是一个一个.jar文件&…...

QT之QTableView的简介

QT之QTableView的简介 QTableView 是 Qt 框架中的一个类,用于显示和编辑表格数据。它提供了一个灵活的模型/视图架构,允许用户以不同的方式显示和编辑数据。 以下是 QTableView 的一些常用函数及其用法: 1)QTableView(QWidget *pa…...

学习记忆——宫殿篇——记忆宫殿——记忆桩——知识讲解

类比 假设这些桩子好比不同的交通工具,每一种交通工具都可以助我们到达目的地,那举现在就根据你的时间以及现实情况,选择最合适自己的交通工具即可,重点在于你要熟悉每种交通工具的用途不区别。桩子也是如此,把所有的桩…...

Python lambda匿名函数

视频版教程 Python3零基础7天入门实战视频教程 前面我们所学的函数定义,都是有函数名的。 我们现在学的lambda函数是没有名称的,也就是匿名函数。 我们在只需要一次性使用的函数的时候,就可以用lambda匿名函数,简单方便快捷。 …...

成绩统计(蓝桥杯)

成绩统计 题目描述 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。 请计算及格率和优秀率,用百分数…...

ETL与ELT理解

ETL ETL( Extract-Transform-Load),用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL模式适用于小数据量集。如果在转换过程…...

IntelliJ IDEA 2023 年下载、安装教程、好用插件推荐

文章目录 下载与安装IDEA常用插件推荐Alibaba Java Coding Guidelines(阿里巴巴Java开发规约)Key Promoter X(IDEA快捷键提示)Translation(翻译插件)Save Actions(优化保存插件)Codo…...

下载HTMLTestRunner并修改

目录 一. 下载HTMLTestRunner 二. 修改HTMLTestRunner 1. 修改内容 2. 修改原因 一. 下载HTMLTestRunner 下载报告模板地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载模块: 二. 修改HTMLTestRunner 将修改后的模块放到python安装目录下的..…...

C#回调函数学习1

回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。…...

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…...

手机网站设计思路/chatgpt网址

Ceph-dash是一款图形化展现Ceph状态的工具,并且部署起来非常简单(在monitor节点上进行部署),操作如下:# mkdir -p /ceph-dash # cd /ceph-dash/ # ls app config.influxdb.json Dockerfile s…...

久久建筑网会员/网站关键词优化公司哪家好

基本概念IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取, 它就通知该进程. IO多路复用适用如下场合:(1)当客户处理多个描述字时(一般是交互式输入和网络套接口), 必须使用I/O复用.(2)当一个客户同时处理多个套接口时, 而这种情况是可能的, 但很少出现.(3)如果…...

wordpress wrapper/百度一下你就知道官网首页

图像算法中会经常用到摄像机的畸变校正,有必要总结分析OpenCV中畸变校正方法,其中包括普通针孔相机模型和鱼眼相机模型fisheye两种畸变校正方法。 普通相机模型畸变校正函数针对OpenCV中的cv::initUndistortRectifyMap(),鱼眼相机模型畸变校正…...

上海什么做网站的公司比较好/浏览器下载安装

题目链接:http://acm.swust.edu.cn/#/problem/698/-1 1000(ms) 65535(kb) 1006 / 2689 用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间a[i] ,若由机器B 来处理,则需要时间b[i]。由于各作业的特点和机器的性能关系…...

wordpress搜索小工具/lol今日赛事直播

需求:点击某个标签,紧随其后的ul列表展开或者关闭并有transition效果。 难点:ul 里面的 li 数量未知,ul 高度不定,需要获取 li 数量乘以 li 高度然后计算出 ul 高度。 直接上代码: // 属性型指令&#xff0…...

中堂仿做网站/平面设计培训

1、加载父类,加载父类的静态属性和静态代码块 2、加载子类,加载子类的静态属性和静态代码块 3、初始化父类中的非静态属性并赋初值,执行父类非静态代码块,执行父类构造。 4、初始化子类中的非静态属性并赋初值,执行代码…...