Java中继承执行顺序
目录
继承执行顺序
类中的资源分类:
在子类中创建main方法
在无关类中创建main方法
拓展
代码块
权限修饰符
继承执行顺序
类中的资源分类:
静态成员变量,
静态代码块,
静态方法,
非静态成员变量,
非静态代码块。
非静态方法,
构造方法
main方法
其中 静态资源和main() 执行顺序固定:
1,静态资源:静态成员变量和静态代码块按书写顺序执行,
一般在加载类文件时执行
2,main方法
其他资源的执行时间:
new对象时,构造方法和非静态成员方法和非静态代码块
1,先执行非静态成员变量和非静态代码块:按书写顺序执行
2,构造方法
2.1,先执行父类的非静态代码块,再执行构造方法
2.2,之后执行子类的静态代码块,在执行构造方法
静态成员方法和非静态成员方法,调用的时候才执行
在子类中创建main方法
1,先加载类文件:
1.1,先加载父类的类文件,再加载子类的类文件
1.2,类中类文件加载顺序
1.2.1,先加载声明
只加载静态成员变量的声明,不加载静态成员方法的声明
只加载声明不加载值,无论其声明是否赋值
不加载静态代码块中的变量,因为其相当于局部变量,用完就销毁
静态代码块 和 非静态代码块 相当于方法,{ }里面的内容相当于方法体代码,
其中声明的变量是局部变量,执行完代码块就会销毁
1.2.2,静态代码块和静态变量的执行顺序,是按照书写顺序来的
此处,静态变量的执行 就是 为静态变量赋值
2,执行main方法
2.1,main方法中的代码块,按顺序执行
2.2,执行new对象时,
2.2.1,先访问父类的构造方法,再访问子类的构造方法
2.2.2,访问构造方法时,先访问类中的非静态代码块,然后执行构造方法的方法体代码
详细步骤:执行new子类对象时,
1,先跳转到子类的构造方法的声明上,
2,什么也不执行,跳转到父类的构造方法声明上,
3,什么也不执行,先执行父类的非静态代码,按书写顺序执行,
此时,会初始化成员变量
4,执行完毕父类的非静态代码后,才开始执行构造方法的方法体代码,
此时,会使用 传入的参数 为变量 赋值
5,执行完后跳转到子类的构造方法上,
6,什么也不执行,先执行子类的非静态代码,
此时,会初始化成员变量
7,执行完毕父类的非静态代码之后,才执行子类的构造方法
此时,会使用 传入的参数 为变量 赋值
在无关类中创建main方法
1,先加载main()所在类的类文件,
如果该类静态资源中有与其它类相关的调用,就加载其他类
2,执行main()
2.1,按书写顺序执行代码
2.2,new子类对象时,具体参照上面:
2.2.1,先加载父类的类文件,再加载子类的类文件
2.2.2,先执行父类的非静态代码,再执行父类的构造方法
2.2.3,先执行子类的非静态代码,再执行子类的构造方法
拓展
代码块
代码块相当于一个方法,{ }定义的变量相当于局部变量, 因此
1,代码块中的声明的变量用完即毁
2,代码块中变量不能用权限修饰符修饰
3,使用 静态/非静态代码块 时,最好 先在外面声明变量,然后再在代码块中给变量赋值
权限修饰符
权限修饰符,针对的是访问的位置
public: 所有地方都能访问
protected: 包修饰符,可以在同个包下的任意位置访问
子类修饰符,可以被所有子类访问到
default: 包修饰符,可以在同个包下的任意位置访问
private: 只能被本类访问
因此在不同的类中,类对象能够访问到的字段内容不一样
特例:protected比较特殊
protected修饰的内容,在同个包下和其他修饰符一样,但在不同包下的子类中,想要访问就需要特定的方式:
错误方式:
在不同包下的子类中,通过创建父类对象baseClass,访问protected修饰的内容,编译器会报错,无法解析该字段
正确方式:
通过 创建子类的对象,通过子类对象访问 父类protected修饰的内容
protected修饰符 特例原因 讲解: 为什么子类中不能访问另一个包中父类中的protected方法?_Yang Special的博客-CSDN博客_protected不同包的子类能不能访问父类
Java中继承执行顺序相关推荐
- java中程序执行顺序
①在java中执行顺序 一 静态初始化块 二 非静态初始化块 三 构造器 四 父类构造器 ② java中的赋值顺序 一 静态初始化块直接赋值 二 非静态初始化块直接赋值 三 父类继承的属性已赋值 四 ...
- java 继承执行顺序
java 中 继承的 执行 顺序 public class A {public A(){System.out.println("A 无参");}public A(int a){Sy ...
- java中parent结构_详解java中继承关系类加载顺序问题
详解java中继承关系类加载顺序问题 实例代码: /** * Created by fei on 2017/5/31. */ public class SonClass extends ParentC ...
- Java中控制多线程顺序执行
Java中控制多线程顺序执行 一.概述 二.普通示例 三.控制示例 3.1.设置线程优先级 3.2.使用线程类的join() 3.2.1.在主线程join() 3.2.2.在子线程join() 3.3 ...
- 【总结篇】继承中的执行顺序
作者:✿✿ xxxflower. ✿✿ <总结篇> 这个专题就记录一些自己在练习中所学习到的. 包括一些不熟悉的芝士点和一些小的细节. 今天我们来总结一下继承中的执行顺序. 首先执行静态的 ...
- java的for的执行顺序_对java for 循环执行顺序的详解
如下所示: for(表达式1;表达式2;表达式3) { //循环体 } 先执行"表达式1",再进行"表达式2"的判断,判断为真则执行 "循环体&quo ...
- java代码块执行顺序_Java笔记 | Java代码块执行顺序测试
最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...
- java中重载 参数顺序_Java方法中的参数太多,第4部分:重载
java中重载 参数顺序 期望将过多的参数传递给Java方法的问题之一是,该方法的客户端很难确定它们是否以适当的顺序传递了适当的值. 在以前的文章中,我描述了如何使用自定义类型 , 参数对象和构建器来 ...
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
最新文章
- 4g内存 mysql_4G内存 mysql数据库
- debug —— C语言 编译时候进行debug的调试
- sql语句相似度统计的说明
- Compass 更智能的搜索引擎(3)--高亮,排序,过滤以及各种搜索
- Asp.net 面向接口可扩展框架之类型转化基础服务
- java pojo使用_在POJO中使用ThreadLocal进行Java嵌套事务
- linux 卸载skype,如何将Skype与Ubuntu Unity集成 | MOS86
- 如何在手机上安装Ubuntu Touch 13.10
- 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
- mysql的驱动jar包_各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)
- 关于微博api返回内容不全内容
- 新丰机器人_韶关新丰:智能巡检开启配电网运维新模式
- 使用MATLAB Mapping工具箱创建和编辑地图
- python 实验八 函数 (上)
- 笔记本手机都能用,轻松实现100W快充,AOHi 100W氮化镓PD 充电器体验
- Kali与编程:小白黑客是如何安装Centos8的?(下节更精彩)
- php7的新特性有哪些,php7新特性有哪些?
- 1004: 惠民工程 (2013年中南大学研究生复试机试 )
- 解决无字幕问题--射手影音VS迅雷影音
- java dump文件怎么生成和分析-JMAP用法
热门文章
- python利用you-get轻松下载B站视频
- POI(excel) - WorkBook和Sheet
- 通过RS232串口调试服务器
- android2.2 倒计时程序eclipse,Android倒计时控件
- linux ln 文件夹,Linux ln 命令
- 从学习C++到用C++做外挂
- 2020会考计算机成绩查询,初中会考成绩查询2020
- 关于泛型的super与extends 的set方法
- Smarty模板技术
- php smarty模板遍历,smarty模板中for循环的扩展插件_PHP教程