ตัวอย่างเช่น เขียนโค้ดดังนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
ฉัน;
-
อินท์เจ=1;
ฉัน=เจ;
-
หากรหัสนี้มีอยู่ในพื้นที่คำจำกัดความของคลาส เราจะรู้ว่ามันเป็นบล็อกคำสั่งธรรมดาที่ใช้ในการเริ่มต้นเนื้อหาของแอตทริบิวต์คลาส มันจะถูกเรียกเมื่อมีการสร้างอินสแตนซ์ของคลาส และวิธีการบางอย่างสามารถดำเนินการได้ในนั้น
ในหลายกรณี ระบบจะใช้ในโหมดซิงเกิลตันและโหมดอื่นๆ เพิ่มสแตติกก่อนหน้าเพื่อเริ่มต้นเนื้อหาสำหรับคลาสที่ซับซ้อน ซึ่งสามารถหลีกเลี่ยงข้อยกเว้นรันไทม์บางอย่างที่เกิดจากลำดับการโหลดได้
แต่จะเกิดอะไรขึ้นถ้ารหัสนี้ปรากฏในวิธีการ?
โดยพื้นฐานแล้วมันไม่สมเหตุสมผลเลย ในความคิดก่อนหน้านี้ มันเป็นเพียงรูปแบบสำหรับการปิดล้อมโค้ด ไม่มีอะไรอื่น
วันนี้ฉันเขียนโค้ดเล็กๆ น้อยๆ ที่เกี่ยวข้องกับ "แท็กคำสั่ง":
คัดลอกรหัสรหัส ดังต่อไปนี้:
label17: int ฉัน;
อินท์เจ;
ThreadGroup[] arrayOfThreadGroup;
ถ้า (ธง)
ทำลายฉลาก17;
กลับ 0;
ข้อยกเว้น "ข้อผิดพลาดทางไวยากรณ์บนโทเค็น ///, { คาดว่าหลังจากโทเค็นนี้" เกิดขึ้นที่ตำแหน่ง ///
กล่าวคือ เมื่อโค้ดไม่สามารถอยู่ในบรรทัดเดียวได้ (int i ต้องมีการสร้างอินสแตนซ์/ตำแหน่งการกำหนดที่ชัดเจนภายในเนื้อหาของเมธอด) label17 จะต้องถูกทำเครื่องหมายด้วยบล็อกคำสั่ง
รูปแบบที่ถูกต้องคือ:
คัดลอกรหัสรหัส ดังต่อไปนี้:
ป้ายกำกับ17: {
ฉัน;
อินท์เจ;
ThreadGroup[] arrayOfThreadGroup;
ถ้า (ธง)
ทำลายฉลาก17;
กลับ 0;
-
หรือ:
ฉลาก 17:
ฉัน;
อินท์เจ;
ThreadGroup[] arrayOfThreadGroup;
ถ้า (ตั้งค่าสถานะ){
ทำลายฉลาก17;
กลับ 0;}
ลองดูการใช้งานที่ไม่ถูกต้อง:
คัดลอกรหัสรหัส ดังต่อไปนี้:
label13: int x = 0;
แน่นอนว่ามีบล็อกคำสั่งบรรทัดเดียวเริ่มต้นอยู่หลังป้ายกำกับ x นี้ไม่สามารถใช้ที่ใดก็ได้ในอนาคต ข้อผิดพลาด เคล็ดลับมีดังนี้:
มีเครื่องหมายหลายอันที่บรรทัดนี้
- x ไม่สามารถแปลงเป็นตัวแปรได้
- ข้อผิดพลาดทางไวยากรณ์บนโทเค็น "int" ลบโทเค็นนี้
มีสองรูปแบบที่ถูกต้อง:
คัดลอกรหัสรหัส ดังต่อไปนี้:
อินท์ x = 0;
ป้ายกำกับ13: x = 0;
หรือ
label13:{ int x = 0;}
ดังนั้นฉันจึงคาดการณ์ว่าความเข้าใจผิดก่อนหน้านี้คือในการใช้งานเช่น for(){} และ if(){} ตรรกะ if() และคำสั่ง block {} ควรเป็นสองไวยากรณ์ที่เป็นอิสระ