{执行的语句}
代码块的主要用途当我们定义了代码块之后,我们每一次调用构造器,代码块的语句都会被执行一次。我们可以看出代码块在构造器的第一列就被调用执行了。如果有多个代码块则会按照顺序进行调用
public class Test { public static void main(String[] args) { aa b= new aa("小明"); aa c= new aa("小明",99); } } class aa{ public String name; public int age; { System.out.println("我是代码块"); } public aa(String name){ this.name=name; System.out.println(name+age); } public aa(String name,int age){ this.name=name; this.age=age; System.out.println(name+age); } }注意事项
static代码块叫做静态代码块,作用时对类进行初始化,而且他随着类的加载而执行,并且只会执行一次。如果时普通代码块,每创建一个对象,就会执行。那么类什么时候会被加载那???①创建对象实例时(new)②创建子类对象实例,父类也会被加载③使用类的静态成员(静态方法,静态变量)
对于第一种情况我们已经演示过,我们来看第二种情况,当我们创建aa的子类bb,并且实例化bb,会调用父类的代码块
public class Test { public static void main(String[] args) { bb b=new bb(); } } class aa{ public static String name; public int age; static { System.out.println("我是代码块"); } { System.out.println("我是代码块2"); } } class bb extends aa{ }
对于第三种情况,我们调用aa的静态方法,发现代码块也被调用了,至于为什么第二个输出null,是因为这只是加载了类,却并没有创建类实例对象。
public class Test { public static void main(String[] args) { System.out.println(aa.name); } } class aa{ public static String name="张三丰"; public int age; static { System.out.println("我是代码块"); } { System.out.println("我是代码块2"); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)