前言
我们知道在java中通过构造器来为对象进行初始化操作,但是在java中与构造器类似的还有初始化块的操作,下面小编来为大家分享一下。
初始化块使用
在Java中初始化块是java中出现的第4中成员,前三种分别是成员变量、方法和构造器。一个类中可以有多个初始化块,并且相同类型的初始化块是按照顺序依次执行的。初始化块的修饰符只能是static,初始化块可以包含任何可执行语句,包括定义局部变量、调用其他对象方法,以及使用分支、循环语句等
/** * @FileName: test.java * @Package:com.number * @Description: TODO * @author: LUCKY * @date:2015年11月29日 下午12:55:00 * @version V1.0 */ package com.number; /** * @ClassName: test * @Description: TODO * @author: LUCKY * @date:2015年11月29日 下午12:55:00 */ public class test { int cd; int d=9; { // 下面定义一个初始化块 int a = 6; System.out.println(a > 4 ? "局部变量a大于4" : "局部变量a小于4"); } int c=0; public test(){ cd=10; System.out.println("初始化构造器"); } public static void main(String[] args) { test test = new test(); System.out.println(Integer.compare(2, 3)); } }
初始化块和构造器
可以从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器之前执行,可以使用初始化器来进行对象的初始化操作。
但是初始化块与构造器又有区别,它只是一段固定的执行的代码,不能接受任何的参数。因此初始化器的应用场景我们可以理解为,当两个或者多个构造器中有相同的初始化代码,并且这些初始化代码无须接受参数的时候,就可以把他们放在初始化块中定义。通过把多个构造器中相同的代码提取到初始化中定义,能更好的提高初始化代码的复用,提高整个应用的可维护性。
静态初始化块
如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象进行初始化操作,类初始化块负责对类进行初始化)。静态初始化块是与类相关的,系统将在类初始化块阶段进行静态初始化块,而不是在创建对象的时候才执行。因此静态初始化块总是比普通初始化块先执行。
废话不多说了,来看一下下面的Demo,解解闷吧!一定要认真的跑一遍。
package com.test; class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { // 通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { // 通过super调用父类中有一个字符串参数的构造器 super("疯狂Java讲义"); System.out.println("执行Leaf的构造器"); } } public class Test { public static void main(String[] args) { new Leaf(); } }
时间: 2024-10-05 16:18:01