Think In Java(四)初始化
2022-01-16 本文已影响0人
如雨随行2020
- 指定初始化
如果想为某个变量赋初始值,有一种很直接的办法,就是在定义类成员变量的地方为其赋值(在C++里不能这样做,尽管C++的新手们总想这样做)。以下代码片段直接给成员变量赋初值。
public class InitialValues {
boolean bool = false;
char ch = 'x';
int i = 939;//....
}
也可以用同样的方法初始化非基本类型的对象。如果Depth是一个类
class Depth{}
public class Measurement {
Depth d = new Depth();
//....
}
甚至可以通过调用某个方法来提供初值:
public class MethodInit {
int i = f();
int f() {return 11;}
}
这个方法也可以带有参数,但这些参数必须是已经被初始化了的。
public class MethodInit2 {
int i = f();
int j = g(i);
int f() { return 11; }
int g int(int n) { return n * 10; }
-
构造器初始化(略)
-
初始化顺序
例子:public class Initialization { Cup cup1 = new Cup(1); { System.out.println("init statament"); Cup cup2 = new Cup(2); } Cup cup3 = new Cup(3); static Cup cup5 = new Cup(5); static { System.out.println("static init statament"); Cup cup4 = new Cup(4); } static Cup cup6 = new Cup(6); public static void main(String[] args) { System.out.println("main()"); Initialization initialization = new Initialization(); staticInit(); } public Initialization() { System.out.println("Initialization()"); Cup cup7 = new Cup(7); } public static void staticInit() { System.out.println("staticInit()"); Cup cup8 = new Cup(8); } } class Cup { public Cup(int i) { System.out.println("cup:" + i); } }
输出:
cup:5
static init statament
cup:4
cup:6
main()
cup:1
init statament
cup:2
cup:3
Initialization()
cup:7
staticInit()
cup:8
总结:1)语句块对初始化顺序没有影响(即有没有大括号不影响顺序)
2)静态初始化语句—>>main—>>非静态初始化语句—>>构造器。
3)静态初始化语句只初始化一次
4)被static修饰的初始化块内都属于静态初始化语句;
5)没想到吧,加上大括号后还能写除定义成员变量以外的语句