前言

今天分享的是关于在程序中代码的执行顺序,零零散散写了很多随记,总结起来蛮费时间的,希望大家给个关注,多多关注新人哈,废话不多说,还是老规矩,代码穿插注释的总结方式。

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、构造代码块快、构造函数等的执行顺序相关推荐

  1. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    构造函数 public HelloA(){//构造函数} 关于构造函数,以下几点要注意: 1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的. 2.构造函数的作用是 ...

  2. 静态代码块、构造代码块、构造函数、普通代码块的区别

    本文转自:IT可乐的博客 在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序. 1.静态代码块 ①.格式 在java ...

  3. 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 ...

  4. 构造函数 构造代码块_构造函数必须没有代码

    构造函数 构造代码块 构造函数中应完成多少工作? 在构造函数内部进行一些计算然后封装结果似乎是合理的. 这样,当对象方法需要结果时,我们将准备好它们. 听起来是个好方法? 不,这不对. 这是一个坏主意 ...

  5. Java基础——构造代码块

    为什么80%的码农都做不了架构师?>>>    看一段代码先 <!-- lang: java --> public class Test { // public Test ...

  6. java子类代码块_java中父类子类静态代码块、构造代码块执行顺序

    父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...

  7. 静态代码块、非静态代码块、构造函数三者执行顺序

    主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序. 如有错误,欢迎指出. 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行. 在创建一个对象的时候会执行非静态代码块和构造函 ...

  8. Java中构造函数,静态代码块,构造代码块的执行顺序

    静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...

  9. [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)

    参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...

最新文章

  1. gcc版本降级/升级
  2. 获取IPhone相册中图片的方法(包括获取所有图片)
  3. cx_Oracle怎么打包,cx_Oracle 在执行包文件 function 时有多个出参该如何获取
  4. MySQL面试 - 读写分离
  5. github代码的提交与下载
  6. hadoop框架分析
  7. C#之Xml去掉前面的空格
  8. 如何在 Mac 上安排电子邮件?
  9. 管家婆系统怎么创建提醒服务器,管家婆辉煌Ⅱ++10.1 -管家婆软件官方网站
  10. 2019-12-19
  11. word添加引用及自动更新的方法
  12. [ZT]:fancy设置latex页眉页脚
  13. 高通Android平台开发
  14. Git服务器搭建及仓库克隆
  15. 区块链社区先导者Bitwork正式宣布落户香港
  16. Java开发面试题目,Java面试网络问题
  17. 思维导图---“计算机硬件系统”练手
  18. linux-常用命令整理(系统)
  19. spring integration-概述
  20. 2023最新红盟云卡开源发卡网站源码+功能很强大

热门文章

  1. S2SH水费管理系统-JAVA【计算机毕业设计、源码、开题报告】
  2. 2020 ViVO面试题
  3. 滤波电容,小电容滤高频,大电容滤低频的理解
  4. 联想凌拓官宣:陆大昕为首席执行官,“掌舵人”就此诞生!
  5. 《只管去做》读书笔记
  6. 企业社交网络和在线社区市场现状研究分析-
  7. IE 错误的数量词(正则报错)
  8. SCN Headroom
  9. 上海驾校科目二考试的几个至关重要技巧
  10. 计算机系统中中断源怎么分类,中断优先级