Java 101 - Let's say Hello World!! (EP.1)

ซีรีส์ Java 101 นี้ผมจะพยายามใช้ภาษาพูดเยอะหน่อยนะครับ เพราะมันเป็นการอธิบายซะส่วนใหญ่ ซึ่งมันจะมีกี่ตอนผมก็ไม่รู้เหมือนกัน
วันนี้ผมอยากเริ่มด้วยโปรแกรมที่คนที่เขียนโปรแกรมทุกคนจะต้องเคยเจอ ซึ่งคือ Hello World
ก่อนอื่นก็พิมพ์ตามนี้ก่อนเลยครับ

public class Helloworld
{
public static void main (String [] args)
{
System.out.println("Hello World");
}
}

Output ที่ควรจะออกมาคือ คำว่า Hello World นะครับ
มาอธิบายโค้ตกัน
บรรทัดแรก เป็นการประกาศคลาสชื่อ Helloworld (เดียวเรื่อง Class คาดว่า EP.2 ผมจะมาอธิบายนะครับ)
บรรทัดที่ 3 เป็นการประกาศ Method ชื่อ main โดยที่ไม่ส่งค่าใดๆกลับ หรือ void นั่นเอง ส่วนคำว่า public กับ static นั้นเป็น Modifier เดียวผมจะอธิบายไว้ข้างล่างแบบคร่าวๆก่อน
บรรทัดถัดลงมา ผมบอกว่า System.out.println("Hello World"); นั่นคือการให้โปรแกรมส่งออกค่าผ่านทางหน้าจอว่า Hello World
เพราะฉะนั้นคำสั่งที่เราได้รู้ในวันนี้คือ

  • System.out.println("Write Sth"); นั่นคือการส่งออกค่าผ่านทางหน้าจอนี่เอง (จริงๆมันมีอีกหลายคำสั่งที่ใช้ในการส่งออกค่าทางหน้าจอ แต่ไว้เดียว EP.3 ผมจะมาอธิบายอย่างละเอียดอีกครั้งนึง)
    ทีนี้ เมื่อกี้ผมค้างเรื่อง Modifier ทิ้งไว้
    ถามว่า Modifier มันคืออะไร
    จริงๆแล้วมันคือตัวที่ไว้กำหนดคุณสมบัติของตัววัตถุในโปรแกรมเรา ซึ่งเราจะแบ่งได้เป็น 2 แบบด้วยกัน
    1. Non-Access Modifier ตามชื่อเลยครับ มันคือตัวที่ไว้กำหนดอะไรก็ตามที่ไม่ใช่เรื่องของการเข้าถึงวัตถุในโปรแกรม เช่น static ที่เราเห็นใน main นั่นล่ะครับ ตัวเดียวกันเลย
    2.Access Modifier ตามชื่อมันเช่นเดียวกัน มันเป็นตัวกำหนดระดับในการเข้าถึงของวัตถุในโปรแกรมเราว่า คลาสนี้สามารถเข้่าถึงโค๊ตตรงนี้ได้มั้ยหรือยังไง ซึ่งที่เราใช้บ่อยๆเลยก็จะมี
  • public - อันนี้ก็ตามชื่อมันอีกเช่นเคย คือเปิดไปหมด ชอบโชว์นี่เอง เราสามารถเข้าถึงได้เกือบทุกที่ (ยกเว้นอะไรบ้างเดียวจะมาอธิบายในวันหลัง)
  • private - อันนี้ทำให้เราสามารถเข้าถึงได้เฉพาะในคลาสเดียวกันได้เท่านั้น เช่น ผมมีคลาสชื่อ Student แล้วก็มีคลาส Teacher ถ้าผมอยู่ในคลาส Teacher แล้วถ้าผมเขียนเรียกคำสั่งจากคลาส Student อันนั้นโปรแกรมมันจะ Compile ไม่ผ่านครับ เพราะมันเข้าถึงไม่ได้
  • protected - อันนี้ค่อนข้างพิเศษหน่อย(มั้ง) ผมว่างั้นนะ อันนี้มันทำให้เราเข้าถึงได้แค่จากคลาสที่เราสืบทอดมาได้เท่านั้น (เรื่องการสืบทอดเดียวจะไว้ว่ากันทีหลังยาวๆเลย)
  • package - อันนี้ทำให้เราสามารถเข้าถึงได้จาก Package เดียวกันเท่านั้นซึ่งเรื่องของ Package ก็อีกแหละ ต้องไว้อธิบายในวันหลังว่ามันคืออะไรกันแน่?
    อ่ออีกเรื่องนึง ผมว่ามีหลายๆคนถามผมว่า
    ทำไม ตอนประกาศ main จะต้องใส่คำว่า String[] args ด้วยล่ะ??
    ตอบนะครับ การที่เราใส่ String[] args เนี่ยมีไว้เพื่อเวลาเราเรียกโปรแกรมเราผ่าน Command Line ผมว่าทุกคนน่าจะเคยใช้ Command Line นะนะครับ(หรือไม่หว่า) ถ้าสังเกตเวลาเราใช้ Command Line เวลาเราพิมพ์คำสั่ง เราจะมีค่า Argument พิเศษต่อท้ายคำสั่ง เช่น dir -s เป็นต้น การที่เราใส่ไว้ก็เพียงเพื่อเอาให้รับค่าจาก Command Line ได้ก็เท่านั้นเลยครับ
    ถามต่อว่าแล้วจำเป็นต้องใส่มั้ยไอ้ String [] args เนี่ย?
    ควรจะใส่ไว้ครับ ลองคิดเล่นๆนะครับ ว่าถ้าเราไม่ใส่เป็นจะเป็นแค่ Method ที่ดูธรรมดาใช่มั้ยครับ เพราะฉะนั้น java เลยกำหนดว่า main เนี่ยจะต้องรับ String[] args ด้วยนะไม่งั้นไม่ใช่ main มันเป็น jvm specification ที่ตัวภาษา Java กำหนดไว้
    Source Code : https://drive.google.com/folderview?id=0BwrPA9Miv4o2RENZMnpFTDFaTkk&usp=sharing