Java 代码块 构造块 静态块
陈亦康 人气:0普通代码块(本地代码块)
定义在方法里面用{ }括起来的代码块(凡是用{ }括起来都叫代码块,只是没有细分),就是普通代码块,也叫本地代码块。(不多见,也不常用)
例如:
public class Test { public static void main(String[] args){ { System.out.println("本地代码块!"); } } }
构造块(实例代码块)
实例代码块定义在类的内部,方法的外部,可以初始化实例的成员
例如:
class Student{ //成员变量 public String name; public int score; //类变量 public static String classes = "火箭6班"; //类方法 public static void fun1(){ Student stu = new Student(); stu.name = "jay"; //正确 System.out.println("类方法"); } //成员方法 public void fun2(String name, int score){ this.name = name; this.score = score; } //实例代码块 { this.name = "jay"; System.out.println("实例代码块!"); } }
静态块(静态代码块)
静态代码块定义在类的内部,方法的外部,可以初始化实例的成员
例如:
class Student{ //成员变量 public String name; public int score; //类变量 public static String classes = "火箭6班"; //类方法 public static void fun1(){ Student stu = new Student(); stu.name = "jay"; //正确 System.out.println("类方法"); } //成员方法 public void fun2(String name, int score){ this.name = name; this.score = score; } //实例代码块 { System.out.println("实例代码块!"); } //静态代码块 static{ classes = "16班"; System.out.println("静态代码块!"); }
他们之间有什么关系呢
例子
情况一:看如下代码会执行什么?
class Student{ //成员变量 public String name; public int score; //构造方法 public Student(){ System.out.println("构造方法!"); } //类变量 public static String classes = "火箭6班"; //类方法 public static void fun1(){ Student stu = new Student(); stu.name = "jay"; //正确 System.out.println("类方法"); } //成员方法 public void fun2(String name, int score){ this.name = name; this.score = score; } //实例代码块 { System.out.println("实例代码块!"); } //静态代码块 static{ System.out.println("静态代码块!"); } } public class Test { public static void main(String[] args){ Student stu = new Student(); } }
情况一运行结果:
情况二:看如下代码会执行什么?
class Student{ //成员变量 public String name; public int score; //构造方法 public Student(){ System.out.println("构造方法!"); } //类变量 public static String classes = "火箭6班"; //类方法 public static void fun1(){ Student stu = new Student(); stu.name = "jay"; //正确 System.out.println("类方法"); } //成员方法 public void fun2(String name, int score){ this.name = name; this.score = score; } //实例代码块 { System.out.println("实例代码块!"); } //静态代码块 static{ System.out.println("静态代码块!"); } } public class Test { public static void main(String[] args){ System.out.println(Student.classes); } }
情况二运行结果:
分析
- 他们执行的顺序是:静态代码块 -> 实例代码块 -> 构造方法(不论代码块的位置在哪,都是这个顺序!若有多个静态,看定义顺序即可)
- 只要加载了类,静态代码块就会被执行
- 若没有实例化对象只会执行静态的
- 若有多个实例,须看定义顺序
- 如果没有实例化对象,静态代码块只会执行一次
加载全部内容