เหตุใดจึงมีการตรวจสอบกับข้อยกเว้นที่ไม่ได้ตรวจสอบซึ่งเรียกว่า“ การโต้เถียง” ในบทช่วยสอนของ Oracle Java


10

ฉันยังใหม่กับ Java และได้อ่านเอกสารเกี่ยวกับข้อยกเว้น และโดยเฉพาะอย่างยิ่งข้อยกเว้นที่ไม่ได้ตรวจสอบ -หน้าการโต้เถียง

บรรทัดล่างพูดว่า:

หากลูกค้าสามารถคาดว่าจะกู้คืนจากข้อยกเว้นให้มันเป็นข้อยกเว้นที่ตรวจสอบ หากลูกค้าไม่สามารถทำอะไรเพื่อกู้คืนจากข้อยกเว้นให้เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ

ฉันไม่เข้าใจบทความ “ การโต้เถียง” คืออะไรเกี่ยวกับ? คุณอธิบายมันด้วยคำง่าย ๆ ได้ไหม?




โปรดดูคำถามที่อัปเดตแล้วฉันไม่คิดว่ามันจะซ้ำกัน :)
ABcDexter

3
"ฉันพยายามอ่าน" - เกิดอะไรขึ้น
ไร้ประโยชน์

2
มันถูกเรียกว่าอย่างนั้นเพราะมีการถกเถียงกันมากมายในหัวข้อนั้น ดูเพิ่มเติมคำถาม StackOverflow นี้: กรณีต่อต้านการตรวจสอบข้อยกเว้นซึ่งกล่าวถึงคำพูดไม่กี่คำของคนที่มีชื่อเสียง / ผู้มีอิทธิพล
Hulk

คำตอบ:


3

ฉันจะให้ตัวอย่างก่อน (แต่ท้ายที่สุดคือคำตอบว่าทำไมการทะเลาะวิวาท)

ให้คุณทำการแก้ไขเอกสารในเครื่องมือแก้ไขเอกสารที่ใช้ Java และหลังจากที่คุณทำเสร็จแล้วให้คุณเลือกไฟล์ -> บันทึกเป็น ... และคุณเลือกที่จะบันทึกเอกสารลงในไดรฟ์ข้อมูลที่คุณไม่ได้รับอนุญาตให้เขียน ตัวแก้ไขจะไม่ผิดพลาดกับคุณด้วย stacktrace ที่น่าเกลียดมันจะบอกคุณว่ามันไม่สามารถบันทึกไฟล์ได้และมันจะช่วยให้คุณสามารถแก้ไขและ / หรือบันทึกไปยังตำแหน่งอื่นได้

ในกรณีเช่นนี้อาจเป็นข้อยกเว้นที่ตรวจสอบซึ่งคาดว่าจะถูกจับและดำเนินการเพื่อกู้คืนจากพระคุณอย่างงดงาม

ในทางตรงข้าม suposse เหล่านี้หารด้วยศูนย์หรือข้อยกเว้นตัวชี้โมฆะที่เกิดจากข้อผิดพลาดการเขียนโปรแกรมที่ rears หัวน่าเกลียดเฉพาะในเงื่อนไขบางอย่าง ที่อาจเกิดขึ้นได้ทุกที่ในรหัสแรมสามารถเสียหาย ฯลฯ ไม่มี API doc จะบอกคุณ"วิธีการนี้จะโยนหารด้วยศูนย์ถ้า RAM เสียหาย"

ข้อยกเว้นที่ตรวจสอบควรเป็นส่วนหนึ่งของการออกแบบและผู้ใช้ของ API นั้นควรเตรียมที่จะจัดการ ข้อยกเว้นที่ไม่ได้ตรวจสอบอาจเกิดขึ้นได้เกือบทุกที่และอยู่นอกเหนือการควบคุมของเรา

การโต้เถียงเกิดขึ้นจากโปรแกรมเมอร์โดยใช้ข้อยกเว้นที่ไม่ได้ตรวจสอบ (ขยายจาก RuntimeException) เมื่อพวกเขาควรจะใช้ข้อยกเว้นที่เลือก:

  • เหมือนชอร์คัทเพื่อไม่ให้คอมไพเลอร์รบกวน
  • เพื่อทำให้ลายเซ็นของพวกเขาดูง่ายขึ้น
  • เนื่องจากพวกเขาพิจารณาว่าข้อยกเว้นที่ตรวจสอบนั้นเป็นปัญหาการพึ่งพา (ถ้าคุณส่งข้อยกเว้นที่ตรวจสอบใหม่ในคลาสที่ใช้งานคุณควรแก้ไขลายเซ็นของอินเทอร์เฟซ) และ viceversa

"คุณควรแก้ไขลายเซ็นของอินเทอร์เฟซ" - ดีคุณถูกบังคับให้ทำเช่นนั้นโดยคอมไพเลอร์และคุณจะต้องจัดการหรือประกาศว่าจะถูกโยนลงในแต่ละไซต์การโทร
Hulk

3
การที่แอปพลิเคชัน UI จัดการข้อผิดพลาดได้อย่างเหมาะสมหรือไม่นั้นขึ้นอยู่กับว่าโปรแกรมเมอร์เขียนรหัสได้ดีเพียงใด พวกเขาสามารถเขียนรหัสได้ด้วยวิธีนั้นโดยมีข้อยกเว้นที่ไม่ได้ตรวจสอบเช่นเดียวกับคนอื่นที่สามารถจัดการข้อผิดพลาดได้อย่างไม่ถูกต้องด้วยข้อยกเว้นที่ตรวจสอบ เจตนาของข้อยกเว้นการตรวจสอบคือการทำให้มันง่ายขึ้นสำหรับโปรแกรมเมอร์ที่จะต้องจับข้อผิดพลาด การโต้เถียงไม่ใช่สิ่งที่คุณอ้างสิทธิ์ในที่นี้ แต่ไม่ใช่ว่าพวกเขาประสบความสำเร็จในการบรรลุเป้าหมายในการจัดการข้อผิดพลาดได้ง่ายขึ้นจริงหรือไม่ ในมุมมองของหลาย ๆ คนพวกเขาไม่ได้ทำ พวกเขาทำให้มันยากขึ้น
Servy

@Servy แอพ UI ที่เป็นมิตรกับผู้ใช้สามารถจัดการกับความเป็นจริงของชิป RAM ที่ล้มเหลวหรือถูกทิ้งไว้โดยไม่มี CPU รอบเนื่องจากซอฟต์แวร์อื่นทำงานผิดพลาด?
Tulains Córdova

1
@ TulainsCórdovaไม่ว่าในกรณีใดโปรแกรมจะไม่ทำงานดังนั้นจึงไม่มีข้อยกเว้นในการจัดการช่วงเวลาดังนั้นวิธีที่คุณพยายามแสดงถึงข้อผิดพลาดนั้นไม่เกี่ยวข้องเมื่อคุณไม่สามารถเรียกใช้โปรแกรมใด ๆ รหัสเมื่อมันเกิดขึ้น
59

1
@ TulainsCórdovaคุณไม่จำเป็นต้องเผชิญกับข้อผิดพลาดในการจัดการ แต่จำเป็นต้องใช้คอมไพเลอร์จะไม่บอกคุณว่าอาจถูกโยนได้ ข้อโต้แย้งคือคอมไพเลอร์บอกคุณหรือไม่ว่าข้อยกเว้นอาจถูกโยนได้จริง ๆ แล้วมีประโยชน์ บางคนคิดว่าเป็นบางคนคิดว่าไม่ใช่ คำถามที่นี่คือสิ่งที่เป็นข้อโต้แย้งและนั่นคือคำตอบ คำแถลงของคุณเกี่ยวกับความขัดแย้งหลักของข้อยกเว้นที่ถูกตรวจสอบไม่ใช่ของคุณ
Servy

-4

ไม่มีข้อโต้แย้งในหน้านั้น Oracle บอกให้ผู้ใช้ใช้ข้อยกเว้นที่ตรวจสอบแล้ว

'การโต้เถียง' ปลอมที่พวกเขาประดิษฐ์ขึ้นที่นี่อยู่ระหว่างนักออกแบบภาษาและผู้ใช้ภาษา นักออกแบบอนุญาตให้ผู้คนโยนและจับสิ่งต่าง ๆ ที่ไม่ควรโยนหรือจับ (ในใจ) ดังนั้นพวกเขาจึงสร้างเว็บเพจที่บ่นเกี่ยวกับนักพัฒนาที่ขี้เกียจ


4
มีเป็นความขัดแย้งแม้ว่าหน้าบอกว่าเล็ก ๆ น้อย ๆ เกี่ยวกับเรื่องนี้ อะไรคือคำตอบของคำถามที่ว่า "การตรวจสอบข้อยกเว้นช่วยหรือขัดขวางการพัฒนาซอฟต์แวร์ที่ดีกว่าหรือไม่" และ "ถ้าเป็นเช่นนั้นควรตรวจสอบข้อยกเว้นใดและควรยกเลิกการเลือกอะไร" ฉันจะเดิมพันว่าคุณสามารถเริ่มการสนทนาที่มีชีวิตชีวาหากคุณมีนักพัฒนา (และเบียร์) เข้าด้วยกันในห้องเพื่อตอบคำถามเหล่านั้น
โซโลมอนช้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.