构造代码块(了解)
编码是基本不用,面试时考的可能性大。
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 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。