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()
เมธอด
GO TO FULL VERSION