当前位置:文档之家› 构造代码块与静态代码块

构造代码块与静态代码块

构造代码块(了解)
编码是基本不用,面试时考的可能性大。

1什么是构造代码块
构造代码块,又叫实例初始化块(实例块)。

它是被类体直接包含的,它是类的成员之一。

它也是无名块
2实例块的语法
class Demo {
{
System.out.println(“hello world”);
}
}
实例块是被类体直接包含的。

实例块中可以放0 ~ n条语句。

3实例块什么时候执行
与显示初始化语句同时执行(创建对象时执行)。

它们的执行顺序是按上下顺序执行的!class Person {
{System.out.println("hello1");} //a
private String name = "zhangSan"; //1
{System.out.println("hello2");} //b
private int age = 100; //2
{System.out.println("hello3");} //c
private String sex = "male"; //3
{System.out.println("hello4");} //d
}
当创建一个Person对象时,执行顺序是a、1、b、2、c、3、d。

4实例块的局限性
一般情况下没有使用实例块的必要,只有在匿名内部类中,需要使用构造器时才会使用实例块来充当构造器的作用。

实例块只能对下面定义的属性做写操作,而不能做读操作。

实例块对上面定义的属性就没有限制了。

读写操作都可以。

class Person {
{
name = "zhangSan";//OK,对下面定义的属性做写操作
System.out.println(name);// 错误,不能对下面定义的属性做读操作
}
private String name;
{
name = "liSi";//OK,对上面定义的属性做什么操作都可以
System.out.println(name);//OK,对上面定义的属性做什么操作都可以
}
}
静态块(掌握)
在就业班中会看到它的使用。

使用的不是很多!
1什么是静态块
静态块,又叫静态构造代码块、静态初始化块。

它是被类体直接包含的,它是类的成员之一。

使用static修饰的块
2静态块的语法
class Demo {
static {
System.out.println(“hello world”);
}
}
静态块是被类体直接包含的。

静态块中可以放0 ~ n条语句。

3静态块什么时候执行
与静态显示初始化语句同时执行(类加载时被执行)。

它们的执行顺序是按上下顺序执行的!class Person {
static {System.out.println("hello1");} //a
private static String name = "zhangSan"; //1
static {System.out.println("hello2");} //b
private static int age = 100; //2
static {System.out.println("hello3");} //c
private static String sex = "male"; //3
static {System.out.println("hello4");} //d
}
Person类被加载时,执行顺序是a、1、b、2、c、3、d。

4静态块的局限性
静态块只能对下面定义的静态属性做写操作,而不能做读操作。

静态块对上面定义的静态属性就没有限制了。

读写操作都可以。

class Person {
static {
name = "zhangSan";//OK,对下面定义的静态属性做写操作
System.out.println(name);// 错误,不能对下面定义的静态属性做读操作}
private static String name;
static {
name = "liSi";//OK,对上面定义的静态属性做什么操作都可以
System.out.println(name);//OK,对上面定义的静态属性做什么操作都可以}
}
5什么时候使用静态块
有些代码需要在类加载时就必须完成的时候,使用静态块。

对静态属性的初始化很复杂时(不是一条语句能完成的时候),使用静态块。

构造块:直接在类中定义的代码块称为{}构造代码块。

构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

静态代码块:在java中使用static关键字声明的代码块。

静态块用于初始化类,为类的属性初始化。

每个静态代码块只会执行一次。

由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。

如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

注意:1 静态代码块不能存在于任何方法体内。

2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

相关主题