代码块
代码块是使用 { } 定义起来的一段程序
普通代码块 定义在方法之中的代码块
{
syso//程序
}//普通代码块
定义在类里的代码块
{
syso//程序
}//构造块
构造块优先于构造方法执行
每次创建新对象 都会执行构造块和构造方法
静态块
1.类中 如果一个构造块上使用了static关键字 就是静态块
static {
syso//程序
}//静态块
无论有多个实例化对象时 只调用一次
静态块优先于构造块
2.主函数所在的类中执行的静态块
先执行静态块
优先级
eg
1.Person属性没有static的情况:
public class text {
// Person属性没有static的情况:
private Person per = new Person("效果");
{
System.out.println("Test 构造块");
}
static {
System.out.println("Test 静态块");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new text();
}
}
class Person{
private String name;
public Person(String name) {
this.name = name;
System.out.println("person 构造方法");
}
{
System.out.println("person 构造块");
}
static{
System.out.println("person 静态块");
}
}
//结果
// Test 静态块
// person 静态块
// person 构造块
// person 构造方法
// Test 构造块
2.Person属性有static的情况:
public class text {
//Person属性有static的情况:
private static Person per = new Person("效果");
{
System.out.println("Test 构造块");
}
static {
System.out.println("Test 静态块");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new text();
}
}
class Person{
private String name;
public Person(String name) {
this.name = name;
System.out.println("person 构造方法");
}
{
System.out.println("person 构造块");
}
static{
System.out.println("person 静态块");
}
}
//结果
// person 静态块
// person 构造块
// person 构造方法
// Test 静态块
// Test 构造块
3.混合练习
public class temp2 {
private Student stu = new Student("张三");
private static Student stu1 = new Student("李四");
public static void print() {
System.out.println("5 Temp1 静态方法");
}
{
System.out.println("6 Temp1 构造块");
}
static {
System.out.println("7 Temp1 静态块");
}
public temp2() {
System.out.println("8 Temp1 构造方法");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new temp2();// 1构造块 2构造方法
// Student stu = new Student("zhangsan");
temp2.print();
}
}
class Student {
private String name;
{
System.out.println("1 Student 构造块");
}
static {
System.out.println("2 Student 静态块");
}
public Student() {
System.out.println("3 Student 无参构造方法");
}
public Student(String n) {
this();
this.name = n;
System.out.println("4 Student 单参构造方法:" + this.name);
}
}
//结果
2 Student 静态块
1 Student 构造块
3 Student 无参构造方法
4 Student 单参构造方法:李四
7 Temp1 静态块
1 Student 构造块
3 Student 无参构造方法
4 Student 单参构造方法:张三
6 Temp1 构造块
8 Temp1 构造方法
5 Temp1 静态方法
静态属性初始化 静态块 属性初始化 构造块 构造方法