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

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

8
การใช้การแปลงซอร์สโค้ดเป็น Java bytecode คืออะไร
ถ้าใครต้องการ JVM ที่แตกต่างกันสำหรับสถาปัตยกรรมที่แตกต่างกันฉันไม่สามารถเข้าใจได้ว่าอะไรคือเหตุผลเบื้องหลังการแนะนำแนวคิดนี้ ในภาษาอื่นเราต้องการคอมไพเลอร์ที่แตกต่างกันสำหรับเครื่องที่แตกต่างกัน แต่ใน Java เราต้องการ JVM ที่แตกต่างกันดังนั้นอะไรคือตรรกะที่อยู่เบื้องหลังการนำเสนอแนวคิดของ JVM หรือขั้นตอนพิเศษนี้?
37 java  jvm  bytecode 

9
ทำไมโรงเรียนสอนอาร์เรย์มากกว่ารายการ? [ปิด]
งานมอบหมายส่วนใหญ่ในโรงเรียนของฉันสำหรับชั้นเรียนการเขียนโปรแกรมเริ่มต้นนั้นทำให้ฉันต้องใช้อาร์เรย์ ฉันทำงานเต็มเวลาแล้วและฉันไม่เคยใช้อาร์เรย์สำหรับโครงการใด ๆ ที่ฉันได้ทำงานมา แม้แต่ในโครงการที่มีอยู่ฉันก็ไม่เคยเห็นการใช้อาร์เรย์ที่ไหนเลย ในความคิดของฉันรายการใช้งานง่ายกว่าและเป็นมาตรฐาน เหตุใดอาจารย์บอกให้นักเรียนใช้อาร์เรย์ในการบ้าน เป็นเพียงเพื่อให้นักเรียนเข้าใจพื้นฐานหรือไม่ เนื่องจากมหาวิทยาลัยส่วนใหญ่สอน Java คำถามนี้เฉพาะกับ Java

3
มันเป็น antipattern ที่จะใช้ peek () เพื่อแก้ไของค์ประกอบสตรีม?
สมมติว่าฉันมีกระแสของสิ่งต่าง ๆ และฉันต้องการ "เพิ่มคุณค่า" พวกเขาให้อยู่กลางกระแสฉันสามารถใช้peek()ทำสิ่งนี้ได้เช่น: streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); สมมติว่าการกลายพันธุ์สิ่งต่าง ๆ ณ จุดนี้ในรหัสเป็นการทำงานที่ถูกต้องตัวอย่างเช่นthingMutatorวิธีการอาจตั้งค่าฟิลด์ "lastProcessed" เป็นเวลาปัจจุบัน อย่างไรก็ตามpeek()ในบริบทส่วนใหญ่หมายถึง "มอง แต่ไม่ได้สัมผัส" ใช้peek()เพื่อเปลี่ยนแปลงองค์ประกอบของกระแสข้อมูลที่เป็น antipattern หรือไม่เหมาะสมหรือไม่? แก้ไข: ทางเลือกที่ธรรมดากว่าคือการเปลี่ยนผู้บริโภค: private void thingMutator(Thing thing) { thing.setLastProcessed(System.currentTimeMillis()); } ไปที่ฟังก์ชันที่คืนค่าพารามิเตอร์: private Thing thingMutator(Thing thing) { thing.setLastProcessed(currentTimeMillis()); return thing; } และใช้map()แทน: stream.map(this::thingMutator)... แต่ที่แนะนำรหัสลวก ๆ (คนreturn) และฉันไม่ได้เชื่อว่ามันเป็นที่ชัดเจนเพราะคุณรู้ว่าpeek()ผลตอบแทนที่วัตถุเดียวกัน แต่map()มันไม่ได้ล้างได้อย่างรวดเร็วว่ามันเป็นเดียวกันระดับของวัตถุ นอกจากนี้peek()คุณยังสามารถมีแลมบ์ดาที่กลายพันธุ์ได้ แต่map()คุณต้องสร้างซากรถไฟ เปรียบเทียบ: stream.peek(t -> t.setLastProcessed(currentTimeMillis())).forEach(...) …

5
เมื่อใดที่ฉันควรขยายคลาส Java Swing
ความเข้าใจในปัจจุบันของฉันเกี่ยวกับการใช้งานมรดกคือควรขยายชั้นเรียนเฉพาะเมื่อมีความสัมพันธ์แบบ IS-A หากคลาสพาเรนต์สามารถมีประเภทลูกที่เฉพาะเจาะจงเพิ่มเติมด้วยฟังก์ชันการทำงานที่แตกต่างกัน แต่จะแบ่งปันองค์ประกอบทั่วไปที่มีนามธรรมในผู้ปกครอง ฉันกำลังถามความเข้าใจนั้นเพราะสิ่งที่อาจารย์ Java ของฉันแนะนำให้เราทำ เขาแนะนำว่าสำหรับJSwingแอปพลิเคชันที่เรากำลังสร้างในชั้นเรียน หนึ่งควรขยายทุกJSwingชั้นเรียน ( JFrame, JButton, JTextBoxฯลฯ ) ในชั้นเรียนที่กำหนดเองแยกต่างหากและระบุ GUI การปรับแต่งที่เกี่ยวข้องในพวกเขา (เช่นขนาดส่วนประกอบฉลากส่วนประกอบ ฯลฯ ) จนถึงตอนนี้ดีมาก แต่เขาก็ยังแนะนำต่อไปว่า JButton ทุกคนควรมีคลาสแบบขยายที่กำหนดเองของตนเองแม้ว่าปัจจัยที่แตกต่างเท่านั้นคือฉลากของพวกเขา สำหรับเช่นหาก GUI มีสองปุ่มโอเคและยกเลิก เขาแนะนำให้ขยายเวลาดังต่อไปนี้: class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ …

9
อัลกอริทึมสำคัญกว่าภาษาโปรแกรมหรือไม่
ในระหว่างการประกวดGoogle Code Jamปัจจุบัน (2013) มีปัญหาที่เกิดขึ้นกับคน C ++ และ Java มากกว่า 200 บรรทัดเมื่อเทียบกับคน Python ที่แก้ไขปัญหาเดียวกันโดยใช้รหัส 40 บรรทัดเท่านั้น Python ไม่สามารถเทียบเคียงได้โดยตรงกับ C ++ และ Java แต่ความแตกต่างของคำฟุ่มเฟื่อยที่ฉันคิดว่าอาจมีอิทธิพลต่อประสิทธิภาพของอัลกอริทึม การรู้อัลกอริทึมที่ถูกต้องสำคัญอย่างไรเมื่อเทียบกับการเลือกภาษา สามารถใช้โปรแกรม Python ที่ใช้งานได้ดีใน C ++ หรือ Java ในวิธีที่ดีกว่า (ใช้อัลกอริทึมเดียวกัน) และสิ่งนี้มีความสัมพันธ์กับการใช้คำฟุ่มเฟื่อยตามธรรมชาติของภาษาโปรแกรมบางภาษาหรือไม่?
35 java  c++  algorithms  python 

2
การเลือกการนำ JAX-RS ไปใช้สำหรับโครงการใหม่
ฉันกำลังเริ่มโครงการ Java ใหม่ซึ่งจะต้องมี RESTful API มันจะเป็นแอปพลิเคชันธุรกิจ SaaS ที่ให้บริการลูกค้ามือถือ ฉันได้พัฒนาโครงการหนึ่งกับ Java EE 6 แต่ฉันไม่คุ้นเคยกับระบบนิเวศมากนักเนื่องจากประสบการณ์ส่วนใหญ่ของฉันอยู่บนแพลตฟอร์ม Microsoft ซึ่งจะเป็นตัวเลือกที่เหมาะสมสำหรับการใช้งาน JAX-RS สำหรับโครงการใหม่เช่นที่อธิบายไว้ ตัดสินจากรายการของวิกิพีเดียดูเหมือนว่าคู่แข่งหลักคือ Jersey, Apache CXF, RESTeasy และ Restlet แต่การเปรียบเทียบการนำ JAX-RS ไปใช้ในวิกิพีเดียนั้นมาจากปี 2008 ความประทับใจครั้งแรกของฉันจากหน้าแรกของพวกเขาคือ: CXFตั้งเป้าหมายที่จะเป็นโซลูชั่นที่ครอบคลุมมาก (เตือนให้ฉันนึกถึง WCF ในพื้นที่ของ Microsoft) ซึ่งทำให้ฉันคิดว่ามันมีความซับซ้อนในการเข้าใจการตั้งค่าและการดีบักมากกว่าสิ่งที่ฉันต้องการ Jerseyเป็นการนำมาใช้อ้างอิงและอาจเป็นทางเลือกที่ดี แต่เป็นมรดกจาก Sun และฉันไม่แน่ใจว่า Oracle จัดการกับมันอย่างไร (หน้าประกาศไม่ทำงานและการแจ้งเตือนครั้งล่าสุดจาก 4 เดือนก่อน); RESTeasyมาจาก JBoss และอาจเป็นตัวเลือกที่ดีแม้ว่าฉันจะไม่แน่ใจเกี่ยวกับการเรียนรู้ ดูเหมือนว่าRestletจะได้รับความนิยม แต่มีประวัติมากมายฉันไม่แน่ใจว่ามันทันสมัยใน Java …
35 java  rest  java-ee 

3
ข้อความที่ส่งผ่านใน OO คืออะไร?
ฉันได้เรียนรู้การเขียนโปรแกรม OO เป็นหลักใน C ++, C # และ Java ฉันคิดว่าฉันมีความเข้าใจเป็นอย่างดีเกี่ยวกับความเข้าใจของฉันเกี่ยวกับการห่อหุ้มการสืบทอดและความหลากหลาย (รวมถึงการอ่านคำถามจำนวนมากบนไซต์นี้) สิ่งหนึ่งที่ดูเหมือนจะปรากฏขึ้นที่นี่และมีแนวคิดของ "การส่งข้อความ" เห็นได้ชัดว่านี่คือสิ่งที่ไม่ได้ใช้ในขณะที่การเขียนโปรแกรม OO ในภาษาหลักของวันนี้ แต่ได้รับการสนับสนุนโดย Smalltalk คำถามของฉันคือ: ข้อความผ่านคืออะไร (มีคนให้ตัวอย่างที่เป็นประโยชน์ได้หรือไม่) มีการสนับสนุน "ข้อความส่งผ่าน" นี้ใน C ++, C # หรือ Java หรือไม่
35 java  c#  c++  object-oriented 

5
วิธีจัดการกับข้อยกเว้นที่ตรวจสอบซึ่งไม่สามารถโยนได้
ตัวอย่าง: foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); เนื่องจากการเข้ารหัสเป็น hardcoded และถูกต้องตัวสร้างจะไม่โยน UnsupportedEncodingException ที่ประกาศในสเปค (ยกเว้นกรณีที่จาวาใช้งานไม่ได้ซึ่งในกรณีนี้ฉันหลงทางอยู่แล้ว) อย่างไรก็ตาม Java บังคับให้ฉันจัดการกับข้อยกเว้นนั้นอยู่ดี ปัจจุบันดูเหมือนว่า try { foobar = new InputStreamReader(p.getInputStream(), "ISO-8859-1"); } catch(UnsupportedEncodingException e) { /* won't ever happen */ } ความคิดใดจะทำให้ดีขึ้นได้อย่างไร

14
Java เป็นตัวเลือกที่ดีสำหรับการพัฒนาเว็บไซต์เมื่อใด [ปิด]
Java เป็นตัวเลือกที่ดีสำหรับการพัฒนาเว็บไซต์เมื่อใด กรุณาอย่าพูดว่า "เมื่อคุณมีทีมพัฒนาที่รู้จักจาวาเท่านั้น"

8
บังคับให้ผู้พัฒนารายอื่นเรียกใช้วิธีการหลังจากทำงานเสร็จ
ในห้องสมุดใน Java 7 ฉันมีคลาสที่ให้บริการกับคลาสอื่น หลังจากสร้างอินสแตนซ์ของคลาสบริการนี้วิธีการหนึ่งในนั้นอาจถูกเรียกหลายครั้ง (ลองเรียกมันว่าdoWork()เมธอด) ดังนั้นฉันไม่ทราบว่าเมื่องานของคลาสบริการเสร็จสมบูรณ์ ปัญหาคือระดับบริการใช้วัตถุหนักและควรปล่อยพวกเขา ฉันตั้งค่าส่วนนี้ในวิธีการ (เรียกว่าrelease()) แต่ไม่รับประกันว่านักพัฒนารายอื่นจะใช้วิธีนี้ มีวิธีบังคับให้ผู้พัฒนารายอื่นเรียกใช้วิธีนี้หลังจากทำงานของคลาสบริการหรือไม่ แน่นอนฉันสามารถบันทึกได้ แต่ฉันต้องการบังคับพวกเขา หมายเหตุ: ฉันไม่สามารถเรียกrelease()เมธอดในdoWork()เมธอดได้เนื่องจากdoWork() ต้องการอ็อบเจ็กต์เหล่านั้นเมื่อมันถูกเรียกในครั้งถัดไป
34 java 

6
การใช้กองซ้อนโดยใช้สองคิวคืออะไร
ฉันมีคำถามทำการบ้านต่อไปนี้: ใช้วิธีการซ้อน (x) และ pop () โดยใช้สองคิว ดูเหมือนว่าจะแปลกสำหรับฉันเพราะ: Stack คือคิว (LIFO) ฉันไม่เห็นว่าทำไมคุณต้องใช้สองคิวในการติดตั้ง ฉันค้นหารอบ ๆ : GeeksForGeeks StackOverflow และพบวิธีแก้ไขปัญหาสองสามข้อ นี่คือสิ่งที่ฉันลงเอยด้วย: public class Stack<T> { LinkedList<T> q1 = new LinkedList<T>(); LinkedList<T> q2 = new LinkedList<T>(); public void push(T t) { q1.addFirst(t); } public T pop() { if (q1.isEmpty()) { throw new RuntimeException( …
34 java  stack 

8
การเอาชนะ Object.finalize () ไม่ดีจริงเหรอ?
ข้อโต้แย้งหลักสองข้อต่อการยกเลิกObject.finalize()คือ: คุณไม่ต้องตัดสินใจเมื่อมันถูกเรียก มันอาจจะไม่ถูกเรียกเลย หากฉันเข้าใจสิ่งนี้อย่างถูกต้องฉันไม่คิดว่าสิ่งเหล่านี้เป็นเหตุผลที่ดีพอที่จะเกลียดObject.finalize()มาก มันขึ้นอยู่กับการนำ VM ไปใช้และ GC เพื่อพิจารณาว่าเวลาที่เหมาะสมในการจัดสรรคืนวัตถุนั้นไม่ใช่นักพัฒนา เหตุใดจึงสำคัญที่ต้องตัดสินใจเมื่อObject.finalize()ถูกเรียก ตามปกติและแก้ไขให้ถูกต้องหากฉันผิดเวลาที่Object.finalize()จะไม่ถูกเรียกก็คือเมื่อแอปพลิเคชันถูกยกเลิกก่อนที่ GC จะมีโอกาสเรียกใช้ อย่างไรก็ตามวัตถุได้ถูกจัดสรรคืนเมื่อกระบวนการของแอปพลิเคชันสิ้นสุดลง จึงObject.finalize()ไม่ได้รับการเรียกเนื่องจากไม่จำเป็นต้องโทร ทำไมนักพัฒนาถึงสนใจ? ทุกครั้งที่ฉันใช้วัตถุที่ฉันต้องปิดเอง (เช่นตัวจัดการไฟล์และการเชื่อมต่อ) ฉันจะผิดหวังมาก ฉันต้องตรวจสอบอย่างต่อเนื่องว่าวัตถุมีการนำไปใช้close()หรือไม่และฉันแน่ใจว่าฉันไม่ได้รับสายบางครั้งในอดีต ทำไมมันไม่ได้เป็นเพียงที่เรียบง่ายและปลอดภัยในการเพียงแค่ปล่อยให้มันไป VM และ GC ในการกำจัดของวัตถุเหล่านี้โดยการวางclose()การดำเนินงานในObject.finalize()?

3
การพัฒนา Java โดยทั่วไปเกี่ยวข้องกับคลาสย่อยมากกว่า C # /. NET หรือไม่
ฉันเพิ่งเริ่มดูการพัฒนา Android สิ่งนี้นำฉันกลับสู่โลกของการพัฒนาซอฟต์แวร์ Java ครั้งสุดท้ายที่ฉันทำงานกับ Java ฉันจะยอมรับว่าฉันไม่เข้าใจ OOP เท่าที่ฉันคิดตอนนี้ หลังจากใช้งาน C # เป็นส่วนใหญ่ในอาชีพของฉันฉันสังเกตเห็นความแตกต่างที่น่าตกใจในการใช้ Java และ C # ในการสืบทอด ใน C # ดูเหมือนว่าสามารถหลีกเลี่ยงการสืบทอดในสถานการณ์ส่วนใหญ่ งานในมือสามารถทำได้โดยใช้คลาสที่เป็นรูปธรรมของ. NET Framework ใน Java จากสิ่งที่ฉันรวบรวมจากตัวอย่างโค้ดดูเหมือนว่า Java framework จะให้ส่วนต่อประสานหรือคลาสนามธรรมที่มีความหมายที่จะนำไปใช้ / ขยายโดยนักพัฒนา ดูเหมือนว่าจะมีความแตกต่างใหญ่เกินไปที่จะทำให้สไตล์ อะไรคือเหตุผลเบื้องหลังสิ่งนี้ ฉันรู้สึกว่าฉันจะไม่เขียนโค้ด Java ที่สะอาดจนกว่าฉันจะเข้าใจสิ่งนี้ นอกจากนี้ยังมีข้อ จำกัด เพียงแค่ Android SDK หรือนี่เป็นแนวทางแบบกว้าง ๆ ของ OOP หรือไม่? หรือใส่ในอีกทางหนึ่ง มันเกี่ยวกับการออกแบบของสองภาษานี้ที่ดูเหมือนว่าจะส่งเสริมให้ใช้มรดกมากกว่าหรือน้อยกว่าอีก? …

2
วิธีการปรับปรุงตามรูปแบบของตัวสร้างของ Bloch เพื่อให้เหมาะสมกับการใช้งานในชั้นเรียนที่ขยายได้สูง
ฉันได้รับอิทธิพลอย่างมากจากหนังสือ Java ที่มีประสิทธิภาพของ Joshua Bloch (ฉบับที่ 2) ซึ่งอาจจะมากกว่าหนังสือโปรแกรมที่ฉันอ่าน โดยเฉพาะรูปแบบตัวสร้างของเขา (รายการ 2) มีผลมากที่สุด แม้ผู้สร้างของ Bloch จะช่วยให้ฉันออกไปไกลกว่าเดิมในช่วงสองเดือนกว่าในช่วงสิบปีที่ผ่านมาของการเขียนโปรแกรม แต่ฉันก็ยังพบว่าตัวเองกำลังชนกำแพงเดียวกัน: การขยายชั้นเรียนด้วยโซ่ตรวนวิธีการกลับมาด้วยตนเอง - โดยเฉพาะอย่างยิ่งเมื่อ generics เข้ามาเล่นและโดยเฉพาะอย่างยิ่งกับgenerics อ้างอิงตนเอง (เช่นComparable<T extends Comparable<T>>) มีความต้องการหลักสองประการที่ฉันมีอยู่เพียงข้อที่สองที่ฉันต้องการเน้นในคำถามนี้: ปัญหาแรกคือ "วิธีการแบ่งปันวิธีการส่งกลับโซ่ตนเองโดยไม่ต้องใช้พวกเขาในทุก ... เดียว ... ชั้น?" สำหรับผู้ที่อาจจะอยากรู้อยากเห็นฉันได้กล่าวถึงส่วนนี้ที่ด้านล่างของคำตอบโพสต์นี้ แต่ไม่ใช่สิ่งที่ฉันต้องการมุ่งเน้นที่นี่ ปัญหาที่สองที่ฉันขอความคิดเห็นคือ "ฉันจะสร้างตัวสร้างในชั้นเรียนที่มีความตั้งใจที่จะขยายโดยชั้นเรียนอื่น ๆ อีกมากมายได้อย่างไร" การขยายชั้นเรียนด้วยตัวสร้างนั้นเป็นเรื่องยากกว่าการขยายชั้นเรียนแบบไม่มี การขยายชั้นเรียนที่มีการสร้างเป็นที่ยังดำเนินการNeedableและดังนั้นจึงมียาชื่อสามัญสำคัญที่เกี่ยวข้องกับมันเป็นเทอะทะ นั่นคือคำถามของฉัน: ฉันจะปรับปรุง (สิ่งที่ฉันเรียกว่า) ตัวสร้าง Bloch ได้อย่างไรฉันจึงสามารถแนบตัวสร้างกับคลาสใดก็ได้ - แม้ว่าคลาสนั้นจะมีความหมายว่า "คลาสพื้นฐาน" ที่อาจเป็น …

11
Java vs. C # - เปอร์สเปคทีฟการทำงาน [ปิด]
หากคุณมีประสบการณ์หลายปีในการทำงานกับ Java และประสบการณ์หลายปีในการทำงานกับ C # และ. NET ฉันจะให้ความคิดเห็นของคุณเกี่ยวกับความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่างสองสภาพแวดล้อมนี้ ลูกค้าคนหนึ่งของเรากำลังพิจารณาที่จะเปลี่ยนโซลูชันซอฟต์แวร์ที่มีอยู่ ในฐานะที่เป็นทดแทนจะต้องมีประมาณ 10 - 15 ปีคนทำงานตัวเลือกสำหรับ Java หรือ. NET บนพื้นฐานของความแตกต่างของการผลิตระหว่างพวกเขาอาจมีอิทธิพลต่อการลงทุนที่จำเป็นและเวลาในการตลาดอย่างมีนัยสำคัญ คุณจะสามารถให้เราเป็นตัวบ่งชี้ถึงความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่าง Java และ C # /. NET หรือไม่ ฉันต้องการรับคำตอบดังนี้: ประสบการณ์ของฉันขึ้นอยู่กับประสบการณ์ X ปีที่ทำงานกับ Java และประสบการณ์ X ปีที่ทำงานกับ C # /. NET Java มีประสิทธิภาพเพิ่มขึ้น X% แล้ว C # .NET หรือ C # /. NET …

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