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