Java 初始化

static 初始化

static 成员初始化顺序

package object;

class Bowl {
    Bowl(int marker)
    {
        System.out.printf("Bowl("+marker+")\n");
    }
    void f1(int marker)
    {
        System.out.printf("f1("+marker+")\n"); } } class Table{ static Bowl bowl1 =new Bowl(1); Table() { System.out.println("table()"); } void f2(int marker) { System.out.println("f2("+marker+")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard { Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard() { System.out.print("Cupboard\n"); bowl4.f1(2); } void f3(int marker) { System.out.println("f3("+marker+")"); } static Bowl bowl5 = new Bowl(5); } public class StaticInitialization{ public static void main(String args[]) { System.out.println("Creating new Cupboard() in main"); new Cupboard(); //静态成员只有在第一个Cupboard在创建时才会初始化,此后,静态成员不会再次初始化 System.out.println("Creating new Cupboard() in main"); Cupboard cupboard = new Cupboard(); new Table().f2(1); new Cupboard().f3(1); } }/* output: Creating new Cupboard() in main Bowl(4) Bowl(5) Bowl(3) Cupboard f1(2) Creating new Cupboard() in main Bowl(3) Cupboard f1(2) Bowl(1) Bowl(2) table() f2(1) Bowl(3) Cupboard f1(2) f3(1) *///~

显示的初始化静态方法

package object;
//: initialization/ExplicitStatic.java

import static net.mindview.util.Print.*;

class Cup
{
    Cup(int marker)
    {    
        print("Cup("+ marker +")");
    }
    void f(int marker) { print("f("+marker+")"); } } class Cups { static Cup cup1; static Cup cup2; //静态域 static{ cup1 = new Cup(1); cup2 = new Cup(2); } //静态块 Cups() { print("Cups()"); } } public class ExplicitStatic{ public static void main(String args[]) { print("Inside main()"); Cups.cup1.f(99); // (1) 无论时通过(1)还是注释掉(1)运行(2),Cups的静态初始化都会执行
// 静态初始化只会执行一次,如果(1)(2)全部注释掉则不会执行初始化
} //static Cups cups1 = new Cups(); //(2) //static Cups cups2 = new Cups(); //(2) }/* output: Inside main() Cup(1) Cup(2) f(99) *///~

 非静态实例的初始化

package object;
import static net.mindview.util.Print.*;

class Mug {
    Mug(int marker)
    {
        print("mug("+ marker + ")");
    }
    void f( int marker)
    {
        print("f("+marker +")");
    }
}
public class Mugs{
    Mug mug1;
    Mug mug2;
    {
        mug1 = new Mug(1); 
        mug2 = new Mug(2);
        print("mug1 & mug2 initialized");
    }   //实例初始化子句是再构造器之前执行的
    Mugs()
    {
        print("MUgs()");
    }
    Mugs(int i){
        print("Mugs(int)");
    }
    public static void main(String args[])
    {
        print("Instde main()");
        new Mugs();
        print("new Musg() cmopleted");
        new Mugs(1);
        print("new Mugs(1) completed");
    }
}/* output:
Instde main()
mug(1)
mug(2)
mug1 & mug2 initialized
MUgs()
new Musg() cmopleted
mug(1)
mug(2)
mug1 & mug2 initialized
Mugs(int)
new Mugs(1) completed
*///~

数组的初始化

package object;

import static net.mindview.util.Print.*;
import java.util.*;

public class ArrayNew{
    public static void main(String args[]){
        int [] a;
        Random rand = new Random(47);
        a = new int[rand.nextInt(20)];
        print("length of a = " + a.length);
        print(Arrays.toString(a)); //Arrays.toString 产生一维数组的打印版本
    }
}/* output:
length of a = 18
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]//数组元素会自动初始化为空值(对于数字和字符就是0,对于boolean是false)
*///~

猜你喜欢

转载自www.cnblogs.com/jiangfeilong/p/10084526.html