2010-09-02 8 views

Trả lời

50

số

So sánh tốt nhất là với tệp Java ARchive (Jar). Java sử dụng các gói để kiểm soát không gian tên và rất giống với các không gian tên của C#.

Sau đây là cách tôi muốn so sánh môi trường

Java     .Net 
====     ==== 
Class     Class 
Package     Namespace 
Jar      Assembly 
+1

Tôi sẽ thêm rằng một hội trong. Net có nhiều sửa đổi truy cập tinh tế hơn một Jar trong Java (ít nhất, đó là cách tôi hiểu nó). Câu trả lời này giải thích một chi tiết như vậy: http://stackoverflow.com/a/9808237/1168342 – Fuhrmanator

4

Không, tôi nghĩ rằng một gói Java sẽ tương tự như một namespace

Và một lắp ráp sẽ được nhiều hơn như một jar (tôi không như vậy chắc chắn về vấn đề này, như tôi là nhiều quen thuộc hơn với Java hơn. Net ... sửa tôi nếu tôi sai)

+2

Có Zilch-tất cả ngăn chặn tôi từ thêm lớp học để không gian tên java.lang bằng cách tạo ra một gói phần mềm mới . Một trong những cách để phá vỡ các ngoại lệ đã kiểm tra được gọi để thực hiện chính xác điều đó (ghi đè ngoại lệ và RuntimeException tại thời gian biên dịch). – Joshua

+0

+1 Câu trả lời của bạn phản ánh Wiki http://en.wikipedia.org/wiki/Java_package –

+0

@Joshua, việc thêm các lớp vào gói java.lang chỉ có thể nếu bạn đặt lớp trong jar của riêng nó. Nó cũng sẽ chỉ làm việc cho lớp được thêm vào. Nếu bạn đang cố gắng thay thế lớp Exception, tôi không chắc chắn nó có thể vì JRE tải bản thân nó ngay cả khi không có CLASSPATH được định nghĩa. –

1

gói Một Java cũng giống như một namespace trong .NET.

Tương đương với một phiên bản trong Java là tệp jar.

1

Một gói trong Java thường có nghĩa là chỉ là một không gian tên cho các lớp và giao diện, trong thực tế có nghĩa là một cấu trúc thư mục cụ thể. Đôi khi một tệp .jar cũng được gọi là một gói. Đây có lẽ là gần nhất bạn có được một hội đồng. Tệp .jar cũng có thể chứa các dữ liệu khác như hình ảnh hoặc về cơ bản là một loại tệp vì nó chỉ là một zip một lần nữa với một số cấu trúc nội dung cụ thể.

Trong mọi trường hợp: Thông thường khi bạn đọc "gói" liên quan đến "Java", một số loại không gian tên (thông qua cấu trúc thư mục, ví dụ: com.mycompany.myproject) có nghĩa là. Nó không giúp một số công cụ xây dựng đề cập đến quá trình xây dựng tệp .jar dưới dạng "bao bì" ;-)

0

Hãy nhớ rằng tôi cách xa chuyên gia Java, nhưng dù sao đi nữa về điều này:

Như được chỉ ra bởi các câu trả lời khác, gói không tương đương với một Hội đồng. Tuy nhiên, tôi không hoàn toàn đồng ý với ý tưởng của một .jar là tương đương với một hội. Với tôi, một lớp Java (chứa trong một tệp .class) gần với một Assembly hơn là .jar là. Tôi đang nói nguyên nhân này trong khi đơn vị tải cho CLR là Assembly (có nghĩa là tất cả các lớp chứa trong Assembly đó được nạp), đơn vị tải cho JVM là một lớp (khi JVM cần một lớp, ClassLoader không tải tất cả các lớp trong jar chứa, nó chỉ tải lớp cần thiết cụ thể đó).

Bạn có thể đọc thêm về java class tải ở đây: When does the JVM load classes?

và ở đây: http://www.lansa.com/support/notes/p0294.htm