1. ตัวแก้ไขการเข้าถึง

ก่อนแต่ละวิธี โปรแกรมเมอร์สามารถระบุสิ่งที่เรียกว่าตัวดัดแปลงการเข้าถึง ซึ่งรวมถึงคำหลักต่อไปนี้: public, protected, private.

ตัวดัดแปลงการเข้าถึงเหล่านี้ให้คุณจำกัดการเข้าถึงเมธอดของคลาสอื่น

ตัวอย่างเช่น หากคุณเขียนprivateคีย์เวิร์ดก่อนการประกาศเมธอด เมธอดนั้นสามารถเรียกได้จากคลาสเดียวกับที่มีการประกาศเท่านั้น คีย์เวิร์ดpublicอนุญาตให้เข้าถึงเมธอดที่ทำเครื่องหมายไว้จากเมธอดใดๆ ของคลาสใดก็ได้

ตัวดัดแปลงดังกล่าวมีทั้งหมด 3 ตัว แต่การเข้าถึงเมธอดมี 4 ประเภท นี่เป็นเพราะการไม่มีตัวดัดแปลงการเข้าถึงก็หมายถึงบางสิ่งเช่นกัน

เข้าได้จาก...
การปรับเปลี่ยน ชั้นใดก็ได้ ชั้นเรียนเด็ก แพ็คเกจของมัน คลาสของมัน
public ใช่ ใช่ ใช่ ใช่
protected เลขที่ ใช่ ใช่ ใช่
ไม่มีการปรับเปลี่ยน เลขที่ เลขที่ ใช่ ใช่
private เลขที่ เลขที่ เลขที่ ใช่

1. publicตัวดัดแปลง

เมธอด (หรือตัวแปร หรือคลาส) ที่ทำเครื่องหมายด้วยตัวpublicดัดแปลงสามารถเข้าถึงได้จากทุกที่ในโปรแกรม นี่คือระดับความเปิดกว้างสูงสุด — ไม่มีข้อจำกัดใดๆ

2. privateตัวดัดแปลง

เมธอด (หรือตัวแปร หรือคลาส) ที่ทำเครื่องหมายด้วยตัวprivateแก้ไขจะสามารถเข้าถึงได้จากคลาสเดียวกันที่มีการประกาศ เท่านั้น สำหรับคลาสอื่นๆ ทั้งหมด เมธอด (หรือตัวแปร) ที่ทำเครื่องหมายไว้จะมองไม่เห็น ราวกับว่ามันไม่มีอยู่จริง นี่เป็นข้อจำกัดระดับสูงสุด — เฉพาะคลาสของตัวเองเท่านั้น

3. ไม่มีตัวแก้ไข (ตัวแก้ไขเริ่มต้น)

หากเมธอด (หรือตัวแปร) ไม่ถูกทำเครื่องหมายด้วยตัวปรับแต่งใดๆ ก็จะถือว่ามี 'ตัวปรับแต่งเริ่มต้น' ตัวแปรหรือเมธอดที่มีตัวแก้ไขนั้น (เช่นไม่มีเลย) สามารถ มอง เห็นได้ในทุกคลาสในแพ็คเกจที่มีการประกาศ และสำหรับพวกเขาเท่านั้น โมดิฟายเออร์นี้บางครั้งเรียกว่าpackage-privateเป็นการบอกใบ้ว่าการเข้าถึงตัวแปรและเมธอดนั้นเปิดให้กับแพ็คเกจทั้งหมดที่มีคลาสของมันอยู่

4. protectedตัวดัดแปลง

หากเมธอดถูกทำเครื่องหมายด้วยprotectedตัวดัดแปลง จะสามารถเข้าถึงได้จากคลาสเดียวกัน แพ็คเกจเดียวกัน และลูกหลาน (คลาสที่สืบทอดคลาสที่มีการประกาศเมธอด) เราจะวิเคราะห์หัวข้อนี้อย่างละเอียดในภารกิจ Java Core

คุณสามารถใช้publicตัวดัดแปลงกับเมธอดทั้งหมดของคุณ (รวมถึงคลาสและตัวแปรคลาสทั้งหมดของคุณ) จนกว่าจะถึงจุดสิ้นสุดของภารกิจ Java Syntax คุณจะต้องใช้ตัวแก้ไขอื่นๆ เมื่อเราเริ่มเรียนรู้ OOP อย่างกระตือรือร้น

เหตุใดจึงต้องมีตัวดัดแปลงการเข้าถึง

พวกเขากลายเป็นสิ่งจำเป็นสำหรับโครงการขนาดใหญ่ที่เขียนโดยโปรแกรมเมอร์หลายสิบหลายร้อยคนในเวลาเดียวกัน

บางครั้งมีบางสถานการณ์ที่โปรแกรมเมอร์ต้องการแยกเมธอดที่มีขนาดใหญ่เกินไปออกเป็นส่วนๆ และย้ายส่วนหนึ่งของโค้ดไปเป็นวิธีตัวช่วย แต่ในเวลาเดียวกัน เขาหรือเธอไม่ต้องการให้โปรแกรมเมอร์คนอื่นเรียกเมธอดตัวช่วยเหล่านี้ เนื่องจากรหัสที่เกี่ยวข้องอาจทำงานไม่ถูกต้อง

ดังนั้นพวกเขาจึงคิดตัวดัดแปลงการเข้าถึงเหล่านี้ขึ้นมา หากคุณทำเครื่องหมาย helper method ด้วยคำว่าprivateจะไม่มีรหัสอื่นใดนอกจากคลาสของคุณที่สามารถมองเห็น helper method ของคุณได้



2. staticคำหลัก

คำstaticหลักทำให้วิธีการคงที่ เราจะดูความหมายในภายหลัง สำหรับตอนนี้ ให้จำข้อเท็จจริงสองสามข้อเกี่ยวกับวิธีการแบบสแตติก

ความจริง 1. เมธอดแบบสแตติกไม่ได้แนบมากับออบเจกต์ใด ๆแต่เป็นของคลาสที่มีการประกาศแทน หากต้องการเรียกใช้เมธอดแบบคงที่ คุณต้องเขียน:

ClassName.MethodName()

ตัวอย่างของวิธีการแบบคงที่:

ชื่อชั้น ชื่อเมธอดแบบคงที่
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

ชื่อคลาสก่อนหน้าชื่อของเมธอดสแตติกสามารถละเว้นได้ หากคุณเรียกเมธอดสแตติกจากภายในคลาส นี่คือเหตุผลที่คุณไม่จำเป็นต้องเขียนSolutionก่อนชื่อของแต่ละเมธอดแบบสแตติกที่ถูกเรียก

ความจริง 2 วิธีการแบบคงที่ไม่สามารถเข้าถึงวิธีการที่ไม่ใช่แบบคงที่ของคลาสของตัวเอง เมธอดสแตติกสามารถเข้าถึงเมธอดสแตติกเท่านั้น ด้วยเหตุนี้ เราจึงประกาศเมธอดทั้งหมดที่เราต้องการเรียกจากmainเมธอดสแตติก

ทำไม คุณจะสามารถตอบคำถามนี้ได้ด้วยตนเองเมื่อคุณเริ่มเรียนรู้ OOP และเข้าใจว่าเมธอดแบบสแตติกทำงานอย่างไร



3. throwsคำหลัก

มีคำหลักอีกคำหนึ่งที่คุณอาจเห็นในการประกาศเมธอด นั่นคือคำthrowsหลัก ไม่เหมือนกับตัวดัดแปลงการเข้าถึงและstaticคีย์เวิร์ด คีย์เวิร์ดนี้ถูกวางไว้หลังพารามิเตอร์เมธอด:

public static Type name(parameters) throws Exception
{
  method body
}

เราจะพิจารณาความหมายที่ชัดเจนในภายหลังเมื่อเราศึกษาข้อยกเว้น

แต่ถ้ามองเผินๆ เราสามารถพูดได้ว่าเมธอดที่ทำเครื่องหมายด้วยคีย์เวิร์ด Throws สามารถโยนข้อผิดพลาด (ข้อยกเว้น) ซึ่งหมายถึงอินสแตนซ์ของคลาสException (และคลาสที่สืบทอดมา) หากเกิดข้อผิดพลาดหลายประเภทในชั้นเรียน คุณต้องระบุรายการแต่ละรายการโดยคั่นด้วยเครื่องหมายจุลภาค


4. mainวิธีการ

บรรทัดที่มีการประกาศเมธอดซึ่งมีตัวดัดแปลงทั้งหมดจะส่งผลต่อวิธีการเรียกเมธอดนี้จากคลาสและเมธอดอื่นๆ ซึ่งจะส่งผลต่อประเภทของผลลัพธ์ที่เมธอดจะส่งคืนและระบุว่าข้อผิดพลาดใดที่เป็นไปได้เมื่อรัน

บรรทัดดังกล่าวเรียกว่าการประกาศเมธอดและมีรูปแบบทั่วไปดังต่อไปนี้:

access modifier static Type name(parameters) throws exceptions
รูปแบบทั่วไปของการประกาศเมธอด

โดยที่access modifiers จะถูกแทนที่ด้วยpublic, protected, private, หรือไม่มีอะไรเลย

หากเมธอดเป็นแบบคงที่staticคำหลักจะปรากฏขึ้น (ไม่มีสำหรับเมธอดแบบไม่คงที่)

Typeเป็นประเภทของค่าที่ส่งคืน ( voidหากไม่มีผลลัพธ์)

ตอนนี้คุณคงเข้าใจว่าคำหลักทั้งหมดหมายถึงอะไรในการประกาศเมธอดmain:

public static void main(String[] args) throws Exception
ประกาศmainวิธีการ

การเข้าถึงเมธอดmain()สามารถทำได้จากคลาสใดก็ได้ ตามที่ระบุโดยpublicคีย์เวิร์ด

เมธอดเป็นแบบคงที่ ดังนั้นจึงสามารถเรียกอย่างชัดเจนSolution.main()ว่า

วิธีmainการไม่ส่งกลับผลลัพธ์ใด ๆ ประเภทการส่งคืนคือvoid(ไม่มีประเภท)

วิธีmainการใช้อาร์กิวเมนต์ (!): อาร์เรย์ของสตริง และชื่อพารามิเตอร์argsก็บ่งบอกถึง 'ข้อโต้แย้ง' ในใจของเรา เมื่อโปรแกรมเริ่มทำงาน คุณสามารถส่งผ่านอาร์กิวเมนต์ซึ่งเป็นอาร์เรย์ของสตริงได้ พวกเขาจะอยู่ในargs อาร์เรย์ในmain()เมธอด

ข้อผิดพลาดที่ไม่สามารถจัดการได้ เช่นException(หรือข้อผิดพลาดที่ตามมา) สามารถเกิดขึ้นได้ในmain()เมธอด