ตัวอย่างการบรรยายพร้อมผู้ให้คำปรึกษาซึ่งเป็นส่วนหนึ่งของหลักสูตร Codegym University ลงทะเบียนสำหรับหลักสูตรเต็ม
"สวัสดี Amigo! ฉันได้ยินมาว่าคุณมีวิธีการที่ดีอยู่แล้ว?"
“สวัสดี ฤๅษี ใช่ ฉันได้ตัดทางของอาจารย์คนนั้นไปแล้ว จะบอกว่ามันไม่ได้เลวร้ายนัก แต่เธอจะบอกว่า 'ไม่ ไม่ ไม่! คุณไม่ได้คิดอะไรเลย '"
"เห็นได้ชัดว่าคุณใช้เวลามากเกินไปในการพูดคุยกับอาจารย์บางคน ซึ่งอาจจะเป็นกับดิเอโก อย่างไรก็ตาม... ฉันยังหวังว่าคุณจะเข้าใจวิธีการดีพอ เพราะงั้น วันนี้ฉันจะสอนคำศัพท์วิเศษที่ช่วยวิเคราะห์วิธีการ 'ขอบเขตของอิทธิพล'
"ฟังดูน่าสนใจ"
"ความจริงแล้ว มันง่ายมาก ก่อนที่แต่ละวิธี โปรแกรมเมอร์สามารถระบุสิ่งที่เรียกว่าตัวดัดแปลงการเข้าถึงได้ ซึ่งรวมถึงคำหลักต่อไปนี้: public
, protected
, private
.
"ตัวดัดแปลงการเข้าถึงเหล่านี้ช่วยให้คุณจำกัดการเข้าถึงเมธอดของคลาสอื่น
"ตัวอย่างเช่น หากคุณเขียนprivate
คีย์เวิร์ดก่อนการประกาศเมธอด เมธอดนั้นสามารถเรียกได้จากคลาสเดียวกับที่มีการประกาศเท่านั้น คีย์เวิร์ดpublic
อนุญาตให้เข้าถึงเมธอดที่ทำเครื่องหมายจากเมธอดใดๆ ของคลาสใดก็ได้
ตัวดัดแปลงดังกล่าวมีทั้งหมด 3 ตัว แต่มีการเข้าถึงเมธอด 4 ประเภท นี่เป็นเพราะการไม่มีตัวดัดแปลงการเข้าถึงก็หมายถึงบางสิ่งเช่นกัน นี่คือตารางที่สมบูรณ์:
เข้าได้จาก... | ||||
---|---|---|---|---|
การปรับเปลี่ยน | ชั้นใดก็ได้ | ชั้นเรียนเด็ก | แพ็คเกจของมัน | คลาสของมัน |
public |
ใช่ | ใช่ | ใช่ | ใช่ |
protected |
เลขที่ | ใช่ | ใช่ | ใช่ |
ไม่มีการปรับเปลี่ยน | เลขที่ | เลขที่ | ใช่ | ใช่ |
private |
เลขที่ | เลขที่ | เลขที่ | ใช่ |
"และนี่คือคำอธิบายที่สมบูรณ์ของตัวแก้ไขการเข้าถึง:
1. public
ตัวดัดแปลง
เมธอด (หรือตัวแปร หรือคลาส) ที่ทำเครื่องหมายด้วยตัวpublic
แก้ไขสามารถเข้าถึงได้จากทุกที่ในโปรแกรม นี่คือระดับสูงสุดของการเปิดกว้าง — ไม่มีข้อจำกัดใดๆ
2. private
ตัวดัดแปลง
เมธอด (หรือตัวแปร หรือคลาส) ที่ทำเครื่องหมายด้วยตัวprivate
แก้ไขจะสามารถเข้าถึงได้จากคลาสเดียวกันที่มีการประกาศ เท่านั้น สำหรับคลาสอื่นๆ ทั้งหมด เมธอด (หรือตัวแปร) ที่ทำเครื่องหมายไว้จะมองไม่เห็น ราวกับว่ามันไม่มีอยู่จริง นี่เป็นข้อจำกัดระดับสูงสุด — เฉพาะคลาสของตัวเองเท่านั้น
3. ไม่มีตัวแก้ไข (ตัวแก้ไขเริ่มต้น)
หากเมธอด (หรือตัวแปร) ไม่ถูกทำเครื่องหมายด้วยตัวปรับแต่งใดๆ ก็จะถือว่ามี 'ตัวปรับแต่งเริ่มต้น' ตัวแปรหรือเมธอดที่มีตัวแก้ไขนั้น (เช่นไม่มีเลย) สามารถ มอง เห็นได้ในทุกคลาสในแพ็คเกจที่มีการประกาศ และสำหรับพวกเขาเท่านั้น โมดิฟายเออร์นี้บางครั้งเรียกว่าpackage-private
เป็นการบอกใบ้ว่าการเข้าถึงตัวแปรและเมธอดนั้นเปิดให้กับแพ็คเกจทั้งหมดที่มีคลาสของมันอยู่
4. protected
ตัวดัดแปลง
หากเมธอดถูกทำเครื่องหมายด้วยprotected
ตัวดัดแปลง จะสามารถเข้าถึงได้จากคลาสเดียวกัน แพ็คเกจเดียวกัน และลูกหลาน (คลาสที่สืบทอดคลาสที่มีการประกาศเมธอด) เราจะวิเคราะห์หัวข้อนี้อย่างละเอียดในภารกิจ Java Core"
"น่าสนใจ แต่ฉันไม่แน่ใจว่าฉันจะใส่ตัวดัดแปลงเหล่านี้ในตำแหน่งที่เหมาะสมทั้งหมดได้ทันทีหรือไม่
"คุณจะไปถึงที่นั่นอย่างค่อยเป็นค่อยไป ไม่ต้องกังวลล่วงหน้า จนกว่าคุณจะไปถึงจุดสิ้นสุดของภารกิจ Java Syntax คุณสามารถใช้ตัวปรับแต่งpublic
กับวิธีการทั้งหมดของคุณ (เช่นเดียวกับคลาสและตัวแปรอินสแตนซ์) คุณจะต้องใช้ ตัวดัดแปลงอื่นๆ เมื่อเราเริ่มเรียนรู้ OOP อย่างกระตือรือร้น"
"คุณช่วยอธิบายรายละเอียดเพิ่มเติมได้ไหมว่าทำไมต้องมีตัวดัดแปลงการเข้าถึง"
"พวกเขากลายเป็นสิ่งจำเป็นสำหรับโครงการขนาดใหญ่ที่เขียนโดยโปรแกรมเมอร์หลายสิบหลายร้อยคนในเวลาเดียวกัน
"บางครั้งมีสถานการณ์ที่โปรแกรมเมอร์ต้องการแยกเมธอดที่มีขนาดใหญ่เกินไปออกเป็นส่วนๆ และย้ายโค้ดบางส่วนไปเป็นวิธีตัวช่วย แต่ในขณะเดียวกัน เขาหรือเธอไม่ต้องการให้โปรแกรมเมอร์คนอื่นเรียกเมธอดตัวช่วยเหล่านี้ เนื่องจาก รหัสที่เกี่ยวข้องอาจทำงานไม่ถูกต้อง"
"ดังนั้นพวกเขาจึงคิดตัวแก้ไขการเข้าถึงเหล่านี้ขึ้นมา หากคุณทำเครื่องหมายเมธอดตัวช่วยด้วยคำว่าprivateจะไม่มีโค้ดอื่นนอกจากคลาสของคุณที่จะเห็นเมธอดตัวช่วยของคุณ"
"ฉันคิดว่าฉันเข้าใจ."
static
คำสำคัญ
"มีคำหลักที่น่าสนใจอีกคำหนึ่ง มันคือstatic
ไม่น่าแปลกใจเลย ที่ทำให้วิธีการคงที่"
"นั่นหมายความว่าอย่างไร?"
"ฉันจะบอกคุณเพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง ไม่ต้องกังวล สำหรับตอนนี้ พยายามจำข้อเท็จจริงสองสามข้อเกี่ยวกับวิธีการแบบสแตติก
ความจริง 1.วิธีการแบบคงที่ไม่ได้แนบกับวัตถุใด ๆ แต่เป็นของคลาสที่มีการประกาศแทน หากต้องการเรียกใช้เมธอดแบบคงที่ คุณต้องเขียน:
ClassName.MethodName()
ตัวอย่างของวิธีการแบบคงที่:
ชื่อชั้น | ชื่อเมธอดแบบสแตติก | |
---|---|---|
Thread.sleep() |
Thread |
sleep() |
Math.abs() |
Math |
abs() |
Arrays.sort() |
Arrays |
sort() |
ชื่อคลาสก่อนหน้าชื่อของเมธอดสแตติกสามารถละเว้นได้ หากคุณเรียกเมธอดสแตติกจากภายในคลาส นี่คือเหตุผลที่คุณไม่จำเป็นต้องเขียนSolution
ก่อนชื่อของแต่ละเมธอดแบบสแตติกที่ถูกเรียก
ความจริง 2วิธีการแบบคงที่ไม่สามารถเข้าถึงวิธีการที่ไม่ใช่แบบคงที่ของคลาสของตัวเอง เมธอดสแตติกสามารถเข้าถึงเมธอดสแตติกเท่านั้น ด้วยเหตุนี้ เราจึงประกาศเมธอดทั้งหมดที่เราต้องการเรียกจากเมธอดmain
สแตติก"
"ทำไมล่ะ?"
"คุณจะตอบคำถามนี้ด้วยตัวเองเมื่อคุณเริ่มเรียนรู้ OOP และเข้าใจว่าเมธอดสแตติกทำงานอย่างไร จนกว่าจะถึงตอนนั้น เชื่อฉันเถอะ
throws
คำสำคัญ
"มีคำหลักอีกคำหนึ่งที่คุณอาจเห็นในการประกาศเมธอด นั่นคือthrows
คำหลัก ซึ่งแตกต่างจากตัวแก้ไขการเข้าถึงและstatic
คำหลัก คำหลักนี้จะถูกวางไว้หลังพารามิเตอร์เมธอด:
public static Type name(parameters) throws Exception
{
method body
}
"แล้วมันหมายความว่ายังไง"
"ฉันต้องบอกคุณอีกครั้งว่า คุณจะได้เรียนรู้จุดประสงค์ที่แท้จริงของมันในภายหลัง เมื่อเราศึกษาข้อยกเว้น (ในระดับ 15)
แต่ถ้ามองอย่างผิวเผิน เราสามารถพูดได้ว่าเมธอดที่มีthrows
คีย์เวิร์ดกำกับไว้สามารถโยนข้อผิดพลาด (ข้อยกเว้น) ซึ่งหมายถึงอินสแตนซ์ของException
คลาส (และคลาสที่สืบทอดมา) หากเกิดข้อผิดพลาดหลายประเภทในชั้นเรียน คุณต้องระบุรายการแต่ละรายการโดยคั่นด้วยเครื่องหมายจุลภาค"
"ฟังดูลึกลับและเข้าใจยาก! ฉันจะต้องรอเลเวล 14"
วิธีการหลัก
"ตอนนี้มาดูเมธอดหลักให้ละเอียดยิ่งขึ้น คุณเข้าใจแล้วว่าบรรทัดที่มีการประกาศเมธอดซึ่งมีตัวดัดแปลงทั้งหมดจะส่งผลต่อวิธีการเรียกเมธอดนี้จากคลาสและเมธอดอื่นๆ นอกจากนี้ยังส่งผลต่อประเภทของ ผลลัพธ์เมธอดจะส่งคืนและระบุว่าข้อผิดพลาดใดที่เป็นไปได้เมื่อรัน
"บรรทัดดังกล่าวเรียกว่าการประกาศเมธอดและมีรูปแบบทั่วไปดังต่อไปนี้:
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()
อยู่ในวงเล็บ"
"อืม... ปรากฎว่าmain
เมธอดใช้อาร์กิวเมนต์ (!) พวกมันจะถูกส่งผ่านเป็นอาร์เรย์ของสตริง"
"ถูกต้อง และชื่อพารามิเตอร์args
ก็บ่งบอกถึง 'อาร์กิวเมนต์' ในใจของเรา เมื่อโปรแกรมเริ่มทำงาน คุณสามารถส่งอาร์กิวเมนต์ให้มันเป็นอาร์เรย์ของสตริง พวกมันจะถูกบรรจุอยู่ในอาร์เรย์args
ในmain()
เมธอด"
"โอ้โห! ฉันสงสัยเรื่องนี้ตอนที่เห็นครั้งแรก แต่หลังจากนั้นฉันก็ชินและเริ่มเขียนรายการพารามิเตอร์โดยไม่ต้องคิด"
"เราทุกคนเคยผ่านมาแล้ว ในที่สุด ข้อผิดพลาดที่ไม่สามารถจัดการได้ เช่นException
(หรือสิ่งที่ตามมา) สามารถเกิดขึ้นได้ในmain()
เมธอด เรารู้เรื่องนี้ด้วยthrows Exception
ส่วนหนึ่งของการประกาศ"
"ขอบคุณ Rishi ฉันไม่เข้าใจทุกอย่าง แต่สิ่งนี้น่าสนใจ"
"ยินดีต้อนรับ คุณจะต้องค่อย ๆ เข้าใจประเด็นที่ละเอียดอ่อนเหล่านี้ ฉันแน่ใจ"
GO TO FULL VERSION