Java 静态代码块

167 阅读3分钟

静态成员变量

概念: 使用static关键字修饰的成员变量叫做静态成员变量

格式: 直接将static关键字写在成员变量的数据类型前面

静态成员变量的特点:

和类的对象无关,直接通过类名调用;

保存在方法区的静态区域,被该类的所有对象共享;

在类加载完成时就完成空间分配和赋值;

静态成员变量和非静态成员变量的区别:

从保存位置:

静态成员变量:保存在方法区的静态区域

非静态成员变量: 保存在堆内存的对象空间中

从书写格式上看:

静态成员变量: 需要使用static关键字修饰,将static关键字直接写在数据类 型前面;

非静态成员变量: 不需要使用static关键字修饰;

从生命周期上看:

静态成员变量:类加载的时候就分配空间和赋值;直到这个类被卸载(或者整 个程序结束);

非静态成员变量: 创建对象的时候才分配空间和赋值;对象成为垃圾空间被回     收的时候;

从使用方法上看:

静态成员变量:可以直接通过类名使用,和类的对象无关;

非静态成员变量: 必须通过类的对象使用;

从修改后的影响范围上看:

静态成员变量:所有对象都收到影响;

非静态成员变量:  只对这一个对象有影响;

代码块

代码块的概念和格式

代码块,就是使用大括号括起来的一段代码;

书写格式:

{

代码;

}

代码块的分类

静态代码块

静态代码块,就是使用static修饰的代码块,直接写在类中的代码块;

静态代码块的执行顺序:

在类加载时:

1、将类中的静态成员与非静态成员分别加载到方法区的静态区域和非静态区域

2、将所有成员都加载到方法区后,会为所有静态成员变量在静态区域分配变量空间,同时赋默认值

3、为所有静态成员变量赋完默认值之后,会按照书写的先后顺序,执行静态代码块,和给静态成员变量显示赋值。

等上面的步骤去全部执行结束,类加载完成


作用:

因为在类加载完成时,静态代码块已经执行结束,所以某些需要提前完成的工作,可以放在静态代码块中执行;注意:静态代码块只在类加载时执行一次****

 

构造代码块

构造代码块,也是直接写在类中的代码块;在构造代码块前面不需要任何的关键字修饰;

构造代码块在创建对象时执行,每创建一个对象,执行一次

 

构造代码块执行顺序

image.png

应用:

原来凡是创建对象执行构造函数,都要执行构造代码块,所以如果某些操作在所有构造函数中都存在,那么可以提取到构造代码块中;

局部代码块

局部代码块的写法和构造代码块一模一样;不同的是,局部代码块只能写在局部位置(函数中);

作用:

局部代码块的作用,就是用来限定部分代码的使用范围的;