new

new ใช้เมื่่อต้องการสร้างวัตถุ

new จะไปเรียกคอนสตรัคเตอร์ (constructor – เมธอดชื่อเดียวกับคลาสและไม่คืนค่าและไม่ใช่ void)

แต่ถ้าคอนสตรัคเตอร์เป็น private ก็จะ new ไม่ได้ เช่น class TheOne มีคอนสตรัคเตอร์ที่เป็น private

public class TheOne {
    private TheOne() {
        System.out.println("the one is created");
    }

    public void doBulletTime() {
        System.out.println("the one does bullet time");
    }
}

บรรทัดที่ 3 จึงคอมไพล์ไม่ผ่าน

public class Test {
    public static void main(String[] args) {
        TheOne neo = new TheOne();
    }
}

ทำไมถึงให้คอนสตรัคเตอร์เป็น private? เหตุผลหนึ่งก็คือต้องการควบคุมจำนวนวัตถุในคลาส TheOne ไม่อยากให้ new วัตถุได้ตามใจชอบ

ถ้าเราอยากให้คลาส TheOne มีวัตถุได้เพียงตัวเดียว ให้เขียนว่า

public class TheOne {
    private TheOne() {
        System.out.println("the one is created");
    }

    public void doBulletTime() {
        System.out.println("the one does bullet time");
    }

    private static TheOne theRef;

    public static TheOne getTheOne() {
        return theRef;
    }

    static {
        theRef = new TheOne();
    }
}

วัตถุ TheOne จะถูกสร้างใน static block (สามารถสั่ง new เรียก private คอนสตรัคเตอร์ได้ เพราะอยู่ในคลาสเดียวกัน)

การอ้างถึงวัตถุตัวเดียวในคลาส TheOne ให้เรียกเมธอด getTheOne()

โค้ดต่อไปนี้เรียกใช้วัตถุ TheOne

public class Test {
    public static void main(String[] args) {
        TheOne neo = TheOne.getTheOne();
        neo.doBulletTime();
    }
}

ผลการทำงานคือ

the one is created
the one does bullet time

หนังสือ เขียนโปรแกรม Java เบื้องต้น

หนังสือ Java Keywords

หากจะนำข้อความไปใช้ ต้องแสดงที่มา และห้ามใช้ในเชิงพาณิชย์

One thought on “new

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s