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

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

8
ทำไม Java ไม่อนุญาตให้ใช้เงื่อนไขตัวเลขเช่นถ้า (5) {…} ถ้า C ทำ?
ฉันมีโปรแกรมเล็ก ๆ สองโปรแกรมนี้: C #include <stdio.h> int main() { if (5) { printf("true\n"); } else { printf("false\n"); } return 0; } ชวา class type_system { public static void main(String args[]) { if (5) { System.out.println("true"); } else { System.out.println("false"); } } } ซึ่งรายงานข้อผิดพลาด: type_system.java:4: error: incompatible types: int cannot be …
33 java  c  type-systems 

8
การขว้างข้อยกเว้นเป็นการต่อต้านแบบที่นี่หรือไม่?
ฉันเพิ่งพูดคุยเกี่ยวกับตัวเลือกการออกแบบหลังจากการตรวจสอบโค้ด ฉันสงสัยว่าความคิดเห็นของคุณคืออะไร มีPreferencesคลาสนี้ซึ่งเป็นที่เก็บข้อมูลสำหรับคู่คีย์ - ค่า ค่า Null นั้นถูกกฎหมาย (สำคัญมาก) เราคาดหวังว่าค่าบางอย่างอาจยังไม่ถูกบันทึกและเราต้องการจัดการกับกรณีเหล่านี้โดยอัตโนมัติโดยเริ่มต้นด้วยค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าเมื่อมีการร้องขอ วิธีแก้ปัญหาที่กล่าวถึงใช้รูปแบบต่อไปนี้ (หมายเหตุ: นี่ไม่ใช่รหัสจริงแน่นอน - มันง่ายสำหรับจุดประสงค์ในการอธิบาย): public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch …

2
ใครสามารถอธิบายอย่างง่าย ๆ ว่าอะไรคือรูปแบบของตัวทำลาย
ฉันต้องการถ้าคุณสามารถอธิบายให้ฉันในวิธีที่ง่ายวิธี disatteror ทำงานอย่างไร แนวคิดนี้ทำให้ฉันเข้าใจยาก บางทีด้วยความช่วยเหลือของคุณฉันสามารถเข้าใจมัน

10
มันจะโอเคมั้ยถ้ามีวัตถุที่หล่อด้วยตัวเองแม้ว่ามันจะทำให้ API ของคลาสย่อยของพวกเขาสกปรก
Baseฉันได้เรียนฐาน มันมีอยู่สอง subclasses, และSub1 Sub2แต่ละคลาสย่อยมีวิธีเพิ่มเติมบางอย่าง ตัวอย่างเช่นSub1มีSandwich makeASandwich(Ingredients... ingredients)และมีSub2boolean contactAliens(Frequency onFrequency) เนื่องจากวิธีการเหล่านี้ใช้พารามิเตอร์ที่แตกต่างกันและทำสิ่งที่แตกต่างอย่างสิ้นเชิงพวกเขาไม่เข้ากันอย่างสมบูรณ์และฉันไม่สามารถใช้ความหลากหลายในการแก้ปัญหานี้ได้ Baseมอบการทำงานส่วนใหญ่และฉันมีBaseวัตถุจำนวนมาก อย่างไรก็ตามBaseวัตถุทั้งหมดเป็นแบบ a Sub1หรือ a Sub2และบางครั้งฉันจำเป็นต้องรู้ว่ามันคืออะไร ดูเหมือนจะเป็นการดีที่จะทำสิ่งต่อไปนี้: for (Base base : bases) { if (base instanceof Sub1) { ((Sub1) base).makeASandwich(getRandomIngredients()); // ... etc. } else { // must be Sub2 ((Sub2) base).contactAliens(getFrequency()); // ... etc. } } ดังนั้นฉันจึงคิดกลยุทธ์เพื่อหลีกเลี่ยงสิ่งนี้โดยไม่ต้องร่าย Baseตอนนี้มีวิธีการเหล่านี้: …

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

3
Java ฟรี / โอเพนซอร์สหรือไม่?
เมื่อวันที่ 13 พฤศจิกายน 2549 Sun ได้ปล่อย Java เป็นซอฟต์แวร์เสรีและโอเพ่นซอร์สส่วนใหญ่ (FOSS) ภายใต้เงื่อนไขของ GNU General Public License (GPL) เมื่อวันที่ 8 พฤษภาคม 2550 Sun ได้เสร็จสิ้นกระบวนการทำให้แกนประมวลผลหลักของ Java ทั้งหมดอยู่ภายใต้เงื่อนไขการแจกจ่ายซอฟต์แวร์ฟรี / โอเพ่นซอร์สนอกเหนือจากรหัสขนาดเล็กที่ Sun ไม่ได้ถือลิขสิทธิ์ OpenJDK (Open Java Development Kit) เป็นการใช้งานฟรีและโอเพ่นซอร์สของภาษาการเขียนโปรแกรม Java เป็นผลมาจากความพยายามของ Sun Microsystems ที่เริ่มขึ้นในปี 2549 การดำเนินงานนี้ได้รับอนุญาตภายใต้ GNU General Public License (GNU GPL) โดยมีข้อยกเว้นในการเชื่อมโยง ทำไมยังมีคนที่พูดว่า Java ไม่ได้เป็นโอเพ่นซอร์สหรือเป็นอิสระในการพูดฟรี? …

3
ทำไมไม่ Green Threads
ในขณะที่ฉันรู้ว่าคำถามนี้ได้รับการครอบคลุมแล้ว (เช่นhttps://stackoverflow.com/questions/5713142/green-threads-vs-non-green-threads ) ฉันไม่รู้สึกว่าฉันได้รับคำตอบที่น่าพอใจ . คำถามคือ: ทำไม JVM ไม่สนับสนุนเธรดสีเขียวอีกต่อไป? มันบอกว่านี้ในแบบโค้ด Java คำถามที่พบบ่อย : เธรดสีเขียวหมายถึงโหมดการทำงานของ Java Virtual Machine (JVM) ซึ่งโค้ดทั้งหมดจะถูกดำเนินการในเธรดระบบปฏิบัติการเดียว และสิ่งนี้จบบนjava.sun.com : ข้อเสียคือการใช้เธรดสีเขียวหมายถึงเธรดระบบบน Linux ไม่ได้รับประโยชน์และดังนั้นเครื่องเสมือน Java จึงไม่สามารถปรับขนาดได้เมื่อเพิ่มซีพียูเพิ่มเติม สำหรับฉันแล้วดูเหมือนว่า JVM อาจมีกระบวนการของระบบเท่ากับจำนวนแกนประมวลผลจากนั้นจึงรันเธรดสีเขียวที่ด้านบนของนั้น สิ่งนี้อาจมีข้อได้เปรียบที่ยิ่งใหญ่เมื่อคุณมีเธรดจำนวนมากซึ่งบล็อกบ่อยครั้ง (ส่วนใหญ่เป็นเพราะจำนวนสูงสุดของเธรด JVM ในปัจจุบัน) คิด?

7
ข้อความนี้เกี่ยวกับ C # และ Java ที่เป็นครึ่งหนึ่งของภาษาหมายถึงอะไร [ปิด]
ในบทความ: ทำไม POCOมีประโยคนี้: Maciej Sobczak ทำให้มันดี:“ ฉันไม่ชอบเมื่อมีคนให้ภาษาครึ่งหนึ่งกับฉันและบอกฉันว่ามันเป็นของฉันเอง” ฉันไม่เข้าใจสิ่งที่เขาหมายถึงแม้ว่าC # เป็นเจ้าของโดย Microsoft & Java เป็นของ Oracleแต่ก็ไม่ได้หมายความว่าพวกเขามีภาษาอยู่ครึ่งภาษาใช่หรือไม่ ฉันไม่พบหลักฐานใด ๆ ที่จะพิสูจน์ประโยคนั้นและฉันอยากรู้จริงๆเกี่ยวกับเรื่องนี้ และยิ่งอยากรู้มากขึ้นเกี่ยวกับส่วน 'สำหรับการป้องกันของฉันเอง'
32 java  c#  microsoft  oracle 

8
ลักษณะใดที่ดีกว่า (ตัวแปรอินสแตนซ์กับค่าตอบแทน) ใน Java
ฉันมักจะพบว่าตัวเองกำลังดิ้นรนเพื่อตัดสินใจว่าจะใช้วิธีใดในสองวิธีนี้เมื่อฉันต้องการใช้ข้อมูลทั่วไปในบางวิธีในชั้นเรียนของฉัน อะไรจะเป็นทางเลือกที่ดีกว่า ในตัวเลือกนี้ฉันสามารถสร้างตัวแปรอินสแตนซ์เพื่อหลีกเลี่ยงความต้องการที่จะต้องประกาศตัวแปรเพิ่มเติมและเพื่อหลีกเลี่ยงการกำหนดพารามิเตอร์เมธอด public class MyClass { private int var1; MyClass(){ doSomething(); doSomethingElse(); doMoreStuff(); } private void doSomething(){ var1 = 2; } private void doSomethingElse(){ int var2 = var1 + 1; } private void doMoreStuff(){ int var3 = var1 - 1; } } หรือเพียงแค่สร้างตัวแปรท้องถิ่นและส่งให้พวกเขาเป็นอาร์กิวเมนต์? public class MyClass { MyClass(){ int …

4
วิธีที่ถูกต้องในการจัดการกับการแก้ปัญหาการส่งออกใน Java คืออะไร
ในขณะที่โครงการ Java ปัจจุบันของฉันเติบโตขึ้นเรื่อย ๆ ฉันรู้สึกว่าจำเป็นที่จะต้องเพิ่มการดีบักเอาต์พุตในหลาย ๆ จุดของโค้ดของฉัน หากต้องการเปิดใช้งานหรือปิดใช้งานคุณลักษณะนี้อย่างเหมาะสมขึ้นอยู่กับการเปิดหรือปิดเซสชันการทดสอบฉันมักจะใส่private static final boolean DEBUG = falseจุดเริ่มต้นของชั้นเรียนที่การทดสอบของฉันกำลังตรวจสอบอยู่และใช้วิธีนี้เล็กน้อย (เช่น): public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } และไม่ชอบ แต่นั่นไม่ได้ทำให้ฉันสุขใจเพราะแน่นอนว่ามันใช้ได้ แต่อาจมีหลายคลาสเกินไปที่จะตั้งค่า DEBUG ให้เป็นจริงถ้าคุณไม่จ้องมองเพียงสองสามคน ในทางกลับกันฉัน (เหมือน - ฉันคิดว่า …

4
เป็นไปได้ไหมที่จะรวบรวม Java เป็นรหัสเครื่อง? (ไม่ใช่ไบต์)
คุณสามารถคอมไพล์ Java โดยตรงในรหัสเครื่องได้หรือไม่? ฉันต้องการทำสิ่งนี้ดังนั้นฉันจึงสามารถควบคุมได้ว่าจะใช้แพลตฟอร์มใดและไม่รู้ว่า C, C ++ เป็นต้น
32 java 

6
คลาสใดควรได้รับการ autowired โดย Spring (เมื่อใช้การฉีดพึ่งพา)
ฉันได้ใช้การพึ่งพาการฉีดในฤดูใบไม้ผลิมาระยะหนึ่งแล้วและฉันเข้าใจว่ามันทำงานอย่างไรและข้อดีและข้อเสียของการใช้มันคืออะไร อย่างไรก็ตามเมื่อฉันสร้างคลาสใหม่ฉันมักจะสงสัย - คลาสนี้ควรจัดการโดย Spring IOC Container หรือไม่ และฉันไม่ต้องการพูดถึงความแตกต่างระหว่างคำอธิบายประกอบ @Autowired, การกำหนดค่า XML, การฉีด setter, การฉีดคอนสตรัคเตอร์ ฯลฯ คำถามของฉันคือคำถามทั่วไป สมมติว่าเรามีบริการที่มีตัวแปลง: @Service public class Service { @Autowired private Repository repository; @Autowired private Converter converter; public List<CarDto> getAllCars() { List<Car> cars = repository.findAll(); return converter.mapToDto(cars); } } @Component public class Converter { public CarDto …

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

3
ถ้าฉันใช้อินเทอร์เฟซจะเรียกว่าการสืบทอด?
ถ้าชั้นเรียนของฉันimplementsมีอินเตอร์เฟซฉันจะบอกได้ไหมว่าฉันกำลังติดตามมรดกอยู่? ฉันรู้ว่าเมื่อเรียนextendsอีกชั้นหนึ่งแล้วมันเป็นมรดก

9
ทำไมเราต้องมีคลาส Builder เมื่อใช้รูปแบบตัวสร้าง?
ฉันเห็นการใช้งานหลายอย่างของรูปแบบตัวสร้าง (ส่วนใหญ่ใน Java) พวกเขาทั้งหมดมีคลาสเอนทิตี้ (สมมุติว่าPersonคลาส) และคลาสบิลPersonBuilderเดอร์ ผู้สร้าง "สแต็ค" ฟิลด์ที่หลากหลายและส่งกลับค่าnew Personด้วยอาร์กิวเมนต์ที่ส่งผ่าน ทำไมเราต้องมีคลาสผู้สร้างอย่างชัดเจนแทนที่จะใส่เมธอดผู้สร้างทั้งหมดลงในPersonคลาสเอง? ตัวอย่างเช่น: class Person { private String name; private Integer age; public Person() { } Person withName(String name) { this.name = name; return this; } Person withAge(int age) { this.age = age; return this; } } ฉันสามารถพูดได้ Person john = …

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