2010-03-18 34 views
7

Khi tôi biên soạn một tệp java rỗng, nó không tạo ra bất kỳ tệp lớp nào. Vì vậy, muốn biết trình biên dịch phản ứng như thế nào khi biên dịch một tệp java rỗng. Nó nên đã tạo ra một tập tin lớp học trống trong này, tại sao nó không?Điều gì sẽ xảy ra nếu bạn biên dịch một tệp java rỗng?

+2

Có vẻ như bạn đã trả lời câu hỏi của riêng mình. Nếu bạn muốn biết * tại sao * nó xảy ra, đó là một câu hỏi khác. – MatrixFrog

+0

Tôi hỏi Tại sao tôi nghĩ vậy. – GuruKulki

+0

Đây là những gì sẽ xảy ra, nếu (javaFileContent.indexOf ("class") <- 1) trả về null; :) im chỉ đùa của khóa học – medopal

Trả lời

14

javac bắt đầu, thấy không có lớp nào được khai báo trong tệp và kết thúc. Để tạo một tệp .class, bạn phải khai báo lớp trong tệp.

+0

Vì vậy, liều nó có nghĩa là một trình biên dịch thành công mà không có lỗi? – user55924

1

Nếu tệp hoàn toàn trống và chỉ được gọi là .java thì không có gì để trình biên dịch thực hiện khi bạn cố gắng tạo tệp lớp. Nếu bạn có một phân khúc

class Foo { 
} 

trong file java sau đó một tập tin calss rỗng (Foo.class) sẽ được tạo

2

Vâng cho rằng một file Java có thể là như thế này:

// Foo.java 
class Bar 
{ 
} 

Làm cách nào để biết điều gì sẽ gọi là gì? Ngoài ra nó nên làm cho nó một lớp học hoặc một giao diện hoặc một enum?

Thay vì thực hiện lựa chọn cho bạn, nó không có gì (tôi có thể đã mong đợi một lỗi chính mình ... nhưng không có gì là một điều lành mạnh để làm là tốt).

+0

Các tệp .java hầu như trống. Được sử dụng cho chú thích gói, do đó, không làm gì với tệp nguồn trống có ý nghĩa hơn một chút so với xử lý lỗi dưới dạng lỗi. Xem http: //java.sun.com/docs/books/jls/third_edition/html/packages.html # 7.4.1.1 –

+0

gói chưa đặt tên sẽ thực sự trống rỗng ... – TofuBeer

6

Hầu hết các câu trả lời đều nói rằng tệp lớp không phải là tệp java được biên dịch mà là biểu diễn nhị phân của một lớp.

Việc biên dịch tệp java có thể dẫn đến hai tệp lớp nếu tệp java chứa hai lớp (mặc dù chỉ có một lớp có thể là công khai) và đó là lý do biên dịch một số thứ có lớp không sẽ dẫn đến tệp lớp 0.

-1

Javac bắt đầu và kiểm tra kích thước tệp và nếu không thì tệp đó sẽ trả về mà không cần tạo bất kỳ tệp .class nào.

0

javac tạo tệp lớp cho mỗi khai báo lớp (rõ ràng hoặc ẩn danh). vì tệp java của bạn không có, trình biên dịch chỉ không tạo ra bất kỳ tệp lớp nào.

1

Nếu bạn đã khai báo lớp học, (ví dụ: public class test{ }), nó sẽ biên dịch và tạo tệp test.class. Nó sẽ không chạy b'cos nó không có phương pháp main.

+0

Nó thực sự có thể tạo (ít nhất là với OpenJDK 1.6) một tệp rỗng và biên dịch nó, nhưng: 1. nó sẽ không tạo ra tệp '.class' và 2. nó sẽ không tạo ra cảnh báo. – rbrito

1

lớp Emptyclass {}

// Emptyclass thể được biên dịch thành công và tập tin .class cũng được tạo ra, nhưng trong quá trình thực hiện nó không thành công, bởi vì JVM doesnot tìm 'Phương pháp chính' trong lớp 'Emptyclass'

+0

trong khi đúng, không thực hiện không phải là câu hỏi, là nó :-) – kleopatra

0

Java sẽ không tạo tệp lớp của tệp java đó. Bởi vì đầu tiên nó sẽ tìm tên lớp. Vì vậy, không có gì xảy ra

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