[javase学习笔记]-8.7 静态代码块

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[javase学习笔记]-8.7 静态代码块相关的知识,希望对你有一定的参考价值。

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


前面我们也提到过代码块,就是一段独立的代码空间。那么什么是静态代码块呢?说白了,就是用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();
	}
}
我们来看运行结果:

技术分享图片

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

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


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

以上是关于[javase学习笔记]-8.7 静态代码块的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记3.4.3 static关键字 - 静态代码块

[javase学习笔记]-8.2 成员变量与静态变量的差别

JavaSE8基础 声明一个类的引用时,不触发静态代码块

JavaSE8基础 父子类中都有静态代码块与构造代码块,执行顺序的简单示例

JavaSE8基础 静态代码块 简单示例

Java静态块学习