从类变量成员初始化顺序,理解java语法[1]

代码开发中书写的变量时,很少会留言成员变量初始顺序。那么这些成员变量初始化的顺序是有规则的or是随机的。下面以可能会影响到变量初始化顺序的几种类型来讨论。

sValue静态变量 sFinal静态常量 sBlock静态代码块

mValue-本地变量 mFinal本地常量 mBlock本地代码块

------------------------code begin----------------------------------

public class Test {
final String mFinal = testStack("mFinal");
String mValue = testStack("mValue");
static String sValue = testStack("sValue");
static final String sFinal = testStack("sFinal");
static {
testStack("sBlock");
}//sBlock
{
testStack("mBlock");
}//mBlock

public static String testStack(String test) {
Log.e("hjx", "hjxtest",new Exception(test));
return "test";
}

public Test() {
super();
testStack("Test");
}
}

------------------------code end----------------------------------

java.lang.Exception: sValue
java.lang.Exception: sFinal
java.lang.Exception: sBlock
java.lang.Exception: mFinal
java.lang.Exception: mValue
java.lang.Exception: mBlock
java.lang.Exception: Test

将代码变量反序排列运行

java.lang.Exception: sBlock
java.lang.Exception: sFinal
java.lang.Exception: sValue
java.lang.Exception: mBlock
java.lang.Exception: mValue
java.lang.Exception: mFinal
java.lang.Exception: Test

由以上两份LOG可以看到

1,静态变量&静态代码块 早于 本地变量&本地代码块。

2,静态变量&静态代码块 是按照书写先后来初始化的

3,本地变量&本地代码块 是按照书写先后来初始化的

由以上3点,按照没有初始化时变量无法使用,可以推测语法(类初始化过程中):

1,不能用 静态变量 初始化 本地变量

2,静态变量&静态代码块 间,需要先定义(按照书写顺序)才能使用

3,本地变量&本地代码块 间,需要先定义(按照书写顺序)才能使用

4,final 并不会优先初始化

--为什么静态变量必须早与本地变量初始化呢?这个通过类使用的顺序容易理解,使用到了类就必须要初始化静态变量,但是使用到类不一定会实例化类对象。

通过上面分析,大家可以猜测下,是否可以用没有定义(按照书写顺序)静态变量,来初始化 本地变量,如下语法是否报错:

String mValue = sValue;
static String sValue = "aaaa";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值