代码块是什么?该如何使用?

  • 1、代码块的基本介绍
  • 2、代码块的好处
  • 3、普通代码块
  • 4、静态代码块
  • 5、类什么时候被加载!!
  • 6、创建一个对象时,在一个类中,调用顺序是怎么样的
  • 7、存在继承关系时候调用的顺序为

1、代码块的基本介绍

代码块又叫初始化块,属于类中的成员,即使类的一部分 类似于方法,将逻辑语句封装在方法提中,通过{ }包围起来。但和方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象或类显示调用,而是在加载类的时候或者创建对象的时候隐式调用。

基本语法
[修饰符]{
代码
};

注意:
1、修饰符可以选,要写的话也只能写 static
2、代码块分为两类,使用static的叫静态代码块,没有static的叫做普通代码块
3、代码中可以为任意逻辑语句例如:输入,输出,方法调用,循环,判断
4、 ; 号可以写上也可以省略

2、代码块的好处

1、对构造器功能的一种补充
2、如果多个构造器中都有重复的语句,可以放到代码块中,提高代码的复用性

三个构造器都有重复的语句,看起来特别的多余

public class codeblock01 {public static void main(String[] args) {book book = new book("数据结构与算法");System.out.println("========================");book book1 = new book("kali从入门到入狱", 100, "呀吖呀");}}class book{private String name;private double price;private String author;//3个构造器,构成了重载public book(String name) {System.out.println("书被打开了");System.out.println("书被合上了");System.out.println("构造器public book(String name)被调用");this.name = name;}public book(String name, double price) {System.out.println("书被打开了");System.out.println("书被合上了");this.name = name;this.price = price;}public book(String name, double price, String author) {System.out.println("书被打开了");System.out.println("书被合上了");System.out.println("构造器public book(String name, double price, String author)被调用");this.name = name;this.price = price;this.author = author;}
}

可以把一样的语句放到一个代码块中即可当我们不管调用哪个构造器,创建对象,都会调用代码块中的代码

3、普通代码块


public class codeblock01 {public static void main(String[] args) {book book = new book("数据结构与算法");System.out.println("========================");book book1 = new book("kali从入门到入狱", 100, "呀吖呀");}}class book{private String name;private double price;private String author;//3个构造器,构成了重载//三个构造器都有重复的语句,看起来特别的多余//可以把一样的语句放到一个代码块中即可{System.out.println("书被打开了");System.out.println("书被合上了");}public book(String name) {//System.out.println("书被打开了");//System.out.println("书被合上了");System.out.println("构造器public book(String name)被调用");this.name = name;}public book(String name, double price) {//System.out.println("书被打开了");//ystem.out.println("书被合上了");this.name = name;this.price = price;}public book(String name, double price, String author) {//System.out.println("书被打开了");//System.out.println("书被合上了");System.out.println("构造器public book(String name, double price, String author)被调用");this.name = name;this.price = price;this.author = author;}
}

这个代码的运行结果都是:

说明:代码块的调用是优先于构造器的!

4、静态代码块

static代码块叫静态代码块,作用是对类进行初始化它随着类的加载进行初始化,而且随着类的加载而被执行并且只会执行一次,如果是普通代码块,每次创建一个对象就执行一次。

先看一段代码

public class codeblock02 {public static void main(String[] args) {A a = new A();}
}
class A{//静态代码块static {System.out.println("A的静态代码块正在被执行");}
}

执行结果为

得到结论
创建对象实例的时候也就是new的时候。

我们在让A类去继承B类

public class codeblock02 {public static void main(String[] args) {A a = new A();}
}
class A extends B{//静态代码块static {System.out.println("A的静态代码块正在被执行");}
}
class B {static {System.out.println("B的静态代码块正在被执行");}
}

得到结论
创建子类对象实例,父类也会被加载,父类先被加载,子类后被加载。

看这段代码

public class codeblock02 {public static void main(String[] args) {System.out.println(C.n1);}
}
class C{public static int n1 = 10000;static {System.out.println("C的静态代码块正在被执行");}
}

执行结果为

得到结论
使用类的静态成员时,例如:静态成员,静态方法。

看这段代码

public class codeblock02 {public static void main(String[] args) {D d = new D();D d1 = new D();}
}class D{static {System.out.println("D的静态代码块被调用");}{System.out.println("D的普通代码块被调用");}
}

输出的结果

说明
静态代码块作用是对类进行初始化它随着类的加载进行初始化,而且随着累的加载而被执行并且只会执行一次,
如果是普通代码块,每次创建一个对象就执行一次。

public class codeblock02 {public static void main(String[] args) {System.out.println(D.n1);}
}class D{public static int n1 = 10000;static {System.out.println("D的静态代码块被调用");}{System.out.println("D的普通代码块被调用");}
}

输出结果为

说明
普通代码块需要在new对象的时候才会被调用,而且是每次创建新对象就会被调用。
而静态代码块,只要类加载了就会被调用。

5、类什么时候被加载!!

  • 1、创建对象实例的时候也就是new的时候
  • 2、创建子类对象实例,父类也会被加载,父类先被加载,子类后被加载
  • 3、使用类的静态成员时,例如:静态成员,静态方法

6、创建一个对象时,在一个类中,调用顺序是怎么样的

  1. 先调用静态代码块和静态属性初始化。静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码和多个静态变量初始化,就按照定义的顺序执行
  2. 调用普通代码块和普通属性的初始化。普通代码块和普通属性的优先级一样,这个和上面的一样
  3. 最后在调用构造方法

看代码

public class codeblock03 {public static void main(String[] args) {AS as = new AS();}}
class AS{static {System.out.println("AS的静态代码块被调用");}private static int n1 = getN1();public static int getN1(){System.out.println("getN1方法被调用");return 10000;}private int n2 = getN2();public int getN2(){System.out.println("getN2方法被调用");return 90000;}{System.out.println("AS的普通代码块被调用");}public AS(){System.out.println("无参构造器被调用");}
}

运行结果为

7、存在继承关系时候调用的顺序为

  1. 父类的静态代码块和静态属性(优先级一样)
  2. 子类的静态代码块和静态属性(优先级一样)
  3. 父类的普通代码块和普通属性初始化
  4. 父类的构造方法
  5. 子类的普通代码块和子类的普通属性初始化
  6. 子类的构造方法

注意: 静态代码块只能直接调用静态成员,普通代码块可以调用任意成员

public class codeblock04 {public static void main(String[] args) {ZL zl = new ZL();}
}class ZL extends FL{private static int A = getA();private int A1 = getA1();public static int  getA(){System.out.println("子类的静态方法被调用");return 111;}public int getA1(){System.out.println("子类的普通方法被调用");return 222;}static {System.out.println("子类的静态代码块被调用");}{System.out.println("子类的普通代码块被调用");}public ZL(){System.out.println("子类的构造器被调用");}
}class FL{private static int B = getB();private int B1 = getB1();public static int getB(){System.out.println("FL父类的静态方法被调用");return 888;}public int getB1(){System.out.println("FL父类的普通方法被调用");return 999;}static {System.out.println("FL父类的静态代码块被调用");}{System.out.println("FL父类的普通代码块被调用");}public FL() {System.out.println("FL父类的构造器被调用");}
}

对代码进行分析

运行结果为:

代码块是什么?该如何使用?相关推荐

  1. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  2. 【经验】向word中插入格式化的代码块

    参考博客:如何在word中插入代码块 1.打开http://www.planetb.ca/syntax-highlight-word网站 语法高亮显示Word文档中的代码 2.将你的代码复制进去,选择 ...

  3. android studio同步代码块,Android Studio快捷键大全

    Ctrl+P 提示有效说明参数 Ait + Enter 提示 Ctrl+Ait+L 格式化 Ctrl+Y 删除本行 Alt + Shift + Up/Down 上下移动本行代码 Alt + Ctrl ...

  4. Java代码块总结(速读版)

    **代码块必须直接定义在类中**,有两种:静态代码块 和 非静态代码块 静态代码块是在类(class文件)加载内存时执行,而非静态代码块是在创建对象(new 类名();)时执行. public cla ...

  5. Xcode可重用代码块code snippets

    一. 关于code snippets 通过Xcode的重用代码块(code snippets)可快速输入预设好的常用代码模板,如通过键入 hystrong 系统会直接替代为 @property(non ...

  6. Xcode快捷键及代码块

    2017-02-16 吴白 CocoaChina 手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷.优秀的程序员总是这么一群人,他们不拘于现状,不固步自封,他们喜欢新奇的事,他们把自己发挥 ...

  7. java 静态代码块 多线程,Java多线程编程笔记10:单例模式

    立即加载:"饿汉模式" 立即加载就是指使用类的时候已经将对象创建完毕,常见的实现方法就是直接new实例化.也就是在调用方法前,实例就被创建了.示例代码如下所示: class MyO ...

  8. 控件包含代码块,因此无法修改控件集合

    文章转载至:  http://www.olnote.com/itlife/note/100000003.aspx 控件包含代码块(即<% ... %>),因此无法修改控件集合. 说明: 执 ...

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

  10. java修饰静态_Java-static修饰符及静态代码块

    在java面向对象设计的类中,经常使用到static修饰符修饰变量,现在来看看static修饰符作用和特点 一:static修饰的变量可以直接通过类名.的方式直接调用 public class sta ...

最新文章

  1. 2022 408 大纲变动
  2. css3绘制环形_HTML5 + CSS3 gt;gt;gt; 015
  3. 解决 Error:No suitable device found: no device found for connection quot;System eth0quot;
  4. django中如何优雅的处理一个多按钮的表单
  5. 获取当前绝对工作目录与被执行文件的绝对目录
  6. RSA 公钥加密——私钥解密
  7. 《LINUX内核设计与实现》第五章学习总结
  8. c语言 error 9,C语言求助(_) c:9: error: syntax error before '[' token
  9. 最详细的Eigen笔记
  10. python人脸识别库_用python库face_recognition进行人脸识别
  11. 2021年山东省安全员C证报名考试及山东省安全员C证操作证考试
  12. 【启动】Windows上启动图形化软件,报错: 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-1-1-0.dll...
  13. 【keil5调试】warning:enumerated type mixed with another type
  14. 关于数据库系统的查询处理
  15. 学编程需要什么基础?
  16. 余三码的优点及其与8421码的对比
  17. 如何利用ewomail搭建邮件服务器
  18. 文件is not found in the curren directory or on the Matlab path
  19. 一种可以使汽车气缸密封并润滑的机油添加剂
  20. 2013-3-15.3

热门文章

  1. Scala开发教程(16): 没有“break”和“continue”的日子
  2. 查找:对于长度为n的线性表最坏查找次数
  3. 数字图像处理 采样定理_数字图像处理基础知识总结
  4. qtitanribbon注册_点云平台之QtitanRibbon
  5. y空间兑换代码_loam代码解析3
  6. 机器人与目标匹配问题及解决 虚拟动力学 纳什平衡 Q-Learning
  7. 数据从hadoop到oracle,如何向 hadoop 导入数据
  8. vue 图片被背景色覆盖_如何使用纯css3打造有点意思的故障艺术(附React/Vue加强组件版)...
  9. mysql olap 函数_Mysql中的窗口函数
  10. 蓝宝石显卡bios_这操作竟能让显卡性能暴涨?原来不是黑科技,小白都会