1、在声明中赋值
/** * Created by N3verL4nd on 2016/11/19. */ class Test{ private String str = "Hello World"; public void show(){ System.out.println(str); } } public class HelloWorld { public static void main(String[] args) { Test t = new Test(); t.show(); } }
2、在构造器中设置值
/** * Created by N3verL4nd on 2016/11/19. */ class Test{ private String str; Test(){ str = new String("Hello World"); } public void show(){ System.out.println(str); } } public class HelloWorld { public static void main(String[] args) { Test t = new Test(); t.show(); } }
3、使用初始化块
/** * Created by N3verL4nd on 2016/11/19. */ class Test{ private String str; { str = new String("Hello World"); } public void show(){ System.out.println(str); } } public class HelloWorld { public static void main(String[] args) { Test t = new Test(); t.show(); } }只要构造类的对象,初始化块就会被执行。
/** * Created by N3verL4nd on 2016/11/19. */ class Test{ { str = new String("111"); } private String str = "222"; Test(){ str = new String("333"); } public void show(){ System.out.println(str); } } public class HelloWorld { public static void main(String[] args) { Test t = new Test(); t.show(); } }以上代码,调整初始化顺序,单步调试发现,构造函数最后被执行。
在声明中赋值与在初始化块中设置值则按照顺序执行。
/** * Created by N3verL4nd on 2016/11/19. */ class Test{ Test(){ str = new String("333"); } { str = new String("111"); } private String str = "222"; static { System.out.println(555); } public void show(){ System.out.println(str); } } public class HelloWorld { public static void main(String[] args) { Test t = new Test(); t.show(); } }static块在类加载的时候被执行,也就是优先于main函数执行。顺序:进入main函数-->static块-->返回main函数。
无main函数的Hello World
public class HelloWorld { static { System.out.println("Hello World"); System.exit(0); } /*public static void main(String[] args) { Test t = new Test(); t.show(); }*/ }