这一节我们看一个比較特殊的概念,那就是静态代码块。
前面我们也提到过代码块,就是一段独立的代码空间。那么什么是静态代码块呢?说白了,就是用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(); } }
我们来看运行结果:
从结果我们直接能够看到,我们在静态代码块中对静态变量进行了多次运算和赋值,所以当我们须要对静态变量进行多次运算时我们能够运用静态代码块。
只是这个在开发中用的并不多。在一些底层的框架开发中会专门用到。
这一节我们就简单的学到这里。