1、本次的预计讲解的知识
主要观察普通代码块、构造块、静态块的主要的作用。
2、具体内容
在程序编写的过程之中可以直接使用“{}”定义一段语句,那么根据此部分定义定义的位置以及声明的关键字的不同,代码块一共可以分为四种代码块:普通代码块、构造块、静态块、同步代码块(等到多线程的时候)。
尽可能在你写代码的过程之中不要去使用代码块。
2.1、普通代码快
如果说一个代码块写在了方法里面,那么就称它为普通代码块。
范例:观察如下代码
public class TextDemo { public static void main(String[] args) { if(true) {//条件一定满足 int num = 10; //局部变量 System.out.println("num:" + num); } int num =100; //全局变量 System.out.println("num:" + num); } } |
如果现在取消了if语句。
public class TextDemo { public static void main(String[] args) { { //普通代码块 int num = 10; //局部变量 System.out.println("num:" + num); } int num =100; //全局变量 System.out.println("num:" + num); } } |
实际上普通代码块就是为了防止在方法里面编写代码过多时有可能产生变量重名,对一个方法的代码进行局部的分割。在以后编写代码的时候,一个方法里面的代码别写太长。
2.2、构造块
如果说现在将一个代码块写在了一个类里面,那么这个代码块就称为构造块。
范例:定义构造块
class Book{ public Book () {//构造方法 System.out.println("【A】Book里面的构造方法"); } { //将代码写在了类里面 System.out.println("【B】Book里面的构造块"); } } public class TextDemo { public static void main(String[] args) { new Book(); } } |
此时实例化Book类对象是,虽然执行的是Book类的构造方法,但是最终的结果发现构造块也被执行了,并且构造块的调用优先于构造方法执行。
如果现在产生了多个Book类的对象,那么构造块将会被执行多次。
2.3、静态块
如果一个代码块使用了static进行定义的话,那么就称为静态块,可是静态块的时候需要分为两种情况。
情况一:在非主类中使用
class Book{ public Book () {//构造方法 System.out.println("【A】Book里面的构造方法"); } { //将代码写在了类里面 System.out.println("【B】Book里面的构造块"); } static{ System.out.println("【C】Book里面的静态块"); } } public class TextDemo { public static void main(String[] args) { new Book(); new Book(); new Book(); new Book(); } } |
现在发现静态块将优先于构造块执行,而且不管有多少个实例化对象,静态块只执行一次,它的主要功能是为了类中的static属性初始化的。
class Book{ static String msg; public Book () {//构造方法 System.out.println("【A】Book里面的构造方法"); } { //将代码写在了类里面 System.out.println("【B】Book里面的构造块"); } static{ msg = "Hello".substring(0, 2) ; System.out.println("【C】Book里面的静态块"); } } public class TextDemo { public static void main(String[] args) { new Book(); new Book(); new Book(); new Book(); System.out.println(Book.msg); } } |
情况二:在主类中定义
public class TextDemo { static{ System.out.println("*************"); } public static void main(String[] args) { System.out.println("Hello World !"); } } |
此时静态块将优先于主方法执行。
3、总结
代码块在开发之中能不用就别用。
如果真的要用,唯一发用只用静态块,以后早编写测试的时候可以使用到这个概念。