1. ใน Java ไม่มีคำสั่ง goto เนื่องจากการใช้คำสั่ง GOTO จำนวนมากจะลดความสามารถในการอ่านและการบำรุงรักษาของโปรแกรมภาษา Java จึงยกเลิกการใช้ GOTO ในเวลาเดียวกันเพื่อหลีกเลี่ยงความสับสนที่เกิดจากโปรแกรมเมอร์ที่ใช้ goto ด้วยตัวเองภาษา Java ยังคงกำหนด goto เป็นคำหลัก แต่ไม่ได้กำหนดไวยากรณ์ใด ๆ ดังนั้นจึงเรียกว่า "คำที่สงวนไว้"
2 แม้ว่าจริงเท็จและโมฆะจะแสดงในสีที่แตกต่างกันใน IDE พวกเขาไม่ใช่คำหลัก แต่ "ค่าคงที่ตัวอักษร" เช่นเดียวกับ ABC ของประเภทสตริง
3 พยายามหลีกเลี่ยงการใช้ $ เมื่อกำหนดชื่อเพราะเมื่อคอมไพเลอร์คอมไพล์ไฟล์. java มันจะรวบรวม "$" ลงในตัวเชื่อมต่อของประเภทระดับบนสุดและประเภทระดับล่าง ดูตัวอย่างต่อไปนี้:
เมื่อรวบรวม (javac test3.java) รหัสนี้คอมไพเลอร์จะรายงานข้อผิดพลาดต่อไปนี้: test.java:12: ข้อผิดพลาด: การทำซ้ำคลาส: com.javastack.test.outer.inner คลาสภายใน { ^ ^
4 อักขระ Unicode Escape จะถูกประมวลผลเร็วมากก่อนที่จะแยกวิเคราะห์โปรแกรม ตัวอย่างเช่น:
ข้อผิดพลาดในการรวบรวมรหัสสองบรรทัดนี้เกิดขึ้นในโปรแกรม รหัส Unicode ทั้งสองนี้แสดงถึง "Line Wrap" และ "Carriage Return" ตามลำดับดังนั้นเมื่อคอมไพเลอร์คอมไพล์รหัสจะเป็นแบบนี้:
5 รหัส Unicode ถูกเข้ารหัสโดยใช้อักขระ 16 บิตและแสดงโดยประเภทถ่านใน Java UNICODE ได้ขยายไปถึงหนึ่งล้านอักขระและตัวที่เกินขีด จำกัด 16 บิตกลายเป็นอักขระเสริม อักขระเสริมทั้งหมดไม่สามารถแสดงด้วยค่าคงที่อักขระ
6 เมื่อสั้น ๆ , BYTE, Char เข้าร่วมในการดำเนินการผลลัพธ์คือประเภท int ไม่เหมือนกับประเภทที่สูงกว่า หากตัวแปรเป็นไบต์ประเภทสั้นและไบต์เมื่อได้รับการกำหนดค่าคงที่จากเวลาคอมไพล์และค่าคงที่ไม่เกินช่วงค่าของตัวแปรคอมไพเลอร์สามารถทำการแปลงการหดตัวโดยนัย การแปลงการหดตัวโดยนัยนี้มีความปลอดภัยเนื่องจากการแปลงหดตัวจะใช้กับการกำหนดตัวแปรเท่านั้นไม่ใช่การเรียกใช้คำสั่งการเรียกใช้วิธีการไม่ให้พารามิเตอร์ผ่านระหว่างการเรียกใช้วิธีการ (ดูปัญหาเล็ก ๆ ที่มีการแปลงประเภทเริ่มต้นใน Java สำหรับรายละเอียด)
7 หมายเหตุประเภทถ่านซึ่งเป็นประเภทที่ไม่ได้ลงชื่อ ดังนั้นการแปลงระหว่างถ่านและสั้นหรือถ่านและไบต์จะต้องแสดงโดยใช้การแปลงประเภท การแปลงจากไบต์เป็นถ่านเป็นการเปลี่ยนการหดตัวแบบขยายนั้นค่อนข้างพิเศษนั่นคือการแปลงจะถูกขยายเป็นไบต์เป็น int ก่อนแล้วหดเป็นถ่าน
8 ในการแปลงเพิ่มเติมระหว่างข้อมูลจำนวนเต็มหากตัวถูกดำเนินการเป็นประเภทถ่าน (ประเภทที่ไม่ได้ลงนาม) การขยายที่ไม่ได้ลงนามจะดำเนินการโดยมีบิตขยายเป็น 0 ถ้าตัวถูกดำเนินการเป็นไบต์สั้นหรือ int (ประเภทที่ลงนาม) การขยายลงนามจะดำเนินการ
9 การแปลงที่หดตัวระหว่างข้อมูลจำนวนเต็มนั้นเป็นเพียงการตัดทอนและทิ้งบิตที่สูงโดยไม่ต้องทำการประมวลผลอื่น ๆ
10 0.1+0.2 ไม่เท่ากับ 0.3System.out.println ((สองเท่า) 0.1+ (สองเท่า) 0.2); ผลลัพธ์ผลลัพธ์ของคำสั่งนี้คือ 0.30000000000000000000004 เนื่องจากคอมพิวเตอร์ใช้ไบนารีเพื่อจัดเก็บข้อมูลและทศนิยมจำนวนมากไม่สามารถแสดงได้อย่างถูกต้องในไบนารี (อันที่จริงทศนิยมส่วนใหญ่เป็นประมาณ) เช่นเดียวกับการใช้ทศนิยมทศนิยมไม่สามารถแสดงได้อย่างแม่นยำ 1/3 ประเภทจุดลอยตัวส่วนใหญ่เก็บค่าของพวกเขาไว้ในคอมพิวเตอร์โดยประมาณแทนที่จะเป็นประเภทจำนวนเต็มอย่างแม่นยำ อีกตัวอย่างหนึ่งคือการวนซ้ำที่ตายแล้ว: สำหรับ (float f = 10.1f; f! = 11; f+= 0.1f) {}
11 ประเภทการลอยตัวสามารถรักษาตัวเลขที่สำคัญ 7 ถึง 8 ในขณะที่ประเภทสองเท่าสามารถรักษาตัวเลขที่สำคัญได้ 15 ถึง 16 ดังนั้นเมื่อค่าของประเภท int หรือประเภทยาวมากกว่าจำนวนที่ถูกต้องของ double หรือ float บางส่วนที่สำคัญที่สุดของค่าจะหายไปทำให้สูญเสียความแม่นยำ ในเวลานี้โหมดการปัดเศษล่าสุดของ IEEE754 จะถูกใช้เพื่อแยกค่าจุดลอยตัวใกล้กับค่าจำนวนเต็มมากที่สุด แม้ว่าการแปลงจากจำนวนเต็มเป็นประเภทจุดลอยตัวเป็นการแปลงที่ขยายออกไปเมื่อค่ามีขนาดใหญ่หรือเล็ก (ค่าสัมบูรณ์มีขนาดใหญ่) การสูญเสียความแม่นยำบางอย่างจะเกิดขึ้น
12 วิธีการคำนวณ i ++ j? (คำถามนี้ไม่มีความหมายมากที่จะพูดคุยใน C/C ++) เนื่องจาก C/C ++ ขึ้นอยู่กับการใช้งานโครงสร้างฮาร์ดแวร์และผลลัพธ์จะแตกต่างกันในสภาพแวดล้อมที่แตกต่างกัน อย่างไรก็ตามใน Java ผลลัพธ์นี้ได้รับการแก้ไขและไม่ได้รับผลกระทบจากสภาพแวดล้อมฮาร์ดแวร์และแพลตฟอร์มที่ทำงานอยู่) คำตอบ: ตามกฎความโลภด้านหน้า + + + ดีกว่าย้อนกลับ + + และผลลัพธ์คือ (i ++) + j
13 i ++ และ ++ ฉันเป็น +1 ก่อนแล้วจึงกำหนด ++ ฉันไม่มีอะไรจะพูด i ++ รับ j = i ++; ตัวอย่างเช่นการใช้งานในระดับพื้นฐานคือ: temp = i; i = i + 1; j = อุณหภูมิ; ดังนั้นฉัน = 15; i = i ++; ผลลัพธ์ของนิพจน์นี้คือ 15 (เพราะหลังจากเพิ่มหนึ่งการมอบหมายอื่นจะดำเนินการเปลี่ยนจาก 16 เป็น 15)
14 +0 และ -0 ในที่เก็บข้อมูลตัวแปรประเภทลอยจุดบิตเครื่องหมายแตกต่างกัน เมื่อ -0 และ +0 มีส่วนร่วมในการดำเนินการที่เกี่ยวข้องของประเภทจุดลอยตัว (เช่นการแบ่งและการดำเนินการที่เหลือ) สามารถผลิตผลลัพธ์ที่แตกต่างกันได้
15 การแบ่งเฟสและการคำนวณยอดคงเหลือของจุดลอยตัวนั้นแตกต่างจากการแบ่งเฟสและการคำนวณยอดคงเหลือของจำนวนเต็ม เมื่อตัวหารคือ 0 การดำเนินการจุดลอยตัวจะไม่สร้างข้อยกเว้น arithmeticexception
16 คลาสสตริงเป็นคลาสที่ไม่สามารถใช้งานได้และเมื่อสร้างวัตถุแล้วพวกเขาจะไม่สามารถทำลายได้ วิธีการที่ดูเหมือนจะปรับเปลี่ยนลำดับอักขระในคลาสสตริงจะส่งคืนวัตถุสตริงที่สร้างขึ้นใหม่แทนที่จะแก้ไขวัตถุของตัวเอง
17 เนื่องจากวัตถุสตริงไม่เปลี่ยนรูปพวกเขาจึงปลอดภัยและสามารถนำไปใช้ได้อย่างอิสระสำหรับการแบ่งปัน
18 ภายในคลาสสตริงจะใช้อาร์เรย์อักขระ (ถ่าน []) เพื่อรักษาลำดับอักขระ ความยาวสูงสุดของสตริงคือความยาวสูงสุดของอาร์เรย์อักขระ ในทางทฤษฎีความยาวสูงสุดคือค่าสูงสุดของประเภท int นั่นคือ 2147483647 ในทางปฏิบัติค่าสูงสุดที่สามารถรับได้โดยทั่วไปจะน้อยกว่าค่าสูงสุดทางทฤษฎี
19 วิธีการหลัก () โดยทั่วไปเหมือนกับวิธีอื่น ๆ ในแง่ของพฤติกรรมประสิทธิภาพ มันสามารถมากเกินไปเรียกว่าสืบทอดถูกซ่อนอยู่โดยวิธีอื่น ๆ หรือมีข้อยกเว้นโยนด้วยพารามิเตอร์ประเภท นอกจากนี้เรายังสามารถเรียกวิธีการหลัก (หรือวิธีอื่น ๆ ) ผ่านการสะท้อนในโปรแกรม
20 เมื่อชื่อของสองวิธีขึ้นไปเหมือนกันและรายการพารามิเตอร์จะแตกต่างกันวิธีการเหล่านี้ถือเป็นการโอเวอร์โหลดมากเกินไป วิธีการโอเวอร์โหลดสามารถแยกแยะได้ตามประเภทที่สอดคล้องกับรายการพารามิเตอร์และจำนวนพารามิเตอร์ อย่างไรก็ตามชื่อของพารามิเตอร์ประเภทการส่งคืนของเมธอดรายการข้อยกเว้นและพารามิเตอร์ประเภทของวิธีการไม่สามารถใช้เป็นเงื่อนไขเพื่อแยกความแตกต่างของวิธีการโอเวอร์โหลด
21 วิธีใดในการเลือกโทรคำสั่งซื้อมีดังนี้:
22 ความแตกต่างที่สำคัญระหว่างการเขียนใหม่และที่ซ่อนอยู่คือการเขียนใหม่นั้นถูกผูกมัดแบบไดนามิกและสมาชิกของคลาสที่เกี่ยวข้องจะถูกกำหนดตามประเภทจริงของวัตถุที่ชี้ไปที่การอ้างอิงรันไทม์ การซ่อนจะถูกผูกไว้แบบคงที่และสมาชิกที่เกี่ยวข้องของการโทรจะถูกกำหนดตามประเภทคงที่ที่อ้างอิงในเวลาคอมไพล์ กล่าวอีกนัยหนึ่งหาก subclass แทนที่วิธีการของคลาสแม่เมื่อการอ้างอิงของคลาสหลักชี้ไปที่วัตถุคลาสเด็กวิธี subclass จะถูกเรียกผ่านการอ้างอิงของคลาสแม่ หากคลาสเด็กซ่อนวิธีการของคลาสแม่ (ตัวแปรสมาชิก) วิธีการของคลาสแม่ (ตัวแปรสมาชิก) ยังคงถูกเรียกผ่านการอ้างอิงถึงคลาสแม่
23 ตัวสร้างเรียกว่าซ้ำ ตัวสร้างของคลาสย่อยจะเรียกตัวสร้างของคลาสแม่จนตัวสร้างของคลาสวัตถุเรียกว่า
24 ตัวสร้างไม่ได้สร้างวัตถุ ตัวสร้างถูกเรียกโดยระบบเมื่อสร้างวัตถุโดยใช้ใหม่และใช้เพื่อเริ่มต้นสมาชิกอินสแตนซ์ของคลาส ในลำดับวัตถุจะถูกสร้างขึ้นก่อนจากนั้นตัวสร้างจะถูกเรียก (ตัวสร้างไม่ได้สร้างวัตถุใหม่)
25 ตัวสร้างเริ่มต้นไม่ว่างเปล่า ตัวสร้างนี้จะเรียกตัวสร้างพารามิเตอร์แบบไม่มีพารามิเตอร์และอาจดำเนินการเริ่มต้นของตัวแปรสมาชิกอินสแตนซ์ ดังนั้นตัวสร้างเริ่มต้นจึงเรียกตัวสร้างอย่างน้อยตัวสร้างของคลาสแม่และอาจทำงานได้มากขึ้นรวมถึงการเริ่มต้นการประกาศตัวแปรอินสแตนซ์และบล็อกการเริ่มต้นอินสแตนซ์ทั้งสองที่ดำเนินการในคอนสตรัคเตอร์
26 เมื่อประเภทของตัวถูกดำเนินการทั้งสองของ == หรือ! = ตัวดำเนินการเป็นหนึ่งในประเภทข้อมูลพื้นฐานและอีกประเภทหนึ่งคือประเภทอ้างอิงคลาส wrapper การยกเลิกการบรรจุประเภทการอ้างอิงลงในชนิดข้อมูลพื้นฐานแล้วเปรียบเทียบว่าค่าของประเภทข้อมูลพื้นฐานทั้งสองเท่ากันหรือไม่
27 ใน Java อาร์เรย์เป็นคลาสและตัวแปรอ้างอิงที่ประกาศโดยอาร์เรย์ชี้ไปที่วัตถุประเภทอาร์เรย์ อาร์เรย์ทั้งหมดสืบทอดคลาสวัตถุและใช้ java.lang.cloneable และ java.io.serializable อินเตอร์เฟส สมาชิกของอาร์เรย์รวมถึงความยาวตัวแปร (มีอยู่โดยปริยาย) และสมาชิกที่สืบทอดมาจากคลาสวัตถุ cloneable และ serializable เป็นสองอินเทอร์เฟซที่ทำเครื่องหมายไว้และไม่มีการประกาศสมาชิกอย่างชัดเจนในอินเทอร์เฟซเหล่านี้
28 อินเทอร์เฟซเป็นการออกแบบที่เป็นนามธรรมอย่างสมบูรณ์และไม่สามารถสร้างอินสแตนซ์ได้ ประเภทข้อแก้ตัวที่สร้างขึ้นโดยวิธีใหม่คือการสร้างคลาสที่ไม่ระบุชื่อซึ่งใช้ประเภทอินเตอร์เฟส
29 หากอินเทอร์เฟซสองตัวประกาศตัวแปร X เดียวกันข้อผิดพลาดในการรวบรวมจะเกิดขึ้นเมื่ออินเทอร์เฟซสืบทอดอินเตอร์เฟสทั้งสองในเวลาเดียวกันหรือคลาสที่แน่นอนจะใช้อินเทอร์เฟซทั้งสองในเวลาเดียวกัน
30 หากวิธีการ M ของชื่อเดียวกันถูกประกาศในทั้งสองอินเตอร์เฟสและทั้งสองวิธีไม่ถือว่าโอเวอร์โหลดเมื่ออินเทอร์เฟซสามารถสืบทอดอินเทอร์เฟซทั้งสองในเวลาเดียวกันหรือคลาสบางประเภทสามารถสืบทอดอินเตอร์เฟสทั้งสองในเวลาเดียวกันจะต้องมีวิธีการที่จะต้องใช้วิธีการกลับประเภท ประเภทของสองวิธี M