ระดับความรู้ที่จำเป็นในการทำความเข้าใจบทความ:ระดับเริ่มต้น คุณกำลังอยู่ในกระบวนการศึกษาภารกิจ Java Syntax และใกล้จะถึงระดับเริ่มต้นแล้ว
คุณเพิ่งเริ่มเรียนรู้ Java คุณถูกโจมตีด้วยคำศัพท์ราวกับมาจากความอุดมสมบูรณ์ คุณเต็มไปด้วยข้อมูลทางเทคนิคมากมาย และบางครั้งคุณอาจสับสนกับต้นสนสามต้น เชื่อฉันสิ ในเมื่อคุณได้มีส่วนร่วมในการเขียนโปรแกรม มันก็จะเป็นเช่นนั้นเสมอไป (ในขณะนี้ เสียงหัวเราะที่เป็นลางร้ายดังนอกจอ และเสียงเงียบ ๆ ตัดประโยคกลาง ๆ ออกไป กระซิบว่า “วิ่ง... ช่วยตัวเองไว้ก่อน” สายไปแล้ว..."). แมลงจะหลอกหลอนคุณไปตลอดชีวิตการเขียนโปรแกรม แม้ว่าคุณจะเป็น Developer ที่เก่งที่สุดก็ตาม อย่างไรก็ตาม นี่ไม่ได้น่ากลัวอย่างที่คิดเลย
หากคุณเพิ่งเริ่มเรียนรู้ JavaRush เป็นไปได้มากว่าคุณประสบปัญหาที่เกิดขึ้นในบทความแล้ว ไม่ว่าในกรณีใด เรายินดีรับฟังความคิดเห็นที่อธิบายถึงปัญหาที่คุณพบในช่วงเดือนแรกของการเรียนรู้ Java |
ปัญหาระดับ 0: สับสนกับตัวดำเนินการเปรียบเทียบ (==) และตัวดำเนินการกำหนด (=)
นี่เป็นปัญหาที่พบบ่อยมากสำหรับผู้ที่เปลี่ยนจากภาษาการเขียนโปรแกรมอื่น และโดยทั่วไปตั้งแต่ชั้นประถมศึกษาเราคุ้นเคยกับความจริงที่ว่า
(=)
นี่เป็นสัญญาณที่เท่าเทียมกัน เคล็ดลับง่ายๆ ที่สามารถใช้เพื่อจำได้คือ: หากคุณรู้ว่าคุณสนใจเพียงค่าใดค่าหนึ่ง (คุณกำหนดค่าหนึ่งให้กับค่าอื่น) คุณจะใช้เครื่องหมาย " " เดียว
=
มิฉะนั้น หากคุณสนใจตัวแปรทั้งหมด และค่า (คุณเปรียบเทียบ) คุณต้องมี
==
เครื่องหมาย " " สองเท่า
ปัญหา: การใช้ตัวดำเนินการเปรียบเทียบ (==) เพื่อทดสอบความเท่าเทียมกันของสตริง
สิ่งที่ต้องทำ:โปรดจำไว้ว่า
ไม่สามารถตรวจสอบออบเจ็กต์ Java เพื่อความเท่าเทียมกันได้โดยใช้(==)
เนื่องจากตัวดำเนินการนี้ได้รับการออกแบบมาเพื่อทดสอบความเท่าเทียมกันของประเภทดั้งเดิม
สำหรับวัตถุคุณต้องใช้
.equals()
. และ
String
ในภาษา Java มันไม่มีอะไรมากไปกว่าวัตถุ (และ
immutable
)
วัตถุที่ถูกทำเครื่องหมายเป็นImmutable คือวัตถุที่ไม่สามารถเปลี่ยนแปลงสถานะได้หลังจากการสร้าง ในJavaนี่หมายความว่าฟิลด์อินสแตนซ์ทั้งหมดของคลาสจะถูกทำเครื่องหมายเป็นfinal และเป็นแบบดั้งเดิม (หรือด้วยimmutable ) |
ปัญหา: การต่อสตริงในลูป
อย่าลองด้วยตัวเอง! แต่ละครั้งที่สตริงถูกต่อเข้าด้วยกัน ออบเจ็กต์ใหม่จะถูกสร้างขึ้น
String
(ดังที่เราพบข้างต้น สตริง
immutable
จะไม่เปลี่ยนรูป) เมื่อถึงจุดหนึ่ง หน่วยความจำจะหมดหรือโปรแกรมเริ่มใช้เวลานานเกินไปในการดำเนินการให้เสร็จสิ้น
สารละลาย. ใช้
StringBuilder
แทน
String
เมื่อเชื่อมต่อเนื้อหาในวง คลาสนี้
StringBuilder
ใช้เมื่อคุณต้องการเปลี่ยนแปลงสตริงอักขระจำนวนมาก และบรรทัดดังกล่าวไม่เหมือน
String
ไม่ใช่
immutable
ไม่ใช่
ปัญหา: NullPointerException
ข้อยกเว้นประเภทนี้เกิดขึ้นเมื่อเราพยายามใช้ตัวชี้ว่าง
null
แต่จริงๆ แล้วเราต้องการวัตถุจริง
ประเภทดั้งเดิมทั้งหมดมีค่าเริ่มต้น ดังนั้น y int คือ0 และy boolean คือ false ค่าเริ่มต้นของประเภทการอ้างอิงใดๆ ซึ่งก็คือออบเจ็กต์null คือ ไม่ใช่วัตถุหรือประเภท แต่เป็นค่าพิเศษ ซึ่งโดยพื้นฐานแล้วหมายความว่า "ไม่มีอะไรที่นี่" |
สิ่งที่ต้องทำ:หากโค้ดของคุณเขียนในลักษณะที่ออบเจ็กต์ของคุณสามารถยอมรับค่าได้
null
คุณจะต้องเพิ่ม "ตรวจสอบ
null
" โดยเฉพาะอย่างยิ่งหากคุณไม่ได้สร้างออบเจ็กต์ด้วยตัวเอง นอกจากนี้ โปรดจำไว้ว่า เป็นการดีกว่าที่จะส่งคืนคอลเล็กชันที่ว่างเปล่ามากกว่าชุดของ
null
's นอกจากนี้ยังเป็นการดีที่จะเพิ่มการตรวจสอบความถูกต้องสำหรับผู้ได้รับและผู้ตั้งค่า
ปัญหา: ด้วยเหตุผลบางประการ if / while / for loop ไม่ทำงาน
if (something.equals («что-то еще»)); {
System.out.println («Почему я не работаю???»);
}
เกิดอะไรขึ้นที่นี่? ง่ายมาก: เครื่องหมายอัฒภาคเพิ่มเติมทำให้โปรแกรมเมอร์ Java มือใหม่หลายแสนคนเสียไป คุณไม่ต้องการมันหลังจาก
if ()
นั้น จากมุมมองของภาษา ไวยากรณ์ดังกล่าวค่อนข้างยอมรับได้ ดังนั้นคอมไพเลอร์จะไม่บ่นเกี่ยวกับเรื่องนี้ แต่จะยุติคำสั่งแบบมีเงื่อนไข และโค้ดภายในบล็อก
{}
จะไม่เป็นไปตามเงื่อนไขข้างต้น
วิธีแก้ไข:จำตรรกะการออกแบบ เครื่องหมาย "
;
" หมายถึงจุดสิ้นสุดของช่วงตึกหนึ่ง แต่ที่นี่ทุกอย่างเพิ่งเริ่มต้น
ปัญหา: พยายามเข้าถึงตัวแปรสมาชิกที่ไม่คงที่จากวิธีการคงที่ (เช่น main)
สารละลาย . ปัญหานี้เกี่ยวข้องกับความเข้าใจในแนวคิดนั้น
static
เอง ถ้าเมธอดถูกทำเครื่องหมายด้วยคำนี้ หมายความว่าเราไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาสเพื่อเรียกเมธอดหลัก ดังนั้นวิธีแก้ปัญหาคือการมีความเข้าใจที่ดีเกี่ยวกับ "สถิตยศาสตร์" และเข้าใจสาระสำคัญของมัน
ปัญหา: พยายามสร้างวงล้อขึ้นมาใหม่โดยพัฒนาห้องสมุดและเครื่องมือที่มีอยู่แล้ว
สารละลาย. จริงๆ มันก็ไม่ได้เป็นปัญหามากนัก สำหรับมือใหม่ นี่เป็นแบบฝึกหัดที่มีประโยชน์มากกว่า อย่างไรก็ตาม หากคุณต้องการเน้นไปที่ผลลัพธ์ เช่น การสร้างฐานข้อมูลสมาชิกที่สะดวก การค้นหาสมาชิกในสมุดโทรศัพท์ก็เป็นเพียงหนึ่งในผลลัพธ์ของแอปพลิเคชันของคุณ ในกรณีนี้ ไม่จำเป็นต้องเขียนอัลกอริทึมการค้นหาแบบไบนารี ใช้อันที่มีอยู่ (เรารับรองว่ามีคนเขียนไว้ก่อนหน้าคุณแล้วและอยู่ในไลบรารีมาตรฐาน) ดังนั้นให้ศึกษาไลบรารีมาตรฐาน Java ในเอกสารประกอบของ Oracle เรียนรู้เกี่ยวกับ Google ทำความคุ้นเคยกับการอ่าน Stack Overflow และถามคำถามเกี่ยวกับ
ความช่วยเหลือ JavaRush ! ...แน่นอนว่านี่ไม่ใช่ปัญหาของมือใหม่ทั้งหมด อธิบายของคุณในความคิดเห็น!
คุณสนใจที่จะอ่านบทความที่เกี่ยวข้องกับ Java หรือไม่? เข้าร่วม กลุ่มนัก
พัฒนา Java มีสิ่งที่น่าสนใจมากมายที่นี่
GO TO FULL VERSION