Java类 初始化块

Posted seamanone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java类 初始化块相关的知识,希望对你有一定的参考价值。

java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值。与其相关的执行代码有这么几种:

  • 静态初始化块
  • 初始化块
  • 构造方法

静态初始化块

静态初始化块只在类加载时执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。


非静态初始化块

非静态初始化块在每次初始化实例对象的时候都执行一次,可以给任意变量赋值。


构造方法

在每次初始化实例对象时调用。


重点:执行顺序->

  1. 在加载类时执行一次静态初始化块(之后不再调用)。
  2. 在每次初始化实例对象时:先执行非静态初始化块,再执行构造方法。

若是概念不好懂,请看如下实例:

public class InitializationClass {
String name; // 声明变量name
String sex; // 声明变量sex
static int age;// 声明静态变量age

// 构造方法
public InitializationClass() {
System.out.println("通过构造方法初始化name");
name = "tom";
}

// 构造方法
public InitializationClass(String name) {
System.out.println("通过参数构造方法初始化name");
this.name = name;
}

// 构造方法
public InitializationClass(int age) {
System.out.println("通过构造方法改变static InitializationClass.age");
InitializationClass.age = age;
}

// 构造方法
public InitializationClass(String name, String sex) {
System.out.println("通过构造方法初始化name age");
this.name = name;
this.sex = sex;
}

// 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男";
}

// 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
}

public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
System.out.println("------------------------------");
}

public static void main(String[] args) {

// 创建对象
InitializationClass obj1 = new InitializationClass("qiuhua");
obj1.show();

InitializationClass obj2 = new InitializationClass(10);
obj2.show();

InitializationClass obj3 = new InitializationClass("jing", "女");
obj3.show();
}
}

  

通过静态初始化块初始化age
通过初始化块初始化sex
通过参数构造方法初始化name
姓名:qiuhua,性别:男,年龄:20
------------------------------
通过初始化块初始化sex
通过构造方法改变static InitializationClass.age
姓名:null,性别:男,年龄:10
------------------------------
通过初始化块初始化sex
通过构造方法初始化name age
姓名:jing,性别:女,年龄:10
------------------------------

 

转:https://www.cnblogs.com/Berryxiong/p/6245100.html

 








































































以上是关于Java类 初始化块的主要内容,如果未能解决你的问题,请参考以下文章

Java代码块

java类加载顺序

静态代码块构造代码块构造函数以及Java类初始化顺序

Java 的类加载顺序

静态代码块构造代码块构造函数以及Java类初始化顺序

Java基础 - 静态代码块