博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中静态初始化块、初始化块和构造方法的理解 (转载)
阅读量:5020 次
发布时间:2019-06-12

本文共 1133 字,大约阅读时间需要 3 分钟。

在Java中,有两种初始化块:静态初始化块和非静态初始化块。它们都是定义在类中,用大括号{}括起来,静态代码块在大括号外还要加上static关键字。

非静态初始化块(构造代码块):
作用:给对象进行初始化。对象一建立就运行,且优先于构造函数的运行。
与构造函数的区别:非静态初始化块给所有对象进行统一初始化,构造函数只给对应对象初始化。
应用:将所有构造函数共性的东西定义在构造代码块中。
静态初始化块:
作用:给类进行初始化。随着类的加载而执行,且只执行一次
与构造代码块的区别:
1)构造代码块用于初始化对象,每创建一个对象就会被执行一次;静态代码块用于初始化类,随着类的加载而执行,不管创建几个对象,都只执行一次。
2)静态代码块优先于构造代码块的执行
3)都定义在类中,一个带static关键字,一个不带static
构造函数、非静态初始化块、静态代码块都是用于初始化,三者的执行顺序依次是:静态代码块>构造代码块>构造函数。
其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块初始化了。

静态初始化块的作用就是当JVM在装载类时,你想让它做一些事情,那么,就可以用静态初始化块。这几者的执行顺序是:

JVM在装载类时)先装载类的静态成员,再执行静态初始化块(同样,当一个类有继承自某类时,则会先装载该父类,那么,父类的装载或执行顺序,也都如句子所述)。

(在创建类的实例时)先执行实例初始化块,再执行构造方法;但对于一棵继承树中,会先调用父类的构造方法,那么其执行顺序也如句子所述。

例子:

Class A{ int n = 0;}
那么你创建对象 A a = new A();之后就可以使用a.n属性
Class A{  {  int a= 0;  }  } 
放在块里面n就不是A的成员,就不能使用a.n属性

前者把n作为对象的成员;后者只是实例化一个对象时声明一个局部变量a。有本质区别。

public class Test {

static {
System.out.println("我是静态块");
}
}
当创建Test 类的一个对象的时候,比如new Test() ,是这样,首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个类在第一次被使用的时候 会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!
以下是对象的构造函数和初始化块的执行流程分析:

转载于:https://www.cnblogs.com/maowh/p/3593247.html

你可能感兴趣的文章
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
bootstrap
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>
20189210 移动开发平台第六周作业
查看>>
grunt安装与运行
查看>>
java之spring mvc之ajax
查看>>
java之mybatis之一对多关联映射
查看>>
java之mybatis之helloworld
查看>>
java之mybatis之缓存
查看>>
java之maven之初识maven
查看>>
java之mybatis之占位符
查看>>
微服务之演化式架构师(二)
查看>>
java之mybatis之查询及分页
查看>>
java之mybatis之字段映射及多对一
查看>>
微服务之如何建模微服务
查看>>
java之mybatis之动态sql
查看>>
SQL Server 连接字符串总结
查看>>
java之mybatis整合spring
查看>>