代码块:
代码块是类的五大成员之一(成员变量、构造器、方法、代码块、内部类)。
Java类生命周期:加载、验证、准备、初始化、卸载。
代码块分为两种:
静态代码块:
格式:static {}
特点:类加载时自动执行,由于类只会加载一次,所以静态代码也只会执行一次。
作用:完成类的初始化,例如:类变量的初始化赋值。
应用场景,Socket类方法中的静态代码块:
为类变量IN、OUT初始化赋值。
估计要使用到这个功能,还是要具备很高深的功力才行。
实例代码块:
格式:{}
特点:每次创建对象的时候,,执行实例代码块,并在构造器前执行。
作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值的。
package cn.ensource.d5_block;public class Student {static int number = 80;static String schoolName;// 静态代码块,加载时只会执行一次static {System.out.println("静态代码块执行了。");schoolName = "黑马";}// 实例代码块{System.out.println("实例代码块执行了。");}public Student() {System.out.println("无参数构造器执行了");}public Student(String name) {System.out.println("有参数构造器执行了");}}
package cn.ensource.d5_block;import java.net.Socket;public class Test {public static void main(String[] args) {// 目标;认识两种代码块System.out.println(Student.number);System.out.println(Student.number);System.out.println(Student.number);System.out.println(Student.schoolName);System.out.println("---------------------");Student s1 = new Student();Student s2 = new Student("张三");}
}
运行结果:
静态代码块执行了。
80
80
80
黑马
---------------------
实例代码块执行了。
无参数构造器执行了
实例代码块执行了。
有参数构造器执行了
应用场景:
一旦有人创建对象,我们要把这个信息记录下来,可以写到日志中。
那么,我们可以把这些代码放到我们的实例代码块中。
构造器只是为了初始化,并在之前对象已经被分配了空间并且赋了初始值。
无论使用哪个构造器创建对象都会执行实例代码块。
Sun公司在代码中使用了这个功能,我们以后阅读代码的时候会看到这些,要理解这个功能即可。