代码块:
1.作用:
- 用来初始化类和对象
2.特点:
- 代码块的执行要优先于构造器
3.代码块只能用static来修饰或者不修饰
4.静态代码块(用static修饰的)
- 可以写 输出语句,方法
- 随着类的加载而执行,而且只执行一次
- 一个类中可以定义多个静态的代码块,执行时按照声明的先后顺序执行(一般只写一个)
- 静态代码块的执行优先于非静态代码块的执行
- 静态代码块中只能调用静态的属性
- 作用:初始化类的一些信息(属性)
5.非静态代码块
- 可以写 输出语句,方法
- 随着对象的创建二执行
- 每造一个对象,非静态代码块就会执行一次
- 一个类中可以定义多个非静态的代码块,执行时按照声明的先后顺序执行(一般只写一个)
- 非静态代码块中能调用非静态的属性,也能调用静态属性
- 作用:在对象创建时,对对象的属性进行初始化
6.存在继承时的执行顺序
- 父类中的static{} > 子类中的static{} > 父类中的{},构造器 > 子类中的{},构造器
7.应用:连接数据库时用于数据池
代码:
public class test {
public static void main(String[] args) {
System.out.println(Person.nation); //随着类的加载而执行,而且只执行一次
System.out.println(Person.nation);
System.out.println("\nPerson的对象person已创建");
Person person = new Person(); //每造一个对象,非静态代码块就会执行一次
System.out.println("\nPerson的对象person2已创建");
Person person2 = new Person(); //每造一个对象,非静态代码块就会执行一次
System.out.println("\n*********************************");
new Son();
}
}
class Person{
String name;
int age;
static String nation="CHA";
public Person() {
// TODO Auto-generated constructor stub
}
private Person(String name,int age) {
// TODO Auto-generated method stub
this.name=name;
this.age=age;
}
// 静态代码块
static {
nation="JP";
System.out.println("我是静态的代码块");
}
// 非静态代码块
{
System.out.println("我是非静态的代码块");
}
}
class Father{
static {
System.out.println("11111111");
}
{
System.out.println("22222222");
}
public Father() {
// TODO Auto-generated constructor stub
System.out.println("33333333");
}
}
class Son extends Father{
static {
System.out.println("44444444");
}
{
System.out.println("55555555");
}
public Son() {
// TODO Auto-generated constructor stub
System.out.println("66666666");
}
}