2013-08-21 19 views
6

Khi tôi tạo dự án của mình bằng cách sử dụng IDE Eclipse, nó tạo ra một tệp lớp ngay cả khi có lỗi cú pháp trong mã của tôi?Tại sao Eclipse tạo tệp .class nếu có lỗi cú pháp trong tệp nguồn Java của tôi?

class Test {  
    public void test(String value) { 
     System.out.println("TEST CALLED WITH VALUE " + value); 
    } 
} 

class Abc { 
    Test obj = new Test();  
    public String firstCallToMethodFromTest() { 
     System.out.println("FIRST CALL TO THE METHOD FROM TEST CLASS"); 
     String result = obj.test("TEST"); 
     return result; 
    } 

    public String secondCallToMethodFromTest() { 
     System.out.println("SECOND CALL TO THE METHOD FROM TEST CLASS"); 
     String result = obj.test(); 
     // There is no such method in test class i.e source code error 
     return result; 
    }  
} 

Phương thức firstCallToMethodFromTest được gọi là phương thức hành động từ hành động Struts của tôi. Eclipse làm thế nào để có thể biên dịch mã cho lớp Abc trong đó có các lỗi cú pháp trong tệp mã nguồn của tôi?

+0

Đây không phải là tệp 'class' cũ từ một phiên bản trước? – MadProgrammer

+0

Không, không! –

+0

Đây là một tính năng của trình biên dịch eclipse, không phải là một lỗi! –

Trả lời

9

Có một lý do. Nó cho phép các ứng dụng có lỗi biên dịch được chạy (sắp xếp!). Trình biên dịch làm gì là tạo ra các phương thức stub cho bất kỳ phương thức nào mà nó không thể biên dịch do các lỗi trong mã nguồn. Nếu ứng dụng gọi một trong các phương thức này, bạn nhận được một ngoại lệ thời gian chạy nói rằng phương thức này có lỗi biên dịch.

IMO, "tính năng" này là chủ yếu là có hại ... và điều này có thể rất khó hiểu đối với người mới sử dụng Eclipse. Tuy nhiên, nó có thể hữu ích cho những người muốn runtests, vv trên các lớp học viết một phần.

IIRC, có hộp kiểm trong hộp thoại Chạy cho phép bạn bật/tắt các ứng dụng đang chạy có lỗi biên dịch. (Tôi luôn luôn vô hiệu hóa nó!)

CẬP NHẬT

Hành vi này là Eclipse cụ thể. Nó được kiểm soát bởi một setting trong cửa sổ "Tùy chọn> Chạy/Gỡ lỗi> Khởi chạy" tùy chọn.

+0

Tính năng này ở đâu. Không bao giờ gặp nó trước đây. Có một lá cờ không? Đối với tôi, nó luôn đưa ra lỗi trong quá trình biên dịch. Đó có phải là tính năng cụ thể của IDE không? –

+0

Vâng, tôi nhớ đã thấy hộp thoại ** Lỗi trong quá trình biên dịch. Vì vậy, bạn vẫn muốn chạy? ** Không bao giờ gặp phải nó kể từ khi tôi chuyển sang Intellij IDEA. –

4

Vì bạn có thể chạy và gỡ lỗi một lớp chỉ được biên dịch một phần, miễn là bạn chỉ di chuyển qua các phần mã được biên dịch mà không có lỗi. Nếu luồng điều khiển của bạn đến nơi có lỗi biên dịch, ngoại lệ sẽ xảy ra khi chạy.

Chỉ cần nhớ nếu bạn đã từng thay đổi mã trực tiếp trong khi gỡ lỗi (thay thế mã nóng): Nhiều IDE thậm chí sẽ cảnh báo bạn rằng trong một số điều kiện bạn đang loại bỏ một phần mã hiện có, nhưng bạn vẫn muốn tiếp tục phiên gỡ lỗi chính xác đó, vì vậy tính năng này thực sự cần thiết.

+0

Bạn có ý nghĩa gì khi biên dịch một phần?Theo như tôi hiểu Interpreter/Debugger được gọi chỉ sau khi trình biên dịch java được thực hiện biên dịch. –

+0

"Biên dịch một phần" có nghĩa là theo không gian, không theo thời gian. Vì vậy, không phải tất cả các phương pháp của bạn đã được biên dịch, nhưng tất nhiên quá trình biên dịch đã hoàn tất. – Bananeweizen

+0

Nhưng làm cách nào tôi có thể chạy mã được biên dịch một phần? – User2228

2

Đây là một tính năng cụ thể của Eclipse được gọi là Biên dịch Java gia tăng.

Nó là một phần của JDT Core. JDT Core là cơ sở hạ tầng Java của Java IDE.

  • An incremental Java compiler: Được triển khai như một trình tạo Eclipse, dựa trên công nghệ phát triển từ VisualAge cho trình biên dịch Java. In particular, it allows to run and debug code which still contains unresolved errors.

và đó là lý do tại sao bạn có thể xem tệp .class của trình biên dịch.

But how can i run a partially compiled code ? 

Bạn có thể chạy miễn là phương pháp có lỗi không phải là một phần của luồng thực thi của bạn. Không ít hơn khi jvm sẽ cố gắng thực thi phương thức có lỗi jvm sẽ đơn giản là tắt chương trình của bạn.

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