Java初始化

  1. 函数中的成员是必须要初始化的 否则会编译出错。

void f() {
int i;
i++; // 编译出错
}

2.类中的成员变量可以不初始化,会自动给出一个初始化值。

3.构造函数初始化

public class Counter {
int i;
Counter() { i = 7; }
}

i会被初始化2次,第一次被初始化为0,第二次为7.

4.初始化的顺序

成员变量的初始化在任何方法(即使是构造函数)调用之前。

class Window {
    Window(int marker) {
        print("Window(" + marker + ")");
    }
}
class House {
    Window w1 = new Window(1); // Before constructor
    House() {
        // Show that we’re in the constructor:
        print("House()");
        w3 = new Window(33); // Reinitialize w3
    }
    Window w2 = new Window(2); // After constructor
    void f() {
        print("f()");
    }
    Window w3 = new Window(3); // At end
}
public class OrderOfInitialization {
    public static void main(String[] args) {
        House h = new House();
        h.f(); // Shows that construction is done
    }
}

/* Output:
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

在上例中W3被初始化2次。一次在构造函数前,(第一次的初始化会被gc回收)
W3如此初始化的坏处:
    (1) 效率不高
    (2) 如果有覆盖的构造函数没有初始化W3,就会出现初始化与default初始化不一致的问题。

5. 静态数据初始化
不论有多少个对象被创造,static变量都存储在一个静态存储区域.static不能作为局部变量的关键字
6.显示的静态数据初始化

public class Spoon {
static int i;
static {
i = 47;
}
}

7.非静态实例初始化

{
mug1 = new Mug(1);
mug2 = new Mug(2);
print("mug1 & mug2 initialized");
}
代码结构与static就差一个static关键字,称之为匿名内部类初始化,其在构造函数之前初始化.

8.数组初始化
 编译器不允许你告诉他这个数组多大.为了给数组创建一个存储空间,一定要初始化一个表达式为一个数组.
int[] a1={1,2,3};
int[] a2;
a2=a1;
该程序a1和a2指向同一个对象,不论谁改动,都会影响另一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值