จุดประสงค์ของการมีมากกว่าหนึ่งคลาสในไฟล์ Java คืออะไร? ฉันยังใหม่กับ Java
แก้ไข: สามารถทำได้โดยการสร้างชั้นในภายในคลาสสาธารณะใช่ไหม?
จุดประสงค์ของการมีมากกว่าหนึ่งคลาสในไฟล์ Java คืออะไร? ฉันยังใหม่กับ Java
แก้ไข: สามารถทำได้โดยการสร้างชั้นในภายในคลาสสาธารณะใช่ไหม?
คำตอบ:
ใช่มันทำได้ อย่างไรก็ตามสามารถมีคลาสระดับบนสุดสาธารณะได้เพียงหนึ่งคลาสต่อ.java
ไฟล์และคลาสระดับบนสุดสาธารณะต้องมีชื่อเดียวกับไฟล์ต้นฉบับ
จุดประสงค์ของการรวมหลายคลาสไว้ในซอร์สไฟล์เดียวคือการรวมฟังก์ชันการสนับสนุนที่เกี่ยวข้อง (โครงสร้างข้อมูลภายในคลาสการสนับสนุน ฯลฯ ) ร่วมกับคลาสสาธารณะหลัก โปรดทราบว่าคุณไม่ควรทำเช่นนี้เสมอ - ผลกระทบเดียวคือความสามารถในการอ่าน (หรือไม่) ของรหัสของคุณ
java.awt.LightweightDispatcher
?
หากคุณต้องการใช้คลาสสาธารณะคุณต้องนำไปใช้ในไฟล์ที่มีชื่อเดียวกับคลาสนั้น ไฟล์เดียวสามารถมีคลาสสาธารณะและคลาสส่วนตัวบางคลาสก็ได้ สิ่งนี้มีประโยชน์หากคลาสสาธารณะใช้เป็นการภายในเท่านั้น นอกจากนี้คลาสสาธารณะยังสามารถมีคลาสภายใน
แม้ว่าจะเป็นการดีที่จะมีคลาสส่วนตัวอย่างน้อยหนึ่งคลาสในซอร์สไฟล์เดียว แต่ฉันจะบอกว่ามันสามารถอ่านได้มากกว่าที่จะใช้คลาสภายในและคลาสที่ไม่ระบุชื่อแทน ตัวอย่างเช่นเราสามารถใช้คลาสที่ไม่ระบุชื่อเพื่อกำหนดคลาสตัวเปรียบเทียบภายในคลาสสาธารณะ:
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
โดยปกติคลาส Comparator จะต้องการไฟล์แยกต่างหากเพื่อให้เป็นแบบสาธารณะ วิธีนี้จะรวมเข้ากับคลาสที่ใช้
ใช่มากเท่าที่คุณต้องการ!
แต่มีคลาส "สาธารณะ" เพียงคลาสเดียวในทุกไฟล์
ไฟล์. java เรียกว่าหน่วยคอมไพล์ แต่ละหน่วยคอมไพล์อาจมีคลาสและอินเทอร์เฟซระดับบนสุดจำนวนเท่าใดก็ได้ หากไม่มีประเภทระดับบนสุดสาธารณะยูนิตคอมไพล์สามารถตั้งชื่ออะไรก็ได้
//Multiple.java
//preceding package and import statements
class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
สามารถมีคลาส / อินเตอร์เฟสสาธารณะเพียงหนึ่งเดียวในหน่วยคอมไพล์ cu ต้องตั้งชื่อให้ตรงกับประเภทสาธารณะระดับบนสุดนี้
//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
ประเด็นสำคัญเกี่ยวกับวิธีการหลัก - ตอนที่ 1
(คะแนนเกี่ยวกับจำนวนชั้นเรียนและระดับการเข้าถึงในส่วนที่ 2)
ใช่คุณสามารถสร้างคลาสสาธารณะได้มากกว่าหนึ่งคลาส แต่ต้องเป็นคลาสที่ซ้อนกัน
public class first {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public class demo1
{
public class demo2
{
}
}
}
นอกจากคลาสภายในที่ไม่ระบุชื่อแล้วการใช้งานอีกอย่างคือคลาสภายในส่วนตัวที่ใช้อินเทอร์เฟซสาธารณะ ( ดูบทความนี้ ) ชั้นนอกสามารถเข้าถึงฟิลด์ส่วนตัวและวิธีการทั้งหมดของคลาสภายใน
สิ่งนี้ช่วยให้คุณสร้างคลาสสองคลาสที่เชื่อมโยงกันอย่างแน่นหนาเช่นโมเดลและมุมมองโดยไม่ต้องเปิดเผยการนำไปใช้อย่างใดอย่างหนึ่ง อีกตัวอย่างหนึ่งคือคอลเล็กชันและตัวทำซ้ำ
โดยทั่วไปควรมีหนึ่งคลาสต่อไฟล์ หากคุณจัดระเบียบสิ่งต่างๆในลักษณะนั้นเมื่อคุณค้นหาชั้นเรียนคุณจะรู้ว่าคุณต้องค้นหาไฟล์ที่มีชื่อนั้นเท่านั้น
ข้อยกเว้นคือเมื่อคลาสถูกนำไปใช้อย่างดีที่สุดโดยใช้คลาสตัวช่วยขนาดเล็กอย่างน้อยหนึ่งคลาส โดยปกติโค้ดจะง่ายที่สุดในการติดตามเมื่อมีคลาสเหล่านั้นอยู่ในไฟล์เดียวกัน ตัวอย่างเช่นคุณอาจต้องการคลาส wrapper 'tuple' ขนาดเล็กเพื่อส่งผ่านข้อมูลบางส่วนระหว่างการเรียกใช้เมธอด อีกตัวอย่างหนึ่งคือคลาส 'งาน' ที่ใช้ Runnable หรือ Callable อาจมีขนาดเล็กมากจนรวมเข้ากับคลาสหลักที่สร้างและเรียกพวกเขาได้ดีที่สุด
ใช่ 200% ,
ตัวอย่าง:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
ทำได้ แต่สามารถมีคลาสสาธารณะได้เพียง 1 คลาสในแพ็กเกจใดก็ได้เนื่องจากคอมไพเลอร์ java สร้างไฟล์. Class ซึ่งมีชื่อเดียวกับชื่อคลาสสาธารณะดังนั้นหากคลาสสาธารณะมากกว่า 1 คลาสจะเป็นการยากที่จะเลือก คอมไพเลอร์ว่าชื่อไฟล์ Class ควรเป็นอย่างไร
แตกต่างกันไป ... ตัวอย่างหนึ่งจะเป็นคลาสที่ไม่ระบุตัวตน (คุณจะพบสิ่งเหล่านี้มากเมื่อใช้ตัวฟังเหตุการณ์เป็นต้น)
ฉันคิดว่ามันควรจะเป็น "คลาสสาธารณะระดับบนสุดที่ไม่มีสถานะคงที่เดียวต่อไฟล์. java" ไม่ใช่เหรอ?
หากคุณต้องการใช้ซิงเกิลตันนั่นคือคลาสที่รันในโปรแกรมของคุณโดยมีอินสแตนซ์เดียวในหน่วยความจำตลอดการทำงานของแอปพลิเคชันวิธีหนึ่งในการใช้ซิงเกิลตันคือการซ้อนคลาสสแตติกส่วนตัวภายในคลาสสาธารณะ . จากนั้นคลาสส่วนตัวภายในจะสร้างอินสแตนซ์ตัวเองก็ต่อเมื่อมีการเรียกใช้วิธีสาธารณะในการเข้าถึงอินสแตนซ์ส่วนตัว
ตรวจสอบบทความวิกินี้
https://en.wikipedia.org/wiki/Singleton_pattern
แนวคิดนี้ใช้เวลาสักครู่ในการเคี้ยว
ในไฟล์. java สามารถมีคลาสระดับบนสุดสาธารณะเพียงคลาสเดียวที่มีชื่อเหมือนกับไฟล์ แต่อาจมีคลาสภายในสาธารณะหลายคลาสซึ่งสามารถส่งออกไปยังทุกคนและเข้าถึงฟิลด์ / วิธีการของคลาสภายนอกได้เช่น : AlertDialog.Builder (แก้ไขโดย 'public static') ในAlertDialog (แก้ไขโดย 'public')
ใช่คุณสามารถมีมากกว่าหนึ่งคลาสในไฟล์. Java หนึ่งไฟล์ แต่คุณทำให้หนึ่งในนั้นเป็นแบบสาธารณะ และบันทึกไฟล์. java ที่มีชื่อเดียวกับชื่อของคลาสสาธารณะ เมื่อคุณจะรวบรวมไฟล์. java นั้นกว่าที่คุณจะได้รับไฟล์. class แยกสำหรับแต่ละคลาสที่กำหนดไว้ในไฟล์. java
นอกจากนี้ยังมีวิธีการมากเกินไปในการกำหนดคลาสมากกว่าหนึ่งคลาสในไฟล์. java
ครับ! ไฟล์. java สามารถมีคลาสสาธารณะได้เพียงคลาสเดียว
หากคุณต้องการให้คลาสทั้งสองนี้เป็นแบบสาธารณะจะต้องใส่เป็นไฟล์. java สองไฟล์: A.java และ B.java
ได้คุณสามารถมีมากกว่าหนึ่งคลาสในไฟล์. java หนึ่งในนั้นสามารถเป็นสาธารณะได้ ส่วนอื่น ๆ เป็นแพ็คเกจส่วนตัว ไม่สามารถเป็นส่วนตัวหรือได้รับการปกป้อง หากเป็นแบบสาธารณะไฟล์จะต้องมีชื่อของคลาสนั้น มิฉะนั้นสามารถกำหนดสิ่งใด ๆ ให้กับไฟล์นั้นเป็นชื่อได้
การมีหลายคลาสในไฟล์เดียวหมายความว่าคลาสเหล่านั้นอยู่ในแพ็คเกจเดียวกัน ดังนั้นคลาสอื่น ๆ ที่อยู่ในแพ็กเกจนั้น แต่ไม่อยู่ในไฟล์นั้นก็สามารถใช้คลาสเหล่านั้นได้เช่นกัน ยิ่งไปกว่านั้นเมื่อนำเข้าแพ็กเกจนั้นชั้นนำเข้าก็สามารถใช้งานได้เช่นกัน
สำหรับการตรวจสอบรายละเอียดเพิ่มเติมคุณสามารถเยี่ยมชมบล็อกโพสต์ของฉันในที่นี่
ระดับบนสุดของชั้นสาธารณะสามารถมีได้เพียงคนเดียวในไฟล์เดียว ชื่อคลาสของคลาสสาธารณะนั้นควรเป็นชื่อของไฟล์ สามารถมีคลาสภายในสาธารณะได้มากมาย
คุณสามารถมีหลายคลาสในไฟล์เดียว ขีด จำกัด สำหรับระดับต่างๆของการมองเห็นคลาสในไฟล์มีดังนี้:
คลาสระดับบนสุด: คลาส
สาธารณะ 1 คลาส
0 คลาสส่วนตัวตาม
จำนวนคลาสเริ่มต้น / ที่มีการป้องกัน
ชั้นเรียนภายใน: ชั้นเรียนภายใน
จำนวนเท่าใดก็ได้ที่มีการมองเห็นใด ๆ (ค่าเริ่มต้น, ส่วนตัว, การป้องกัน, สาธารณะ)
กรุณาแก้ไขฉันถ้าฉันผิด
ใช่มันทำได้ อย่างไรก็ตามสามารถมีคลาสสาธารณะได้เพียงหนึ่งคลาสต่อไฟล์. java เนื่องจากคลาสสาธารณะต้องมีชื่อเดียวกับไฟล์ต้นฉบับ