คำถามติดแท็ก java

Java เป็นภาษาการเขียนโปรแกรมเชิงวัตถุในระดับสูงที่พัฒนาโดย Sun Microsystems ปัจจุบัน Java เป็นเจ้าของโดย Oracle ซึ่งซื้อ Sun ในปี 2010

6
เหตุใดจึงยังคงเป็นส่วนหนึ่งของภาษา Java เมื่อแนะนำเป็นสองเท่าแทน?
ในทุกที่ที่ฉันดูมันบอกว่าdoubleมันยอดเยี่ยมกว่าfloatในเกือบทุกด้าน floatถูกทำให้ล้าสมัยโดยdoubleใน Java ดังนั้นทำไมมันยังคงใช้? ฉันเขียนโปรแกรมเป็นจำนวนมากกับ Libgdx และพวกเขาบังคับให้คุณใช้float(deltaTime, ฯลฯ ) แต่ดูเหมือนว่าสำหรับฉันแล้วdoubleมันจะง่ายกว่าที่จะทำงานด้วยในแง่ของการจัดเก็บและหน่วยความจำ ฉันยังอ่านเมื่อคุณใช้การลอยและเมื่อคุณใช้สองครั้งแต่ถ้าfloatเป็นจริงที่ดีสำหรับตัวเลขที่มีตัวเลขจำนวนมากหลังจากจุดทศนิยมแล้วทำไมเราไม่สามารถใช้หนึ่งในหลายรูปแบบของdouble? มีเหตุผลว่าทำไมคนอื่นยืนยันที่จะใช้ลอยแม้ว่ามันจะไม่ได้ประโยชน์อีกต่อไป? มันเป็นงานมากเกินไปที่จะเปลี่ยนแปลงทั้งหมดหรือไม่

11
นักพัฒนาซอฟต์แวร์ของ Java ได้ละทิ้ง RAII หรือไม่?
ในฐานะโปรแกรมเมอร์ C # เป็นเวลานานฉันเพิ่งได้เรียนรู้เพิ่มเติมเกี่ยวกับข้อดีของการได้มาซึ่งทรัพยากรคือการเริ่มต้น (RAII) โดยเฉพาะฉันได้ค้นพบว่าสำนวน C #: using (var dbConn = new DbConnection(connStr)) { // do stuff with dbConn } มี C ++ ที่เทียบเท่า: { DbConnection dbConn(connStr); // do stuff with dbConn } หมายความว่าการจดจำการใช้ทรัพยากรเช่นDbConnectionในusingบล็อกนั้นไม่จำเป็นใน C ++! สิ่งนี้ดูเหมือนจะเป็นข้อได้เปรียบที่สำคัญของ C ++ สิ่งนี้น่าเชื่อถือยิ่งขึ้นเมื่อคุณพิจารณาคลาสที่มีสมาชิกอินสแตนซ์ของประเภทDbConnectionตัวอย่างเช่น class Foo { DbConnection dbConn; // ... } ใน …
82 java  c#  c++  language-design 

6
ทำไมระดับ TRACE ถึงมีอยู่และฉันควรใช้เมื่อใดแทนที่จะใช้ DEBUG
ใน Log4J, Slf4J และเฟรมเวิร์กการบันทึกอื่น ๆ อีกสองสามรายการใน Java คุณมีระดับ "developper" สองระดับสำหรับการบันทึก: DEBUG ติดตาม ฉันเข้าใจสิ่งที่ DEBUG ทำเพราะคำอธิบายนั้นชัดเจน: ระดับ DEBUG กำหนดเหตุการณ์ข้อมูลที่ละเอียดซึ่งมีประโยชน์มากที่สุดในการดีบักแอปพลิเคชัน แต่ระดับ TRACE นั้นไม่เฉพาะเจาะจงมากเกี่ยวกับกรณีการใช้งาน: ระดับ TRACE กำหนดเหตุการณ์ข้อมูลที่ละเอียดกว่า DEBUG (ที่มา: log4J JavaDoc ) สิ่งนี้ไม่ได้บอกวิธีการใช้ TRACE ที่น่าสนใจนี้ไม่ได้เป็นระดับความรุนแรงที่กำหนดไว้ในมาตรฐาน syslog Googling สำหรับความแตกต่างระหว่าง TRACE และ DEBUG ดูเหมือนจะกลับมา "ใช้ DEBUG, โอ้และมี TRACE ด้วย" ฉันไม่พบกรณีการใช้งานเฉพาะสำหรับระดับ TRACE สิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือหน้าวิกิเก่านี้กำลังถกกันถึงข้อดีของการมีอยู่ ในฐานะสถาปนิกผู้นี้ได้ยกธงและคำถามมากมายในหัวของฉัน หากผู้พัฒนารายย่อยขอให้ฉันเพิ่ม TRACE …
82 java  logging 

3
ฟังก์ชั่นชื่ออะไรที่ไม่โต้แย้งและส่งคืนอะไร? [ปิด]
ในjava.util.functionแพ็คเกจของ Java 8 เรามี: ฟังก์ชัน : รับหนึ่งอาร์กิวเมนต์สร้างผลลัพธ์เดียว ผู้บริโภค : รับหนึ่งอาร์กิวเมนต์สร้างอะไรขึ้นมา ผู้จัดจำหน่าย : ไม่ต้องโต้เถียงสร้างผลลัพธ์เดียว ... : กรณีอื่น ๆ ที่จัดการแบบดั้งเดิมอาร์กิวเมนต์ 2 ข้อ ฯลฯ ... แต่ฉันต้องจัดการกับ " ไม่มีข้อโต้แย้งสร้างอะไร " ไม่มีอะไรสำหรับสิ่งนี้java.util.functionnalค่ะ ดังนั้นคำถามคือ: ชื่อ ' ฟังก์ชั่นที่ไม่โต้แย้งและไม่ส่งคืนอะไร '? ใน Java 8 นิยามของมันจะเป็น: @FunctionalInterface public interface InsertANameHere { void execute(); } ผู้บริหารอยู่แล้วและมีวัตถุประสงค์อื่น: " วัตถุที่ดำเนินการส่งงานที่เรียกใช้งานได้ " ลายเซ็นไม่ตรงกัน ( …

8
เหตุใดจึงต้องลองใช้ ... ในที่สุดโดยไม่มีข้อห้าม?
try ... catchวิธีที่คลาสสิกในการเขียนโปรแกรมอยู่กับ เมื่อไรที่มันจะเหมาะสมที่จะใช้tryโดยไม่catch? ใน Python ข้อมูลต่อไปนี้ถูกกฎหมายและสมเหตุสมผล: try: #do work finally: #do something unconditional อย่างไรก็ตามรหัสไม่ได้catchอะไรเลย ในทำนองเดียวกันหนึ่งสามารถคิดใน Java มันจะเป็นดังนี้: try { //for example try to get a database connection } finally { //closeConnection(connection) } มันดูดีและทันใดนั้นฉันก็ไม่ต้องกังวลกับข้อยกเว้นประเภทอื่น ๆ ถ้านี่เป็นการฝึกฝนที่ดีการฝึกฝนที่ดีเมื่อไหร่? อีกวิธีหนึ่งคือเหตุผลว่าทำไมนี่ไม่ใช่การปฏิบัติที่ดีหรือไม่ถูกกฎหมาย? (ฉันไม่ได้รวบรวมซอร์สฉันถามเกี่ยวกับมันเนื่องจากอาจเป็นข้อผิดพลาดทางไวยากรณ์สำหรับ Java ฉันตรวจสอบว่า Python รวบรวมแน่นอน) ปัญหาที่เกี่ยวข้องที่ฉันพบคือ: ฉันยังคงเขียนฟังก์ชั่น / วิธีในตอนท้ายของมันจะต้องกลับบางสิ่งบางอย่าง อย่างไรก็ตามอาจอยู่ในสถานที่ที่ไม่ควรไปถึงและต้องเป็นจุดกลับ ดังนั้นแม้ว่าฉันจะจัดการกับข้อยกเว้นข้างต้นฉันยังคงกลับมาNULLหรือสตริงที่ว่างในบางจุดในรหัสที่ไม่สามารถเข้าถึงได้มักจะสิ้นสุดของวิธีการ / ฟังก์ชั่น …

15
ทำไม Java ถึงเป็นไปได้เร็วกว่า C ++?
บางครั้ง Java มีประสิทธิภาพสูงกว่า C ++ ในการวัดประสิทธิภาพ แน่นอนว่าบางครั้ง C ++ มีประสิทธิภาพสูงกว่า ดูลิงค์ต่อไปนี้: http://keithlea.com/javabench/ http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ http://blog.cfelde.com/2010/06/c-vs-java-performance/ แต่สิ่งนี้เป็นไปได้อย่างไร มันรบกวนความคิดของฉันที่การแปลรหัสโดยโค้ดอาจเร็วกว่าภาษาที่คอมไพล์ ใครช่วยอธิบายหน่อยได้ไหม? ขอบคุณ!
79 java  c++  performance 

4
อะไรคือความแตกต่างระหว่างคำนำหน้าชื่อ“ กับ” และ“ เป็น” ความแตกต่าง? [ปิด]
ความแตกต่างระหว่าง"กับ"และ"เป็น"คำนำหน้าชื่อเมธอดเช่นคืออะไร ToList () asList () ฯลฯ ... เมื่อใดที่จะใช้ซึ่งเมื่อออกแบบวิธีการ?
78 java  naming 

11
ทำไม String ถึงไม่เปลี่ยนรูปใน Java?
ฉันไม่เข้าใจเหตุผลของมัน ฉันมักจะใช้คลาส String เหมือนนักพัฒนาอื่น ๆ แต่เมื่อฉันแก้ไขค่าของมันอินสแตนซ์ใหม่ของ String ที่สร้างขึ้น สิ่งที่อาจเป็นสาเหตุของการไม่เปลี่ยนรูปแบบสำหรับคลาส String ใน Java? ฉันรู้ว่ามีทางเลือกบางอย่างเช่น StringBuffer หรือ StringBuilder มันเป็นเพียงความอยากรู้

11
เหตุใดจึงไม่ลบวัตถุ Java ทันทีหลังจากที่ไม่มีการอ้างอิงอีกต่อไป
ใน Java ทันทีที่วัตถุไม่มีการอ้างอิงใด ๆ อีกต่อไปวัตถุนั้นจะมีสิทธิ์ในการลบ แต่ JVM จะตัดสินใจเมื่อวัตถุถูกลบจริง ในการใช้คำศัพท์ Objective-C การอ้างอิง Java ทั้งหมดจะ "แข็งแรง" โดยเนื้อแท้ อย่างไรก็ตามใน Objective-C หากวัตถุไม่มีการอ้างอิงที่แข็งแกร่งอีกต่อไปวัตถุจะถูกลบทันที เหตุใดจึงไม่เป็นเช่นนี้ใน Java

13
เหตุใด Java จึงไม่ใช้กันอย่างแพร่หลายในการพัฒนาเกม [ปิด]
ฉันไม่ได้เป็นผู้พัฒนาเกมหรืออะไร แต่ฉันรู้ว่า Java ไม่ได้ใช้กันอย่างแพร่หลายในการพัฒนาเกม Java ควรเร็วพอสำหรับเกมส่วนใหญ่แล้วเกมไหนที่จับได้? ฉันสามารถคิดด้วยเหตุผลบางอย่าง: ไม่มีผู้พัฒนาเกมที่มีความเชี่ยวชาญใน Java ขาดกรอบการพัฒนาเกมที่ดี โปรแกรมเมอร์ไม่ต้องการยอมรับ Java เป็นภาษาการเขียนโปรแกรมเกม ส่วนใหญ่ยอมรับเฉพาะ C ++ เท่านั้น ไม่รองรับเกมคอนโซล (แม้ว่าตลาดพีซียังคงมีอยู่) แน่นอนมันอาจเป็นอย่างอื่น คนที่รู้จักธุรกิจดีกว่าฉันอธิบายได้หรือไม่ว่าทำไม Java ถึงไม่ได้รับแรงเมื่อพัฒนาเกม

2
การพึ่งพา Java "สีเทา" คืออะไร?
นักพัฒนา JVM ที่นี่ เมื่อเร็ว ๆ นี้ฉันเคยเห็น banter ในห้องแชทของ IRC และแม้แต่ในสำนักงานของฉันเองเกี่ยวกับห้องสมุด Java ที่เรียกว่า " แรเงา " บริบทของการใช้งานจะเป็นดังนี้: " เช่นนั้นมอบไคลเอ็นต์" ที่แรเงา "สำหรับ XYZ " ตัวอย่างที่สมบูรณ์แบบคือปัญหาของ Jira สำหรับ HBase : " เผยแพร่สิ่งประดิษฐ์ของลูกค้าที่มีการขึ้นต่อกันของสีเทา " ดังนั้นฉันถาม: JAR สีเทาหมายความว่าอะไร "แรเงา"?
74 java  libraries  jvm 

10
Java แต่ละบรรทัดมีจำนวนบรรทัดเท่าใด [ปิด]
จากประสบการณ์ของคุณกฎของหัวแม่มือที่มีประโยชน์สำหรับจำนวนบรรทัดของโค้ดมีมากเกินไปสำหรับคลาสหนึ่งใน Java เพื่อความชัดเจนฉันรู้ว่าจำนวนบรรทัดไม่ได้ใกล้เคียงกับมาตรฐานจริงเพื่อใช้สำหรับสิ่งที่ควรอยู่ในชั้นเรียนเฉพาะและสิ่งที่ไม่ควร คลาสควรได้รับการออกแบบให้สอดคล้องกับปรัชญา OOP (การห่อหุ้ม ฯลฯ ) ที่เหมาะสม ที่กล่าวว่ากฎง่ายๆสามารถให้เป็นจุดเริ่มต้นที่มีประโยชน์สำหรับการพิจารณาการรีแฟคเจอริ่ง (เช่น "อืมชั้นนี้มีบรรทัดของรหัส> n มันอาจไม่สามารถอ่านได้และทำงานของการห่อหุ้มด้วยหมัด ถูก refactored ในบางจุด ") ในทางกลับกันคุณอาจพบตัวอย่างของคลาสที่มีขนาดใหญ่มากที่ยังคงเชื่อฟังการออกแบบ OOP ได้ดีและอ่านได้และบำรุงรักษาได้แม้จะมีความยาวอยู่หรือไม่ นี่คือที่เกี่ยวข้องที่ไม่ซ้ำกันคำถามเกี่ยวกับเส้นต่อฟังก์ชั่น

10
ไม่เคยใช้ Strings ใน Java ใช่ไหม [ปิด]
ฉันสะดุดกับรายการบล็อกทำให้ไม่สามารถใช้ Strings ใน Java เพราะทำให้โค้ดของคุณขาดความหมายโดยแนะนำว่าคุณควรใช้คลาส wrapper บาง ๆ แทน นี่คือตัวอย่างก่อนและหลังรายการดังกล่าวมีไว้เพื่อแสดงให้เห็นถึงเรื่อง: public void bookTicket( String name, String firstName, String film, int count, String cinema); public void bookTicket( Name name, FirstName firstName, Film film, Count count, Cinema cinema); จากประสบการณ์การอ่านบล็อกการเขียนโปรแกรมฉันได้ข้อสรุปว่า 90% ไร้สาระ แต่ฉันก็ยังสงสัยว่ามันเป็นประเด็นที่ถูกต้องหรือไม่ อย่างใดก็รู้สึกไม่ถูกต้องสำหรับฉัน แต่ฉันไม่สามารถระบุสิ่งที่ผิดปกติกับรูปแบบของการเขียนโปรแกรม

13
เป็นการดีที่จะตรวจสอบข้อยกเว้นที่ตรวจสอบแล้วโยน RuntimeException หรือไม่?
ฉันอ่านรหัสของเพื่อนร่วมงานและพบว่าเขามักจะจับข้อยกเว้นต่าง ๆ และจากนั้นก็โยน 'RuntimeException' แทน ฉันมักจะคิดว่านี่เป็นวิธีปฏิบัติที่ไม่ดีมาก ฉันผิดหรือเปล่า?

3
“ GPL ที่มีข้อยกเว้น classpath” หมายถึงอะไรในทางปฏิบัติ
ออราเคิลดูเหมือนว่าจะอนุญาตให้ใช้รหัสเปิดแหล่งที่มาของพวกเขาทั้งหมดที่เกี่ยวข้องกับ Java ภายใต้GPL มีข้อยกเว้น จากสิ่งที่ฉันเข้าใจดูเหมือนว่าจะอนุญาตให้รวมไลบรารีเหล่านี้เข้ากับโค้ดของคุณเองเข้ากับผลิตภัณฑ์ที่ GPL ไม่ต้องครอบคลุม มันทำงานอย่างไร ตัวอย่างอะไรบ้างที่ฉันสามารถและไม่สามารถใช้คลาสเหล่านี้ได้? เหตุใดใบอนุญาตใหม่นี้จึงถูกใช้แทน LGPL ซึ่งดูเหมือนว่าจะอนุญาตในสิ่งเดียวกัน แต่ค่อนข้างเป็นที่ยอมรับและเข้าใจดีกว่า LGPL แตกต่างกันอย่างไร?
69 java  licensing  gpl  lgpl 

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