在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();
}
}
运行结果是:
静态变量
静态初始化块
变量
初始化块
构造器
在继承情况下,用一下代码测试:
class Parent{
//静态变量
public static String p_StaticFied="父类--静态变量";
//变量
public String p_Field="父类--变量";
//静态初始化块
static{
System.out.println(p_StaticFied);
System.out.println("父类--静态初始化块");
}
//初始化块
{
System.out.println(p_Field);
System.out.println("父类--初始化块");
}
public Parent(){
System.out.println("父类--构造器");
}
}
public class SubClass extends Parent{
// 静态变量
public static String s_StaticFied="子类--静态变量";
//变量
public String s_Field="子类--变量";
//静态初始化块
static{
System.out.println(s_StaticFied);
System.out.println("子类--静态初始化块");
}
//初始化块
{
System.out.println(s_Field);
System.out.println("子类--初始化块");
}
public SubClass(){
System.out.println("子类--构造器");
}
public static void main(String[] args) {
new SubClass();
}
}
结果为:
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
由此可知,并不是父类初始化完后子类才初始化,父类的变量,初始化块,构造器会晚于子类的静态变量,静态初始化块。
环境变量的设置:
新建系统变量JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06
新建系统变量CLASSPATH:.;%JAVA_HOME%\lib;(注意:点号表示当前目录,不能省略)
在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省略)
JAVA_HOME=/opt/aspire/product/midportal/jdk1.6.0_20
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
CLASSPATH=.;$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar
JRE_HOME=$JAVA_HOME/jre
export LANG=zh_CN.GBK
export PATH
export CLASSPATH
export JRE_HOME
.bash_profile