博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[javase学习笔记]-8.7 静态代码块
阅读量:7060 次
发布时间:2019-06-28

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

这一节我们看一个比較特殊的概念,那就是静态代码块。

前面我们也提到过代码块,就是一段独立的代码空间。那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块。

我们来看一个样例:

class StaticBlock{	static	{		System.out.println("静态代码块被运行");	}	void myPrint()	{		System.out.println("myPrint方法运行");	}}class StaticBlockTest {	public static void main(String[] args) 	{		new StaticBlock().myPrint();	}}
我们来看一看运行结果:

从结果我们看到了我们调用的myPrint函数被调用运行了。而且在此函数被调用之前。静态代码块就已经被运行。

这就是我们要说的特别之处,静态代码块是特殊的代码块。它被statickeyword修饰,而且拥有静态的全部特征,最基本的是它有一个比較自然独特的特点:我们之前说。静态随着类的载入而载入,而静态代码块随着着类的载入而运行,仅仅要类被载入,那么该静态代码块就会被运行。而且仅仅运行一次。

我们看以下的測试:

class StaticBlockTest {	public static void main(String[] args) 	{		new StaticBlock().myPrint();		new StaticBlock().myPrint();	}}
结果:

我们看到,静态代码块仅仅运行了一次,而我们的myPrint方法被调用了两次运行了两次。所以当类载入时,静态方法就已经载入而且运行一次。

通过上面的样例让我们明白了静态代码块的实际作用:用于给类进行初始化。

这就相当于我们之前学习的构造函数,构造函数是用于给对象进行初始化,而静态代码块是用来给类进行初始化。

这里我们或许会有疑问,既然构造函数能够进行初始化,那么我们为什么还要用静态代码块来初始化呢。事实上不是全部的类都能创建对象。由于有些类有可能不须要被创建对象的。比方我们在一个类中定义的全部是静态成员,那么创建对象就没有意义。

我们再看一个静态代码块的使用方法。我们看以下的代码:

class StaticBlock{	static int num;	static	{		num = 10;		num = num * 3;	}	void myPrint()	{		System.out.println("num = "+num);	}}class StaticBlockTest {	public static void main(String[] args) 	{		new StaticBlock().myPrint();	}}
我们来看运行结果:

从结果我们直接能够看到,我们在静态代码块中对静态变量进行了多次运算和赋值,所以当我们须要对静态变量进行多次运算时我们能够运用静态代码块。

只是这个在开发中用的并不多。在一些底层的框架开发中会专门用到。

这一节我们就简单的学到这里。

你可能感兴趣的文章
【HIMI转载推荐之三】基于COCOS2DX引擎UI扩展引擎包[COCOS2D-X-3C]
查看>>
Struts2 <s:token>防止表单重复提交   %{}
查看>>
《系统分析与设计方法》 计算投资回收分析
查看>>
从使用层面上了解委托和事件的区别
查看>>
eclipse安装WindowBuilder
查看>>
Sublime Text 3配置Windows下C/C++编译环境
查看>>
如何进行数据库恢复
查看>>
阿里妈妈图像识别刷新世界最好成绩,识别虚假推广信息准确率超95%
查看>>
NodeJs——(4)和模块
查看>>
阿里巴巴开源技术汇总:115个软件
查看>>
nodejs——网络编程模块
查看>>
nginx 跳转指定接口
查看>>
linux php 连接sql server2000
查看>>
可以拖动的弹出窗
查看>>
Tiny之Web工程构建
查看>>
android 的android httpClient详解
查看>>
IOS SEL的理解与使用
查看>>
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
查看>>
iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
查看>>
gdb 调试 sysbench
查看>>