public class Test extends JPanel {
private static final long serialVersionUID = 4767050156491994899L;
public static void main(String[] args) {
AnimApp[] array = new AnimApp[3]; // 沒有執(zhí)行構(gòu)造函數(shù), 在這里只是申請(qǐng)了空間.
array[0] = new AnimApp(3); // 構(gòu)造一個(gè)對(duì)象
}
}
class AnimApp {
public AnimApp(int times) {
System.out.println("class AnimApp");
}
}
Java中的定義一個(gè)數(shù)組, 然后用new[], 這時(shí)并沒有執(zhí)行構(gòu)造函數(shù), 只是申請(qǐng)了一段內(nèi)存空間, 與C++中的allocator<T>.allocate(size)(因?yàn)閍llocator<T>的類型在運(yùn)行時(shí)確定, 所以不是指定空間的字節(jié)數(shù), 而是用元素個(gè)數(shù), 每個(gè)元素的大小allocator中有記錄)相似. 然后在構(gòu)造一個(gè)對(duì)象的時(shí)候, 即如上new AnimApp(3)時(shí), 才真正的構(gòu)造對(duì)象, 似allocator<T>.construct(param).
但在C++中, new[]操作符(默認(rèn)的)就會(huì)去先申請(qǐng)空間, 接著執(zhí)行構(gòu)造函數(shù), 申請(qǐng)了多少個(gè)對(duì)象的空間, 執(zhí)行多少次(每個(gè)對(duì)象一次), 所以想為無無參構(gòu)造函數(shù)的類使用默認(rèn)的new[]來定義一個(gè)數(shù)組是不行的, 這點(diǎn)與Java不同, 他是即申請(qǐng)空間, 同時(shí)也要構(gòu)造對(duì)象, Java只是申請(qǐng)一段空間, 對(duì)于空間中的每個(gè)對(duì)象, 得自己顯示的用new ClassName(param)來構(gòu)造.