直接在类中定义且没有加static关键字的代码块称为{}构造代码块。

构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。

注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 > 构造代码块  > 构造函数;

下面我们来举几个例子说明一切

demo1:构造方法

  1. public class Test {
  2. static {
  3. System.out.println("静态块");
  4. }
  5. {
  6. System.out.println("构造块,在类中定义");
  7. }
  8. public Test() {
  9. System.out.println("构造方法执行");
  10. }
  11. public static void main(String[] args) {
  12. new Test();
  13. new Test();
  14. }
  15. }
  16. /*
  17. 静态块
  18. 构造块,在类中定义
  19. 构造方法执行
  20. 构造块,在类中定义
  21. 构造方法执行
  22. */

demo2:普通代码块

  1. /*普通代码块:在方法或语句中出现的{}就称为普通代码块。
  2. 普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”*/
  3. public class Test {
  4. public static void main(String[] args) {
  5. {
  6. int x = 3;
  7. System.out.println("1,普通代码块内的变量x=" + x);
  8. }
  9. int x = 1;
  10. System.out.println("主方法内的变量x=" + x);
  11. {
  12. int y = 7;
  13. System.out.println("2,普通代码块内的变量y=" + y);
  14. }
  15. }
  16. }
  17. /*
  18. 1,普通代码块内的变量x=3
  19. 主方法内的变量x=1
  20. 2,普通代码块内的变量y=7
  21. */

demo3:构造代码块

  1. /*构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
  2. 构造代码块在创建对象时被调用,每次创建对象都会被调用,
  3. 并且构造代码块的执行次序优先于类构造函数。*/
  4. public class Test {
  5. {
  6. System.out.println("第一代码块");
  7. }
  8. public Test() {
  9. System.out.println("构造方法");
  10. }
  11. {
  12. System.out.println("第二构造块");
  13. }
  14. public static void main(String[] args) {
  15. new Test();
  16. new Test();
  17. new Test();
  18. }
  19. }
  20. /*
  21. 第一代码块
  22. 第二构造块
  23. 构造方法
  24. 第一代码块
  25. 第二构造块
  26. 构造方法
  27. 第一代码块
  28. 第二构造块
  29. 构造方法
  30. */

demo4:静态代码块

  1. /*静态代码块:在java中使用static关键字声明的代码块。
  2. 静态块用于初始化类,为类的属性初始化。
  3. 每个静态代码块只会执行一次。
  4. 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
  5. 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
  6. 注意:1 静态代码块不能存在于任何方法体内。
  7. 2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。*/
  8. class Code {
  9. {
  10. System.out.println("Code的构造块");
  11. }
  12. static {
  13. System.out.println("Code的静态代码块");
  14. }
  15. public Code() {
  16. System.out.println("Code的构造方法");
  17. }
  18. }
  19. public class Test {
  20. {
  21. System.out.println("Test的构造块");
  22. }
  23. static {
  24. System.out.println("Test的静态代码块");
  25. }
  26. public Test() {
  27. System.out.println("Test的构造方法");
  28. }
  29. public static void main(String[] args) {
  30. System.out.println("Test的主方法");
  31. new Code();
  32. new Code();
  33. new Test();
  34. new Test();
  35. }
  36. }
  37. /*
  38. Test的静态代码块
  39. Test的主方法
  40. Code的静态代码块
  41. Code的构造块
  42. Code的构造方法
  43. Code的构造块
  44. Code的构造方法
  45. Test的构造块
  46. Test的构造方法
  47. Test的构造块
  48. Test的构造方法
  49. */

参考:http://www.cnblogs.com/sophine/p/3531282.html

本文链接:https://liuyanzhao.com/5303.html

Java中静态代码块、构造代码块的区别相关推荐

  1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序

    1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...

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

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

  3. java静态代码块、静态方法、静态变量、构造代码块、普通代码块、成员变量执行顺序

    package smartt.styy.auth.model.voRsp;public class Test {static {String test5="555";//局部变量t ...

  4. 静态代码块 构造代码块 构造方法的执行顺序

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 执行顺序: 静态代码块>构造代码块>构造方法体 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构 ...

  5. java 静态块初始化_简单了解java中静态初始化块的执行顺序

    这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在java中,其应该是先于所有的方法执行. ...

  6. 浅谈 JAVA中静态初始化块和非静态初始化块的区别

    众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: static{} 执 ...

  7. java中怎么实现指数幂,java中幂指数值的运算代码解析

    说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...

  8. java怎么计算幂函数,java中幂指数值的运算代码解析

    说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...

  9. java中静态变量和静态方法分别有什么特点?

    java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...

  10. Java中静态变量与静态方法的继承

    看下面的代码: public class Demo {public static void main(String[] args) {// 子类SonB继承父类Father,子类可以获取父类的所有属性 ...

最新文章

  1. 红米ac2100有ipv6吗_#年末#白里透红,跑得相当快,红米AC2100体验
  2. 神经网络与机器学习 笔记—小规模和大规模学习问题
  3. CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介、使用方法、案例应用之详细攻略
  4. 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
  5. 每天一道LeetCode-----回文链表
  6. 一个故事 让你看懂“区块链”
  7. slice与substring与substr
  8. [软件工程-设计模式] GRASP软件设计的模式和原则
  9. HDU-1874畅通工程续( 最短路)
  10. 2.React学习笔记----修改模板并使用Ant Design
  11. 智能优化算法:蜻蜓优化算法-附代码
  12. 用jdbc操作mysql 实现注册功能_JDBC链接Mysql数据库---实现登陆注册功能
  13. 获取url路径上的参数,(避免中文乱码)
  14. 优秀程序员 分析提高能力 程序进阶
  15. linux 怎么格式化u盘写保护,u盘写保护如何解除?去掉保护模式的具体方法
  16. android 汉字字母排序,android recycleView自定义字母检索A-Z排序滑动通讯录汉字英文相互转换...
  17. curl DNS解析失败crash问题
  18. 【老九君】【Java】集合框架
  19. APP运营中地推应该怎么做
  20. 470万条12306用户信息遭泄露

热门文章

  1. 编辑请求内容 Charles
  2. Linux学习笔记9_终端提示符编辑方法(修改颜色,路径,时间)
  3. LintCode_13 字符串查找
  4. centos 7 64位虚机上android4环境运行
  5. 初识THINKPHP--关于路径的问题(xampp下的htdocs为根目录)
  6. 基于 cm-11 源码编译模拟器
  7. maven 配置tomcat 插件
  8. 取得客户端的机器名,域名,登陆用户名...转
  9. php强制浏览器不缓存,php强制浏览器不缓存和设置浏览器缓存
  10. plsql查询无结果集_何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督...