2011-10-17 11 views

Trả lời

3

javac sản xuất *.class tệp cho mỗi tệp xuất hiện trong tệp .java. Vì vậy, không ai trong số họ, trình biên dịch chỉ làm gì. Không có gì cho một jvm.

9

Không có mối quan hệ một-một giữa các tệp .java và .class. Những gì bạn có là mối quan hệ một đối một giữa các lớp (hoặc khai báo lớp học) và .class-files.

Một tập tin Java mã nguồn với zero đẳng cấp tờ khai sẽ không dẫn đến bất kỳ .class file, vì vậy nó không thực sự xử lý bởi JVM ở tất cả.

$ touch Test.java 

$ ls 
Test.java 

$ javac Test.java 

$ ls 
Test.java 

Trong ngôn ngữ Java Specification một file Java mã nguồn là từ đồng nghĩa với một đơn vị Compilation. Phần có liên quan trong JLS là 7.3 Compilation Units.

Ngữ pháp được mô tả như sau:

CompilationUnit:
          PackageDeclaration opt ImportDeclarations opt TypeDeclarations opt
...

Các opt -subscript nói rằng một phần là tùy chọn. Vì TypeDeclarations là tùy chọn, không cần khai báo lớp nào.

+0

Tôi làm trống tệp '.java' (có mã nguồn dẫn đến tệp' .class') và chỉ đặt một nhận xét bên trong (không có gì ngoài chỉ là nhận xét). Ngay sau khi tôi lưu nó trong Eclipse, tệp '.class' biến mất. Tôi nghĩ rằng nó sẽ cho một lỗi, nhưng nó không. Cảm ơn lời giải thích này. * Bạn càng biết nhiều:) * – ADTC

1

Tệp nguồn trống sẽ không tạo tệp lớp, do đó không có gì để JVM "xử lý". Và một tệp lớp trống (mà không phải là một cái gì đó trình biên dịch sẽ tạo ra) là không hợp lệ, có thể dẫn đến một ClassFormatError hoặc một cái gì đó như thế, nếu đó là câu hỏi của bạn.

+0

cảm ơn các bạn vì câu trả lời .. – srini

Các vấn đề liên quan