一、 构造块优先于构造方法执行,没产生一个新的对象就调用一次构造块,构造块可以进行简单的逻辑操作(在调用构造方法前)。例如下列的代码:
class Person{
{
System.out.println("1.Person类的构造块");
}
public Person(){
System.out.println("2.Person类的构造方法");
}
}
public class Day7{
public static void main(String[] args){
new Person();
new Person();
}
}
代码的输出为:
构造块还有一个作用就是 完成类中普通属性初始化操作。
二、
静态块优先于构造块执行。而且无论产生多少实例化对象,静态块都在类加载中只执行一次。
重点:在主类中的静态块优先于主类执行。
在主类中的静态块:
完成类中静态属性的初始化和静态方法的调用。
有以下代码:
public class Day7{
public static void main(String[] args){
System.out.println("1.main方法开始");
new Day7();
}
{
System.out.println("2.主类中的构造块");
}
static{
// 静态块;
System.out.println("3.主类中的静态块");
}
}
代码的输出为:
以上就是代码块这一块需要注意的地方。然后附上一道Java校招的笔试题和答案:
public class HelloA {
//构造方法
public HelloA(){
System.out.println("1.Hello A!父类构造方法");
}
//非静态代码块
{
System.out.println("2.i'm A class.父类非静态代码块");
}
//静态代码块
static{
System.out.println("3.static A 父类静态代码块");
}
}
public class HelloB extends HelloA {
//构造方法
public HelloB(){
System.out.println("4.Hello B! 构造方法");
}
//非静态代码块
{ System.out.println("5.i'm B class.非静态代码块");
}
//静态代码块
static{
System.out.println("6.static B 静态代码块");
}
public static void main(String[] args) {
System.out.println("7.---start---");
new HelloB();
new HelloB();
System.out.println("8.---end---");
}
}
输出的结果为:
3 6 7 2 1 5 4 2 1 5 4 8.