初始化代码块与静态代码块的执行顺序

初始化代码块

  • 在类中可以用大括号{}将一段代码括起来,对该类的对象进行一些初始化的操作
package com.fs.pojo;

public class Stu {
	public int age;
	public String name;
	{
		name = "haha";
		System.out.println(name);
	}
}
  • 初始化代码块在构建对象的时候会执行,以下代码的执行结果是打印2次 haha
package com.fs.test;

import com.fs.pojo.Stu;

public class StuTest {
	public static void main(String[] args) {
		Stu stu = new Stu();
		Stu stu2 = new Stu();
	}
}

静态代码块

  • 使用staic修饰的代码块叫做静态代码块
package com.fs.pojo;

public class Stu {
	public int age;
	public String name;
	public static String sex;
	{
		name = "haha";
		System.out.println(name);
	}
	
	// 静态代码块
	static {
		sex = "男";
		System.out.println("我们18071班的学生都是:" + sex + "的");
	}
}

  • 静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
  • 以下代码的执行结果: 先执行静态代码块里面的代码,再执行初始化代码块里面的代码
package com.fs.test;

import com.fs.pojo.Stu;

public class StuTest {
	public static void main(String[] args) {
		Stu stu = new Stu();
		Stu stu2 = new Stu();
	}
}
package com.fs.pojo;

public class Stu2 {
	private String name;
	private String age;
	{
		System.out.println("初始化代码块被调用了");
		name = "liujie";
		if (name.indexOf("l") > -1) {
			System.out.println("你这是非法名字");
		} else {
			System.out.println("名字通过");
		}
	}
	static {
		System.out.println("静态代码块被调用了-------------");
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	
	public Stu2() {
		
	}
	
	public Stu2(String name, String age) {
		this.name = name;
		this.age = age;
		System.out.println("构造方法被调用了");
	}
	
	public static void main(String[] args) {
		Stu2 stu2 = new Stu2("刘杰", "100");
		stu2.setAge("22");
		Stu2 stu22 = new Stu2("lzl", "32");
		System.out.println(stu22.name);
		System.out.println(stu2.name);
	}
	// 调用顺序:静态代码块(只调用一次)--》初始化代码块 --》构造方法
//	静态代码块被调用了-------------
//	初始化代码块被调用了
//	你这是非法名字
//	构造方法被调用了
//	初始化代码块被调用了
//	你这是非法名字
//	构造方法被调用了
//	lzl
//	刘杰
}

猜你喜欢

转载自blog.csdn.net/qq_38216661/article/details/81192717