Java基础知识温习系列一:Static

说明:最近在看臧圩人的博客(http://zangweiren.iteye.com),他的博客在年度排行榜上排第4位,是为很厉害的人物,写的博客内容也非常不错,简单易懂而不失深度,特别是他的Java面试题解惑系列。我看这个解惑系列,然后对基础知识再梳理了一次。这个温习系列里面的大部分内容和代码均来自臧圩人的面试题解惑系列。

对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

public class InitialOrderTest {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 构造器
public InitialOrderTest() {
System.out.println("构造器");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}

运行以上代码,我们会得到如下的输出结果:
静态变量
静态初始化块
变量
初始化块
构造器

这种结果的原因是什么呢?实际上就是对关键字static的理解。用static修饰的成员变量或者成员方法是依赖类而存在的。要使用普通的成员变量或者方法,首先要new出一个对象来,然后在借助这个对象来调用成员变量或者方法。而使用static修饰的变量或者方法可以采用classname.instancevariable或者classname.methodname()的形式来调用。最典型的就是main()方法,因为它是程序的入口,这时还没有任何对象被创建,所以main()方法要被标记为static。
换句话说就是,使用static修饰的元素(可以是实例变量、方法或者代码块)是和类一起同生共死的。在类加载器加载类的时候就会初始化这些static元素。所以在初始化的时候static元素就会放在第一位。
对于变量和初始化块的顺序可以这样理解,变量的初始化顺序肯定在初始化块的前面。因为初始化块中要用到变量,所以如果变量没有先初始化,那怎么用得了呢?
至于构造方法肯定是在最后的。因为它是在new一个对象的时候构造方法才会被调用。类的加载,实例变量的初始化完成等等工作都OK了,才有可能用new来创建对象啊。所以,构造方法是在最后面的。
相关的话题是,在类继承时父类和子类的这些东东的顺序会是怎样的呢?下回再表。已经是凌晨1点20分了,昏觉了 :lol:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值