บทความนี้วิเคราะห์ความแตกต่างระหว่างตัวแปรสมาชิกและตัวแปรท้องถิ่นใน Java พร้อมตัวอย่าง แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
ตัวแปรสมาชิก: ตัวแปรส่วนตัวที่กำหนดในคลาสนี้เป็นของคลาสนี้
สร้างและใช้ตัวแปรสมาชิกเพื่อคัดลอกรหัสดังต่อไปนี้: บุคคลคลาสสาธารณะ {
ชื่อสตริง;
เซ็กส์แบบมีสาย;
อายุจริง;
ความสูงสองเท่า;
โมฆะคงสาธารณะหลัก (String arges [])
-
บุคคล p=คนใหม่();
p.name="เสี่ยวหวง";
p.เพศ = "ชาย";
หน้าอายุ=20;
p.ความสูง=1.7;
System.out.println("ชื่อ:"+p.name+",เพศ"+p.เพศ+",อายุ:"+p.age+",อายุ:"+p.ความสูง);
-
-
กระบวนการเริ่มต้นตัวแปรสมาชิก
1. การเริ่มต้นคลาส
สำหรับการเริ่มต้นคลาส: โดยทั่วไปการเริ่มต้นคลาสจะเริ่มต้นได้เพียงครั้งเดียว และการเริ่มต้นคลาสส่วนใหญ่จะเตรียมใช้งานตัวแปรสมาชิกแบบคงที่
การคอมไพล์คลาสจะกำหนดกระบวนการเริ่มต้นของคลาส
ไฟล์คลาสที่สร้างโดยคอมไพเลอร์ส่วนใหญ่ทำการเปลี่ยนแปลงต่อไปนี้กับคลาสที่กำหนดในไฟล์ต้นฉบับ:
1) ขั้นแรกให้ประกาศตัวแปรสมาชิกภายในคลาสตามลำดับที่กำหนดตัวแปรสมาชิกแบบคงที่
2) เริ่มต้นตามลำดับการเริ่มต้นของตัวแปรสมาชิกในคลาส Java ดั้งเดิม
การแปลงที่สอดคล้องกันระหว่างคลาส Java และคลาสที่คอมไพล์มีดังนี้:
ไฟล์ต้นฉบับ:
คัดลอกโค้ดดังต่อไปนี้: บุคคลคลาสสาธารณะ {
ชื่อสตริงคงที่สาธารณะ = "จางซาน";
อายุ int คงที่สาธารณะ
คงที่{
อายุ=20;
System.out.println("อายุการเริ่มต้น");
-
ที่อยู่สตริงคงที่สาธารณะ
คงที่{
ที่อยู่ = "ปักกิ่ง";
อายุ=34;
-
โมฆะคงที่สาธารณะ main (String [] args) {
System.out.println (ชื่อ);
System.out.println (อายุ);
System.out.println (ที่อยู่);
-
-
เมื่อซอร์สโค้ด Java ถูกแปลงเป็นไฟล์คลาส มันจะถูกแปลงเป็นโค้ดที่คล้ายกับดังต่อไปนี้:
คัดลอกโค้ดดังต่อไปนี้: บุคคลคลาสสาธารณะ {
ชื่อสตริงคงที่สาธารณะ
อายุ int คงที่สาธารณะ
ที่อยู่สตริงคงที่สาธารณะ
คงที่{
name="จางซาน";
อายุ=20;
System.out.println("อายุการเริ่มต้น");
ที่อยู่ = "ปักกิ่ง";
อายุ=34;
-
โมฆะคงที่สาธารณะ main (String [] args) {
System.out.println (ชื่อ);
System.out.println (อายุ);
System.out.println (ที่อยู่);
-
-
ลำดับการเริ่มต้นจะดำเนินการตามลำดับตามลำดับการเริ่มต้นของตัวแปรสมาชิกคลาสที่สอดคล้องกันหลังการแปลง ดังนั้นตัวแปรสมาชิกคงที่ทั้งหมดจะถูกประกาศก่อนแล้วจึงกำหนด และลำดับของการกำหนดยังขึ้นอยู่กับลำดับที่ตัวแปรสมาชิกคงที่อยู่ด้วย เริ่มต้นในซอร์สโค้ด หมายเหตุ: การกำหนดตัวแปรสมาชิกและการกำหนดค่าเริ่มต้นโดยตรงจะเทียบเท่ากับการกำหนดค่าเริ่มต้นในบล็อกโค้ดแบบคงที่ ทั้งสองตามลำดับที่กำหนดไว้ในซอร์สโค้ด
ตัวแปรท้องถิ่น
ตัวแปรท้องถิ่น: สร้างขึ้นในเนื้อหาของวิธีการ ตัวแปรนี้ไม่สามารถเข้าถึงได้ภายนอกเนื้อหาของวิธีการ
การสร้างและการใช้ตัวแปรท้องถิ่น (ต้องกำหนดค่าตัวแปรท้องถิ่น ตัวแปรสมาชิกอาจไม่ได้กำหนดค่า)
คัดลอกโค้ดดังต่อไปนี้: บุคคลคลาสสาธารณะ {
โมฆะคงสาธารณะหลัก (String arges [])
-
ชื่อสตริง = "เสี่ยวหวาง";
สตริงเพศ = "ชาย";
อายุภายใน=20;
ความสูงสองเท่า=1.70;
System.out.println("ชื่อ:"+ชื่อ+",เพศ"+เพศ+",อายุ:"+อายุ+",อายุ:"+ส่วนสูง);
-
-
ดูตัวอย่างและคัดลอกรหัสดังนี้: PassTest ระดับสาธารณะ {
โมฆะคงที่สาธารณะ main (String args []) {
StringBuffer a = StringBuffer ใหม่ ("a");
StringBuffer b = StringBuffer ใหม่ ("b");
ก(ก, ข);
System.out.println(ก);
System.out.println(ข);
PassTest p = PassTest ใหม่ ();
พีซี();
-
โมฆะคงที่ a (StringBuffer a, StringBuffer b) {
a = a.ผนวก(b);
ข = ก;
-
-
ตามขอบเขตการใช้ตัวแปรท้องถิ่น ผลลัพธ์ควรเป็น ab แต่จริงๆ แล้วผลลัพธ์คือ ab b เพราะเหตุใด
เป็นคำถามเกี่ยวกับการส่งผ่านการอ้างอิงพารามิเตอร์ หากเป็นข้อมูลอ้างอิง สิ่งที่ส่งผ่านควรเป็นสำเนาของข้อมูลอ้างอิงเดียวกัน
b=a ในเมธอด a เปลี่ยนสำเนา b อ้างอิงเป็น =a แต่ไม่มีผลกับ b ใน main
a = a.append(b); ส่วนใหญ่เป็น a.append(b); ประโยคนี้เปลี่ยนค่าที่ชี้โดยการอ้างอิง เนื่องจาก a ใน main ยังชี้ไปที่วัตถุเดียวกัน ดังนั้นเอาต์พุตจึงเป็น ab b
ถ้า a = a.append(b); เปลี่ยนเป็น a = new StringBuffer("ab"); ab จะถูกส่งออก
ดูสองโปรแกรมต่อไปนี้:
ขั้นตอนที่หนึ่ง:
คัดลอกรหัสดังต่อไปนี้: ตัวแปรคลาสสาธารณะ
-
ฉัน;
การทดสอบเป็นโมฆะ ()
-
อินท์เจ=8;
ถ้า(เจ==ฉัน)
System.out.println("เท่ากัน");
อื่น
System.out.println("ไม่เท่ากัน");
-
โมฆะสาธารณะคง main (String [] args)
-
ตัวแปร v=ตัวแปรใหม่();
v.ทดสอบ();
-
-
ขั้นตอนที่สอง:
คัดลอกรหัสดังต่อไปนี้: ตัวแปรคลาสสาธารณะ
-
การทดสอบเป็นโมฆะ ()
-
ฉัน;
อินท์เจ=8;
ถ้า(เจ==ฉัน)
System.out.println("เท่ากัน");
อื่น
System.out.println("ไม่เท่ากัน");
-
โมฆะสาธารณะคง main (String [] args)
-
ตัวแปร v=ตัวแปรใหม่();
v.ทดสอบ();
-
-
โปรแกรมแรกเป็นเรื่องปกติและคอมไพล์โดยไม่มีข้อผิดพลาด เมื่อคอมไพล์โปรแกรมที่สองแล้ว ข้อผิดพลาดต่อไปนี้จะได้รับแจ้ง:
D:Programjavatest>javac Variable.java
Variable.java:9: ตัวแปร i อาจยังไม่ได้เตรียมใช้งาน
ถ้า(เจ==ฉัน)
-
ความผิดพลาด
สาเหตุที่ทำให้เกิดข้อผิดพลาดดังกล่าวเป็นเพราะ: ตัวแปรสมาชิกมีค่าเริ่มต้น (ซึ่งแก้ไขโดยขั้นสุดท้ายและไม่ใช่คงที่จะต้องถูกกำหนดอย่างชัดเจน) และตัวแปรท้องถิ่นจะไม่ถูกกำหนดโดยอัตโนมัติ
เนื้อหาของชั้นเรียนแบ่งออกเป็นสองส่วน ตัวแปรที่กำหนดในส่วนคำจำกัดความของตัวแปรเรียกว่าตัวแปรสมาชิกของคลาส และตัวแปรที่กำหนดในส่วนเนื้อหาของวิธีการและพารามิเตอร์ของวิธีการเรียกว่าตัวแปรท้องถิ่น
ความแตกต่างระหว่างตัวแปรโลคัลและตัวแปรสมาชิก
ตัวแปรท้องถิ่นอธิบายคุณลักษณะในเนื้อหาของวิธีการ ในขณะที่ตัวแปรสมาชิกอธิบายคุณลักษณะในวัตถุ
ตัวแปรสมาชิกสามารถแก้ไขได้โดยตัวแก้ไขสาธารณะ, ที่ได้รับการป้องกัน, ค่าเริ่มต้น, ส่วนตัว, คงที่ และสุดท้าย ในขณะที่ตัวแปรเฉพาะที่สามารถแก้ไขได้โดยตัวแก้ไขสุดท้ายเท่านั้น
ตัวแปรสมาชิกจะถูกสร้างขึ้นบนฮีป และตัวแปรท้องถิ่นจะถูกสร้างขึ้นบนสแต็ก
ตัวแปรโลคัลมีค่าเริ่มต้นของระบบ ตัวแปรโลคัลไม่มีค่าเริ่มต้นของระบบและต้องกำหนดด้วยตนเอง
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน