1. ค่าคงที่
ภาษาโปรแกรมอื่นๆ จำนวนมากมีค่าคงที่ นั่นคือตัวแปรที่ไม่สามารถเปลี่ยนค่าได้ โดยปกติจะใช้กับสิ่งพื้นฐานบางอย่าง เช่น จำนวนPi
หรือจำนวนวันในเดือนต่างๆ ของปี ตามหลักการแล้ว โปรแกรมเมอร์สามารถสร้างตัวแปรใดๆ ให้เป็นค่าคงที่ได้ ถ้าเขาหรือเธอตัดสินใจว่าจำเป็นต้องทำเช่นนั้น
คุณจะประกาศตัวแปรที่ไม่เปลี่ยนรูป (ค่าคงที่) ใน Java ได้อย่างไร มีคำหลักพิเศษสำหรับสิ่งนี้: final
. การสร้างตัวแปรที่ไม่เปลี่ยนรูปมีลักษณะเหมือนกับการสร้างตัวแปรธรรมดา ข้อแตกต่างเพียงอย่างเดียวคือก่อนประเภทตัวแปร คุณต้องเขียนคำว่าfinal
แบบนี้:
final Type name = value;
หากคุณพยายามกำหนดค่าอื่นให้กับfinal
ตัวแปร โปรแกรมของคุณก็จะไม่คอมไพล์
ตัวแปรfinal
ต้องได้รับการเตรียมใช้งาน (ต้องกำหนดค่าให้กับตัวแปร) เมื่อมีการประกาศ มีข้อยกเว้นประการหนึ่งสำหรับกฎนี้: คุณสามารถย้ายการกำหนดค่าเริ่มต้นของตัวแปรคลาสสแตติกไปยังตัวสร้าง แต่คุณจะได้เรียนรู้เกี่ยวกับเรื่องนี้ในระดับ 10
เพื่อลดจำนวนคีย์เวิร์ด นักพัฒนา Java ใช้คำนี้final
มากกว่าการประกาศค่าคงที่ final
สามารถใช้กับเมธอดและแม้แต่คลาส เมธอดที่ประกาศเป็นfinal
ไม่สามารถแทนที่ได้ และคลาสที่ประกาศเป็นfinal
ไม่สามารถสืบทอดได้
ตัวfinal
ดัดแปลงอาจถูกเพิ่มก่อนตัวแปรใดๆ: ตัวแปรโลคัล พารามิเตอร์เมธอด ฟิลด์คลาส และตัวแปรคลาสสแตติก
โปรดทราบว่าfinal
ก่อนหน้าชื่อตัวแปรเป็นเพียงการป้องกันการเปลี่ยนแปลงใดๆ กับตัวแปรนั้น หากตัวแปรเก็บการอ้างอิงถึงอ็อบเจกต์ ก็ยังสามารถเปลี่ยนแปลงออบเจกต์ได้
ตัวอย่าง:
|
เราสร้างอาร์เรย์ ไม่อนุญาต:ตัวแปร data ถูกประกาศเป็นfinal . แต่คุณสามารถทำได้ และสิ่งนี้ด้วย |
ค่าคงที่ทั่วโลก
หากคุณตัดสินใจที่จะประกาศ ค่าคงที่ส่วนกลางในโปรแกรมของคุณ คุณต้องสร้างตัวแปรคลาสสแตติกและสร้างตัวแปรเหล่านั้นpublic
และ final
มีลักษณะพิเศษสำหรับชื่อของตัวแปรดังกล่าว: พวกมันเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมดโดยใช้อักขระขีดล่างเพื่อแยกคำ
ตัวอย่าง:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. เงาตัวแปร
อย่างที่เราพูดไปก่อนหน้านี้ คุณไม่สามารถสร้างตัวแปรโลคัลหลายตัวที่มีชื่อเดียวกันในเมธอดเดียวกันได้ ในวิธีการต่าง ๆ คุณสามารถทำได้
แต่นี่คือสิ่งที่คุณอาจไม่ทราบ: ตัวแปรอินสแตนซ์และตัวแปรเมธอดโลคัลสามารถมีชื่อเดียวกันได้
ตัวอย่าง:
รหัส | การมองเห็นที่เปลี่ยนแปลงได้ |
---|---|
|
|
ในadd
เมธอด เราประกาศตัวแปรโลคัลsum
ชื่อ จนกว่าจะสิ้นสุดเมธอด มันจะแรเงา (หรือมาสก์ ) sum
ตัวแปรอินสแตนซ์
โอเค คุณว่านั่นเป็นสิ่งที่คาดหวังในแง่หนึ่ง แต่นั่นไม่ใช่จุดสิ้นสุดของเรื่องราว ปรากฎว่าหากตัวแปรอินสแตนซ์ถูกเงาโดยตัวแปรโลคัล ก็ยังมีวิธีอ้างอิงถึงตัวแปรอินสแตนซ์ภายในเมธอด เราทำได้โดยเขียนthis
คำหลักไว้หน้าชื่อ:
this.name
ต่อไปนี้คือตัวอย่างที่สามารถแก้ไขความขัดแย้งของชื่อได้สำเร็จ:
รหัส | การมองเห็นที่เปลี่ยนแปลงได้ |
---|---|
|
|
ตัวแปรcount
และsum
มีอยู่ทุกที่โดยมีหรือไม่มีthis
คำสำคัญ ในบรรทัดที่sum
ตัวแปรโลคัลแสดงsum
ตัวแปรอินสแตนซ์sum
ตัวแปรอินสแตนซ์สามารถเข้าถึงได้โดยใช้this
คำหลัก เท่านั้น
ถ้าตัวแปรคลาสสแตติกแทนที่จะเป็นตัวแปรอินสแตนซ์ถูกทำเงา คุณต้องเข้าถึงผ่านชื่อคลาสแทนการใช้คีย์เวิร์ดthis
:
ClassName.name
ตัวอย่าง:
รหัส | การมองเห็นที่เปลี่ยนแปลงได้ |
---|---|
|
|
คุณสามารถเข้าถึง ตัวแปร count
และsum
สแตติกได้ทุกที่โดยมีหรือไม่ใช้ชื่อคลาสSolution
เป็นคำนำหน้า ในบรรทัดที่sum
ตัวแปรโลคัลเงาsum
ตัวแปรอินสแตนซ์ การเข้าถึงsum
ตัวแปรอินสแตนซ์จะทำได้ก็ต่อเมื่อใช้Solution
เป็นคำนำหน้า เท่านั้น
3. ตัวแปรภายในfor
ลูป
และอีกหนึ่งข้อเท็จจริงเล็ก ๆ แต่น่าสนใจ
นอกจากนี้ยังมีตำแหน่งที่มีการประกาศตัวแปรในลักษณะพิเศษ — ภายในลูfor
ป
คุณอาจจำได้ว่าfor
โดยทั่วไปลูปจะมีตัวแปรตัวนับอยู่ในวงเล็บ และการมองเห็นของตัวแปรนี้จะเป็นอย่างไร? ท้ายที่สุดมันไม่ได้อยู่ในเนื้อหาของลูป มันเป็นวิธีการทั้งหมดหรือไม่? หรือไม่?
คำตอบที่ถูกต้องคือ: ตัวแปรที่ประกาศในส่วนหัวของลูfor
ปจะมองเห็นได้เฉพาะในเนื้อหาของลูปและในส่วนหัวของfor
ลูป
ตัวอย่าง:
รหัส | การมองเห็นที่เปลี่ยนแปลงได้ |
---|---|
|
|
ดังนั้น คุณสามารถเขียนลูปซ้ำแล้วซ้ำอีกในโค้ดของคุณ และใช้ตัวแปรตัวนับที่มีชื่อเดียวกัน ซึ่งจะไม่สร้างปัญหาใดๆ
ตัวอย่าง:
รหัส | การมองเห็นที่เปลี่ยนแปลงได้ |
---|---|
|
|
GO TO FULL VERSION