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

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

10
ทำไมคำหลัก 'สุดท้าย' จึงมีประโยชน์
ดูเหมือนว่า Java มีอำนาจในการประกาศคลาสที่ไม่สามารถสืบทอดได้สำหรับทุกวัยและตอนนี้ C ++ ก็มีเช่นกัน อย่างไรก็ตามในแง่ของหลักการ Open / Close ใน SOLID ทำไมมันถึงมีประโยชน์? สำหรับฉันfinalคำหลักฟังดูเหมือนfriend- ถูกกฎหมาย แต่ถ้าคุณใช้งานอยู่การออกแบบส่วนใหญ่อาจผิด โปรดให้ตัวอย่างที่คลาสที่ไม่สามารถสืบทอดได้จะเป็นส่วนหนึ่งของสถาปัตยกรรมที่ดีหรือรูปแบบการออกแบบ
54 java  c++  solid  final 

5
เมื่อใดที่จะใช้คลาส vs ดั้งเดิมใน Java?
ฉันเห็นว่า Java มีบูลีน (คลาส) และบูลีน (ดั้งเดิม) ในทำนองเดียวกันมีจำนวนเต็ม (คลาส) เทียบกับ int (ดั้งเดิม) อะไรคือวิธีปฏิบัติที่ดีที่สุดในการใช้เวอร์ชันดั้งเดิมกับคลาส? โดยทั่วไปฉันควรใช้รุ่นคลาสอยู่เสมอเว้นแต่ฉันจะมีเหตุผลที่เฉพาะเจาะจง วิธีที่นิยมใช้กันมากที่สุดคืออะไร?
54 java  class  usage 

8
ทำไมวิธีหลักแบบคงที่ใน Java และ C # มากกว่าตัวสร้าง?
ฉันกำลังมองหาคำตอบที่ชัดเจนจากแหล่งที่มาหลักหรือรองสำหรับเหตุผลที่ (โดยเฉพาะ) Java และ C # ตัดสินใจที่จะมีวิธีการแบบคงที่เป็นจุดเริ่มต้นของพวกเขาแทนที่จะเป็นตัวแทนอินสแตนซ์ของโปรแกรมประยุกต์โดยอินสแตนซ์ของApplicationชั้นเรียน เป็นตัวสร้างที่เหมาะสม) ความเป็นมาและรายละเอียดของการวิจัยก่อนหน้าของฉัน สิ่งนี้เคยถูกถามมาก่อน แต่น่าเสียดายที่คำตอบที่มีอยู่เป็นเพียงการขอถาม โดยเฉพาะอย่างยิ่งคำตอบต่อไปนี้จะไม่ทำให้ฉันพึงพอใจเพราะฉันคิดว่าไม่ถูกต้อง: จะมีความกำกวมหากคอนสตรัคเตอร์มากเกินไป - ในความเป็นจริง C # (เช่นเดียวกับ C และ C ++) ช่วยให้ลายเซ็นที่แตกต่างกันเพื่อMainให้มีความกำกวมที่อาจเกิดขึ้นเหมือนกันและมีการจัดการ staticวิธีหมายถึงวัตถุที่ไม่สามารถ instantiated ก่อนเพื่อให้คำสั่งของ initialisation เป็นที่ชัดเจน - นี่เป็นเพียงความผิดจริงวัตถุบางอย่างจะถูกยกตัวอย่างก่อน (เช่นในตัวสร้างแบบคงที่) ดังนั้นจึงสามารถเรียกใช้โดยรันไทม์โดยไม่ต้องสร้างอินสแตนซ์ของวัตถุหลัก - นี่ไม่ใช่คำตอบเลย เพื่อให้เหตุผลเพิ่มเติมว่าทำไมฉันจึงคิดว่านี่เป็นคำถามที่ถูกต้องและน่าสนใจ: กรอบหลายคนไม่ใช้ชั้นเรียนเพื่อเป็นตัวแทนของการใช้งานและการก่อสร้างเป็นจุดเข้า ยกตัวอย่างเช่นกรอบใบสมัคร VB.NETใช้โต้ตอบเฉพาะหลัก (และตัวสร้างของมัน) เป็นจุดเริ่มต้นที่1 ทั้ง Java และ C # ในทางเทคนิคต้องการวิธีการหลัก ดี C # ต้องการคอมไพล์ …
54 java  c#  history  entry-point 

4
ประโยชน์ในการพัฒนาของการใช้ Docker เป็นโมฆะเมื่อใช้ Java เมื่อเปรียบเทียบกับภาษาอื่น ๆ ใกล้กับระบบปฏิบัติการ Unix หรือไม่?
ฉันมีเพื่อนที่พูดว่า: นักเทียบท่าเป็นที่น่าอัศจรรย์ คุณสามารถใช้มันเพื่อทำซ้ำการผลิตและนิสัยใจคอของมันทั้งหมดในเครื่องท้องถิ่นของคุณ จากนั้นคุณสามารถปรับใช้อินสแตนซ์ที่ตรงผ่านทุกขั้นตอนการทำงานการแสดงละครซุปเปอร์รวดเร็ว ตอนนี้สิ่งนี้จะเป็นจริงถ้านักพัฒนาเขียน Ruby, PHP หรือGo - ที่ซึ่งมีการเชื่อมโยงแบบไบนารีทิศทางไปยังระบบปฏิบัติการ แต่เมื่อใช้Java - มีเลเยอร์เสมือนระหว่างระบบปฏิบัติการและภาษาอยู่แล้วทำให้การดำเนินงานสอดคล้องกันโดยไม่คำนึงถึงระบบปฏิบัติการพื้นฐาน ในกรณีนี้ประโยชน์ของการรัน Docker สำหรับนักพัฒนาในท้องถิ่นเพื่อทำซ้ำสภาพแวดล้อมการผลิตจะถูกทำให้ไร้ผล (เทียบกับ Ruby, PHP หรือ Go) ฉันเปิดให้มีการอภิปรายเกี่ยวกับเรื่องนี้และกระตือรือร้นที่จะได้ยินมุมมองที่ไม่เห็นด้วย (มีหลักฐาน) ประโยชน์ในการพัฒนาของการใช้ Docker เป็นโมฆะเมื่อใช้ Java เมื่อเปรียบเทียบกับภาษาอื่น ๆ ใกล้กับระบบปฏิบัติการ Unix หรือไม่?
53 java  deployment  jvm  docker 

9
วิธีการของชั้นเรียนควรเรียกผู้ได้รับและผู้ตั้งตน?
ฉันทำงานที่ไหนฉันเห็นชั้นเรียนจำนวนมากที่ทำสิ่งนี้: public class ClassThatCallsItsOwnGettersAndSetters { private String field; public String getField() { return field; } public void setField(String field) { this.field = field; } public void methodWithLogic() { setField("value"); //do stuff String localField = getField(); //do stuff with "localField" } } หากฉันเขียนสิ่งนี้ตั้งแต่เริ่มต้นฉันจะเขียนสิ่งmethodWithLogic()นี้แทน: public class ClassThatUsesItsOwnFields { private String field; public …

6
ใช้แลมบ์ดานิพจน์เมื่อใดก็ตามที่เป็นไปได้ในการฝึกหัด Java
ฉันเพิ่งเข้าใจแลมบ์ดานิพจน์ที่นำมาใช้ในจาวา 8 ฉันพบว่าเมื่อใดก็ตามที่ฉันใช้อินเตอร์เฟซที่ใช้งานได้ฉันมักจะใช้นิพจน์แลมบ์ดาแทนการสร้างคลาสที่ใช้อินเทอร์เฟซ นี่ถือว่าเป็นการปฏิบัติที่ดีหรือไม่? หรือสถานการณ์ของพวกเขาที่ใช้แลมบ์ดาสำหรับอินเทอร์เฟซการใช้งานไม่เหมาะสมหรือไม่
52 java  lambda 

9
ทำไม Java มีวิธีการ 'โมฆะ'?
Java / ทำไมต้องมีvoidวิธีการ? เอกสารอ้างอิง : วิธีการใด ๆ ที่ประกาศเป็นโมฆะจะไม่ส่งคืนค่า เท่าที่ผมสามารถคิดว่าการใช้งานของทุกคนจะได้รับการบริการที่ดีขึ้นโดยการกลับธงสถานะวัตถุที่ถูกเรียกหรือvoidnull สิ่งนี้จะทำให้การเรียกใช้คำสั่งที่กำหนดได้และจะช่วยให้รูปแบบการสร้างและวิธีการผูกมัด วิธีการที่ถูกเรียกใช้เฉพาะกับเอฟเฟกต์ของพวกเขามักจะส่งคืนบูลีนหรือSuccessประเภททั่วไปหรือส่งข้อยกเว้นเมื่อล้มเหลว

10
ควรถามเกี่ยวกับการตัดสินใจในการออกแบบผลิตภัณฑ์ระหว่างการสัมภาษณ์หรือไม่? [ปิด]
เมื่อเร็ว ๆ นี้ฉันคิดถึงคำถามสัมภาษณ์และคิดถึงประสบการณ์การสัมภาษณ์ที่ไม่ดีในอดีต หนึ่งในบันทึกย่อพิเศษคือที่ฉันถามผู้สัมภาษณ์ว่าเหตุใดทีมจึงเลือกใช้ EJB 3 ในฤดูใบไม้ผลิในผลิตภัณฑ์ของพวกเขา ผู้สัมภาษณ์ฉีกหน้าของฉันออกมาตะโกนว่า "เพราะสปริงไม่ใช่ทุกอย่างและจบการพัฒนาซอฟต์แวร์จาวาทั้งหมดคุณต้องการงานนี้หรือไม่?" ในการตอบสนองต่อสิ่งนี้ฉันบอกเขาว่านี่อาจไม่ใช่งานของฉันและฉันก็เดินออกจากการสัมภาษณ์ทันที ฉันได้รับแจ้งเมื่อตอนต้นของการสัมภาษณ์ว่า บริษัท มีการหมุนเวียนพนักงานสูงผลิตภัณฑ์ที่พวกเขากำลังทำงานถูกสร้างขึ้นครั้งแรกใน Modula-3 จากนั้นย้ายไปยัง Perl และสุดท้ายไปยัง Java ฉันส่งคำถามทางเทคนิคเล่มเล็ก 10 หน้าครอบคลุม Java, EJB, SQL และ JDBC และฉันถูกถามคำถามเกี่ยวกับสแต็คเทคโนโลยีที่ฉันทำงานด้วย เมื่อได้รับแจ้งให้ถามคำถามฉันรู้สึกว่ามีเหตุผลที่จะถามพวกเขาเกี่ยวกับสแต็คเทคโนโลยีของพวกเขาและได้รับคำตอบที่สมเหตุสมผลไม่ส่งผู้สัมภาษณ์ลงในเปลวเพลิง คำถาม: เป็นความคิดที่ดีหรือไม่ที่จะสำรวจทางเลือกทางสถาปัตยกรรมในการสัมภาษณ์? ถ้าไม่ทำไม จากมุมมองของฉันการสัมภาษณ์เป็นกระบวนการสองทาง หากผู้สัมภาษณ์กำลังทดสอบทักษะทางเทคนิคของฉันฉันมีสิทธิ์ที่จะถามคำถามเดียวกันกับพวกเขาทุกคนเพื่อ: 1) ค้นหาความคิดและทัศนคติของพวกเขาที่มีต่อการพัฒนาซอฟต์แวร์ 2) กำหนดว่าแนวทางของพวกเขาสอดคล้องกับวิธีที่ฉันจะแก้ไขปัญหาของประเภทนั้นหรือไม่ เป็นไปได้ว่าผู้สัมภาษณ์ที่โกรธเคืองมีทักษะการสัมภาษณ์ต่ำและลืมว่าการสัมภาษณ์เป็นการแลกเปลี่ยนสองทาง หากฉันถูกถามเรื่องนี้ฉันจะได้รับคำตอบที่สมเหตุสมผล แต่แน่นอนว่าฉันจะไม่พยายามใส่ผู้ให้สัมภาษณ์ไว้ในสถานการณ์ที่ยอมจำนนโดยที่หัวเพิ่งจะส่ายหัวขึ้นและลงโดยไม่มีการสนทนา
51 java  interview 

9
ฉันจะโน้มน้าวให้เพื่อนร่วมทีมของฉันทราบได้อย่างไรว่าเราไม่ควรเพิกเฉยต่อคำเตือนของคอมไพเลอร์
ฉันทำงานในโครงการขนาดใหญ่ (เช่นการรวมกันของโครงการขนาดเล็กจำนวนมากที่ไม่สามารถแยกออกจากกันได้ง่ายเนื่องจากการจัดการการพึ่งพาที่ไม่ดี แต่เป็นการสนทนาที่แตกต่างกัน) ใน Java โดยใช้ eclipse เราได้ปิดคำเตือนจำนวนหนึ่งจากการตั้งค่าคอมไพเลอร์และโครงการยังคงมีคำเตือนมากกว่า 10,000 รายการ ฉันเป็นผู้สนับสนุนที่ยิ่งใหญ่ในการพยายามจัดการกับคำเตือนทั้งหมดแก้ไขทั้งหมดถ้าเป็นไปได้และสำหรับผู้ที่ถูกมองว่าปลอดภัยและปราบปรามพวกเขา (เช่นเดียวกับความหลงใหลในศาสนาของฉันด้วยการทำเครื่องหมายวิธีการที่นำไปใช้ / overriden ทั้งหมดเป็น @Override) ข้อโต้แย้งที่ใหญ่ที่สุดของฉันคือคำเตือนทั่วไปช่วยให้คุณพบข้อบกพร่องที่อาจเกิดขึ้นระหว่างการรวบรวม อาจจะหมดไป 99 จาก 100 ครั้งคำเตือนนั้นไม่มีนัยสำคัญ แต่ฉันคิดว่าหัวหน้าเกาว่าประหยัดได้หนึ่งครั้งเพื่อป้องกันข้อผิดพลาดที่สำคัญมันคุ้มค่า (เหตุผลอื่นของฉันคือ OCD ของฉันชัดเจนด้วยรหัสความสะอาด) อย่างไรก็ตามเพื่อนร่วมทีมของฉันจำนวนมากดูเหมือนจะไม่สนใจ ฉันแก้ไขคำเตือนเป็นครั้งคราวเมื่อฉันสะดุดพวกเขา (แต่คุณรู้ว่ามันเป็นเรื่องยากเมื่อคุณสัมผัสรหัสที่เขียนโดยเพื่อนร่วมงาน) ขณะนี้มีคำเตือนมากกว่าชั้นเรียนอย่างแท้จริงข้อดีของคำเตือนจะลดลงอย่างมากเพราะเมื่อคำเตือนเป็นเรื่องธรรมดาไม่มีใครจะมาดูพวกเขาทั้งหมด ฉันจะโน้มน้าวให้เพื่อนร่วมทีมของฉัน (หรืออำนาจที่เป็น) ว่าคำเตือนต้องได้รับการแก้ไข (หรือระงับเมื่อสอบสวนอย่างเต็มที่) ได้อย่างไร หรือฉันควรโน้มน้าวตัวเองว่าฉันบ้า? ขอบคุณ (PS ฉันลืมที่จะพูดถึงสิ่งสุดท้ายที่กระตุ้นให้ฉันโพสต์คำถามนี้คือฉันเศร้าสังเกตเห็นว่าฉันกำลังแก้ไขคำเตือนช้ากว่าที่พวกเขาจะผลิต)
51 java  eclipse 

4
ใช้สาธารณะขั้นสุดท้ายแทนที่จะได้รับส่วนตัว
ฉันเห็น POJO ที่ไม่เปลี่ยนรูปที่สุดเขียนแบบนี้: public class MyObject { private final String foo; private final int bar; public MyObject(String foo, int bar) { this.foo = foo; this.bar = bar; } public String getFoo() { return foo; } public int getBar() { return bar; } } แต่ฉันมักจะเขียนแบบนี้: public class MyObject { public final …

11
เหตุใด C ++ จึงมี 'พฤติกรรมที่ไม่ได้กำหนด' (UB) และภาษาอื่น ๆ เช่น C # หรือ Java ไม่
โพสต์สแต็คโอเวอร์โฟลว์นี้แสดงรายการสถานการณ์ที่ค่อนข้างครอบคลุมซึ่งข้อกำหนดภาษา C / C ++ ประกาศว่าเป็น 'พฤติกรรมที่ไม่ได้กำหนด' อย่างไรก็ตามฉันต้องการเข้าใจว่าทำไมภาษาสมัยใหม่อื่น ๆ เช่น C # หรือ Java ไม่มีแนวคิดของ 'พฤติกรรมที่ไม่ได้กำหนด' มันหมายความว่าผู้ออกแบบคอมไพเลอร์สามารถควบคุมสถานการณ์ที่เป็นไปได้ทั้งหมด (C # และ Java) หรือไม่ (C และ C ++)?

11
ฉันไม่เข้าใจว่า TDD ช่วยให้ฉันได้รับการออกแบบที่ดีได้อย่างไรถ้าฉันต้องการการออกแบบเพื่อเริ่มการทดสอบ
ฉันพยายามคลุมศีรษะด้วย TDD โดยเฉพาะในส่วนของการพัฒนา ฉันได้ดูหนังสือบางเล่ม แต่หนังสือที่ฉันพบส่วนใหญ่จัดการกับส่วนทดสอบ - ประวัติของ NUnit ทำไมการทดสอบจึงดี Red / Green / Refactor และวิธีการสร้างเครื่องคำนวณสตริง สิ่งที่ดี แต่นั่นคือ "เพียงแค่" การทดสอบหน่วยไม่ใช่ TDD โดยเฉพาะฉันไม่เข้าใจว่า TDD ช่วยให้ฉันได้รับการออกแบบที่ดีได้อย่างไรถ้าฉันต้องการการออกแบบเพื่อเริ่มการทดสอบ เพื่ออธิบายให้นึกภาพ 3 ข้อเหล่านี้: แคตตาล็อกต้องมีรายการผลิตภัณฑ์ แค็ตตาล็อกควรจดจำผลิตภัณฑ์ที่ผู้ใช้ดู ผู้ใช้ควรสามารถค้นหาผลิตภัณฑ์ได้ ณ จุดนี้มีหนังสือหลายเล่มดึงกระต่ายเวทมนตร์ออกมาจากหมวกและกระโดดลงไปใน "การทดสอบบริการผลิตภัณฑ์" แต่พวกเขาไม่ได้อธิบายว่าพวกเขาสรุปได้อย่างไรว่ามีบริการผลิตภัณฑ์ในตอนแรก นั่นคือส่วน "การพัฒนา" ใน TDD ที่ฉันพยายามเข้าใจ จำเป็นต้องมีการออกแบบที่มีอยู่ แต่สิ่งที่อยู่นอกบริการ - เอนทิตี้ (นั่นคือ: มีผลิตภัณฑ์ดังนั้นควรมี ProductService) ไม่พบ (เช่นข้อกำหนดที่สองต้องการให้ฉันมีแนวคิดบางอย่างของ ผู้ใช้ แต่ฉันจะใส่ฟังก์ชั่นการเตือนไว้ที่ไหนและค้นหาคุณสมบัติของ ProductService …
50 java  c#  .net  tdd 

9
ทำไมการเปรียบเทียบค่าสตริงของโอเปอเรเตอร์ == จึงไม่ทำให้เป็น Java
โปรแกรมเมอร์ Java ทุกคนรู้ดีว่าคุณต้องใช้ String.equals () เพื่อเปรียบเทียบสตริงแทนที่จะเป็น == เพราะ == ตรวจสอบความเท่าเทียมกันอ้างอิง เมื่อฉันจัดการกับสตริงเวลาส่วนใหญ่ที่ฉันกำลังตรวจสอบความเท่าเทียมกันของค่ามากกว่าความเท่าเทียมกันอ้างอิง ดูเหมือนว่าสำหรับฉันแล้วมันจะง่ายกว่านี้หากภาษาอนุญาตให้เปรียบเทียบค่าสตริงโดยใช้ == จากการเปรียบเทียบตัวดำเนินการ == ของ C # จะตรวจสอบความเท่าเทียมกันของค่าสำหรับสตริง s และถ้าคุณต้องการตรวจสอบความเท่าเทียมกันของการอ้างอิงคุณสามารถใช้ String.ReferenceEquals อีกจุดสำคัญคือสตริงไม่เปลี่ยนรูปดังนั้นจึงไม่มีอันตรายใด ๆ ที่จะทำโดยอนุญาตให้ใช้คุณลักษณะนี้ มีเหตุผลใดเป็นพิเศษหรือไม่ที่สิ่งนี้ไม่ได้นำไปใช้ใน Java?

4
เหตุใดจึงเป็นความคิดที่ไม่ดีที่จะสร้าง setter ทั่วไปและทะเยอทะยานด้วยการสะท้อน?
ในขณะที่หลังฉันเขียนคำตอบสำหรับคำถามเกี่ยวกับวิธีการหลีกเลี่ยงการทะเยอทะยานและ setter สำหรับทุกตัวแปรที่ไม่แน่นอน ในเวลานั้นฉันมีเพียงความกล้าหาญที่จะพูดด้วยความรู้สึกว่านี่เป็นความคิดที่ไม่ดี แต่ OP ได้ถามอย่างชัดเจนว่าจะทำอย่างไร ฉันค้นหาที่นี่ว่าเพราะเหตุใดปัญหานี้จึงอาจเป็นปัญหาและพบคำถามนี้ซึ่งคำตอบดูเหมือนจะเป็นคำตอบโดยใช้การไตร่ตรองเว้นแต่ว่าจำเป็นจริงๆคือการปฏิบัติที่ไม่ดี ดังนั้นใครบางคนสามารถพูดด้วยวาจาว่าทำไมมันจึงเป็นสิ่งที่สะท้อนให้เห็นว่าควรหลีกเลี่ยงโดยเฉพาะในกรณีของผู้ทะเยอทะยานทั่วไปและผู้ตั้งค่า?
49 java  reflection 

6
วิธีแก้ปัญหาสำหรับข้อยกเว้นที่ตรวจสอบด้วย Java
ฉันขอขอบคุณฟีเจอร์ Java 8 ใหม่มากมายเกี่ยวกับ lambdas และอินเตอร์เฟสเมธอดดีฟอลต์ แต่ฉันยังคงเบื่อกับข้อยกเว้นที่ตรวจสอบ ตัวอย่างเช่นหากฉันต้องการแสดงรายการเขตข้อมูลที่มองเห็นได้ทั้งหมดของวัตถุที่ฉันต้องการจะเขียนสิ่งนี้: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); แต่เนื่องจากgetวิธีการอาจมีข้อยกเว้นการตรวจสอบซึ่งไม่เห็นด้วยกับConsumerสัญญาอินเตอร์เฟซดังนั้นฉันต้องจับข้อยกเว้นนั้นและเขียนรหัสต่อไปนี้: Arrays.asList(p.getClass().getFields()).forEach( f -> { try { System.out.println(f.get(p)); } catch (IllegalArgumentException | IllegalAccessException ex) { throw new RuntimeException(ex); } } ); อย่างไรก็ตามในกรณีส่วนใหญ่ฉันแค่ต้องการยกเว้นจะถูกโยนเป็นRuntimeExceptionและให้โปรแกรมจัดการหรือไม่ยกเว้นโดยไม่มีข้อผิดพลาดในการรวบรวม ดังนั้นฉันต้องการแสดงความคิดเห็นของคุณเกี่ยวกับวิธีแก้ไขปัญหาการโต้เถียงของฉันสำหรับการตรวจสอบข้อยกเว้นที่น่ารำคาญ ด้วยเหตุนี้ฉันจึงสร้างส่วนต่อประสานConsumerCheckException<T>และฟังก์ชั่นยูทิลิตี้rethrow( อัปเดตตามความต้องการของความคิดเห็นของ Doval ) ดังต่อไปนี้: @FunctionalInterface public interface ConsumerCheckException<T>{ void accept(T elem) throws Exception; …

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