Static、构造代码块快、构造函数等的执行顺序
前言
今天分享的是关于在程序中代码的执行顺序,零零散散写了很多随记,总结起来蛮费时间的,希望大家给个关注,多多关注新人哈,废话不多说,还是老规矩,代码穿插注释的总结方式。
1、代码执行顺序
/*** 这道题还是蛮复杂的,如果这道题理解了,基本以后遇到的大部分代码执行顺序问题都会迎刃而解* * 关于执行顺序的一些笔记:* 1.静态块:用static申明,JVM加载类时执行,仅执行一次; * 2.构造块:类中直接用{}定义,每一次创建对象时执行;* 3.两个类执行顺序优先级:父类的static成员变量 -> 子类的static成员变量 -> * 父类的成员变量 -> 父类构造 -> 子类成员变量 -> 子类构造; * 4.一个类执行顺序优先级:main()>静态块>构造块>构造方法; * 5.static只会加载一次,所以通俗点讲第一次new的时候,所有的static都先会被全部载入* (以后再有new都会忽略), 进行默认初始化。再从上往下进行显示初始化。静态代码块和静态* 成员变量没有先后之分,谁在上,谁就先初始化; * 6.a:静态代码块不能存在于任何方法体内;b:静态代码块不能直接访问静态实例变量和实例方法,* 需要通过类的实例对象来访问。* * 解题思路:* 关于这道题:首先会先执行main()方法,之后无论是静态整型变量还是整型成员变量都会初始化成零,* 之后执行new StaticTest("init")创建对象,可是在此之前需要按照代码赋的值重新进行初* 始化,顺序是从上到下,由此执行new StaticTest("t1"),可是在实例化构造函数之前,需要* 先执行成员变量j的初始化,因此第一个输出:(1:j i=0 n=0),构造快的执行顺序又在构造方法之前,* 因此第二个输出:(2:构造块 i=1 n=1),之后执行构造方法,因此第三个输出:(3:t1 i=2 n=2),* 到此t1对象创建完毕,t2同t1,因此第四个输出:(4:j i=3 n=3),第五个输出:(5:构造块 i=4 n=4),* 第六个输出:(6:t2 i=5 n=5),之后执行i的初始化,因此第七个输出:(7:i i=6 n=6),之后* n变成99,之后执行静态代码块,因此第八个输出:(8:静态块 i=7 n=99),这是菜真正执行* new StaticTest("init")创建对象t,可在实例化构造函数之前,需要初始化成员变量j,因此* 第九个输出:(9:j i=8 n=100),第十个输出:(10:构造块 i=9 n=101),第十一个输出:* (11:init i=10 n=102),到此结束。呼!!!* @author isolated star**/
public class StaticTest { public static int k = 0; public static StaticTest t1 = new StaticTest("t1"); public static StaticTest t2 = new StaticTest("t2"); public static int i = print("i"); public static int n = 99; public int j = print("j"); { print("构造块"); } static{ print("静态块"); } public StaticTest(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++n; ++i; } public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; return ++n; } public static void main(String[] args) { new StaticTest("init"); } }
上面的注释已经解释很清楚了,这也是我闲来无事看到的一个题,感觉还是挺有难度的,如果没做够的道友,不妨去"牛客网"刷刷题,那里关于这种类型的题还有很多。
接下来说一下每个代码块的作用:
- 局部代码快:限定变量生命周期,及早释放,提高内存利用率。
- 构造代码块:实际用处不大,主要是把所有构造方法中相同的内容都拿出来放在构造代码块中,因为在每次创建对象的时候,构造代码块都会优先构造方法先执行。
- 静态代码块:随着类的加载而加载,用来给类初始化,一般用来加载驱动(注:如果类中***只有***主方法和静态代码块,静态代码块会优先于主方法执行)。
- 同步代码块:用于多线程中。
2、总结
以上就是我对代码执行顺序的一些基本理解,如有不对之处,希望诸君不吝赐教。
我自己在学习java基础的时候也记录过十一个编码的小练习题,都有题目和答案,有兴趣的可以下载
https://download.csdn.net/download/zcy92949/10369030
版权声明:本文出自孤星卟哭的博客,原创文章,转载请注明出处。 https://blog.csdn.net/zcy92949/article/details/80074839
Static、构造代码块快、构造函数等的执行顺序相关推荐
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
构造函数 public HelloA(){//构造函数} 关于构造函数,以下几点要注意: 1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的. 2.构造函数的作用是 ...
- 静态代码块、构造代码块、构造函数、普通代码块的区别
本文转自:IT可乐的博客 在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java ...
- java gui构造工具_Java Web框架 静态代码块、构造代码块、构造函数、普通代码块 执行顺序 Decompiler JD-GUI 反编译工具...
1.下载jd-gui-windows-1.4.0. http://jd.benow.ca/ 2.通过jd-gui.exe查看.class文件,用于分析类编译过程. 3.源文件. // 加载相应的 He ...
- 构造函数 构造代码块_构造函数必须没有代码
构造函数 构造代码块 构造函数中应完成多少工作? 在构造函数内部进行一些计算然后封装结果似乎是合理的. 这样,当对象方法需要结果时,我们将准备好它们. 听起来是个好方法? 不,这不对. 这是一个坏主意 ...
- Java基础——构造代码块
为什么80%的码农都做不了架构师?>>> 看一段代码先 <!-- lang: java --> public class Test { // public Test ...
- java子类代码块_java中父类子类静态代码块、构造代码块执行顺序
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...
- 静态代码块、非静态代码块、构造函数三者执行顺序
主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序. 如有错误,欢迎指出. 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行. 在创建一个对象的时候会执行非静态代码块和构造函 ...
- Java中构造函数,静态代码块,构造代码块的执行顺序
静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...
- [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)
参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...
最新文章
- gcc版本降级/升级
- 获取IPhone相册中图片的方法(包括获取所有图片)
- cx_Oracle怎么打包,cx_Oracle 在执行包文件 function 时有多个出参该如何获取
- MySQL面试 - 读写分离
- github代码的提交与下载
- hadoop框架分析
- C#之Xml去掉前面的空格
- 如何在 Mac 上安排电子邮件?
- 管家婆系统怎么创建提醒服务器,管家婆辉煌Ⅱ++10.1 -管家婆软件官方网站
- 2019-12-19
- word添加引用及自动更新的方法
- [ZT]:fancy设置latex页眉页脚
- 高通Android平台开发
- Git服务器搭建及仓库克隆
- 区块链社区先导者Bitwork正式宣布落户香港
- Java开发面试题目,Java面试网络问题
- 思维导图---“计算机硬件系统”练手
- linux-常用命令整理(系统)
- spring integration-概述
- 2023最新红盟云卡开源发卡网站源码+功能很强大