代码块又称初始化块,是类中的成员(即类的一部分),类似于方法,将逻辑语句封装在方法体中,通过{}包围起来,也是通过调用执行。 但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。 基本语法[修饰符]{ 代码(方法体) }; 说明:
代码块优点代码块相当于另外一种形式的构造器(对构造器的补充机制),可以作初始化的操作。 当构造器重载时,可以提取多个构造器重复执行的代码,放入代码块中。 简单案例电影放映 public class CodeBlockTest02 { public static void main(String[] args) { new Movie(); System.out.println("----------------"); new Movie("唐人街探案3.."); System.out.println("---------------"); new Movie("我和我的祖国...", 80, "张艺谋"); } } class Movie { private String name; private double price; private String director; //代码块 { System.out.println("电影开始播放广告..."); System.out.println("电影屏幕拉下来."); System.out.println("电影播放."); } public Movie() { } public Movie(String name) { this.name = name; } public Movie(String name, double price, String director) { this.name = name; this.price = price; this.director = director; } } 结果输出代码块使用说明
什么时候类被加载:
创建对象时,类的调用顺序
构造方法(构造器) 的最前面其实隐含了 super()和 调用普通代码块。 class Person{ public Person(){ super(); //调用普通代码块 System.out.println("Person"); } } 静态相关的代码块,属性初始化,在类加载时,就执行完毕, 因此是优先于 构造器和普通代码块执行的。 静态代码块只能直接调用静态成员,普通代码块可以调用任意成员。(因为在静态代码块执行时,只有静态成员已经被加载了) 对象加载顺序案例package codeBlock; public class Extends_blockTest { public static void main(String[] args) { new C(); } } class A{ private String name = nameA(); private static int age = ageA(); static { System.out.println("A .... static Block"); } { System.out.println("A .... ordinary Block"); } public String nameA() { System.out.println("A .... ordinary Args"); return "AAA"; } public static int ageA() { System.out.println("A .... static Args"); return 18; } public A() { System.out.println("A .... constructor"); } } class B extends A{ static { System.out.println("B .... static Block"); } private String name = nameB(); private static int age = ageB(); { System.out.println("B .... ordinary Block"); } public String nameB() { System.out.println("B .... ordinary Args"); return "BBB"; } public static int ageB() { System.out.println("B .... static Args"); return 18; } public B() { System.out.println("B .... constructor"); } } class C extends B{ private String name = nameC(); private static int age = ageC(); static { System.out.println("C .... static Block"); } { System.out.println("C .... ordinary Block"); } public String nameC() { System.out.println("C .... ordinary Args"); return "CCC"; } public static int ageC() { System.out.println("C .... static Args"); return 18; } public C() { System.out.println("C .... constructor"); } } 输出结果A .... static Args A .... static Block B .... static Block B .... static Args C .... static Args C .... static Block A .... ordinary Args A .... ordinary Block A .... constructor B .... ordinary Args B .... ordinary Block B .... constructor C .... ordinary Args C .... ordinary Block C .... constructor |
|