Think In Java(四)初始化

2022-01-16  本文已影响0人  如雨随行2020
  1. 指定初始化
    如果想为某个变量赋初始值,有一种很直接的办法,就是在定义类成员变量的地方为其赋值(在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; }
  1. 构造器初始化(略)

  2. 初始化顺序
    例子:

    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)没想到吧,加上大括号后还能写除定义成员变量以外的语句

上一篇下一篇

猜你喜欢

热点阅读