2012-02-27 57 views
29

Trong một slide prof của tôi trên ploymorphism, tôi thấy đoạn mã này với một vài nhận xét:Sự khác biệt giữa lỗi thời gian chạy và lỗi trình biên dịch là gì?

discountVariable =    //will produce 
    (DiscountSale)saleVariable;//run-time error 
discountVariable = saleVariable //will produce 
           //compiler error 

Như bạn thấy, nó nói trong báo cáo đúc đầu tiên mà nó sẽ tạo ra run- thời gian lỗi và trong một khác nó nói rằng nó sẽ sản xuất lỗi trình biên dịch.

Điều gì tạo ra những lỗi này? và chúng khác nhau như thế nào?

+28

Thôi nào các bạn. Anh chàng đang cố gắng tìm hiểu, downvotes là không cần thiết. – JohnFx

+4

Không quan trọng nếu nó đã giải quyết ví dụ của tôi hay không, những gì thực sự quan trọng là tôi đã nhận được câu trả lời rõ ràng. Anh chàng đó giải thích nó theo một cách đơn giản có thể dễ hiểu với một lập trình viên ngây thơ như tôi. – AbdullahR

+0

Bạn đã đọc http://stackoverflow.com/faq chưa? –

Trả lời

33

Một chạy thời gian lỗi sẽ chỉ xảy ra khi các mã được thực sự chạy. Đây là những khó khăn nhất - và dẫn đến các lỗi và lỗi chương trình trong mã của bạn mà khó có thể theo dõi.

Một ví dụ có thể cố gắng để chuyển đổi một chuỗi: "hello" vào một số nguyên:

string helloWorld = "hello"; 
int willThrowRuntimeError = Convert.ToInt32(helloWorld); 

Trình biên dịch có thể không coi đây là một vấn đề nhưng khi chạy một lỗi sẽ được ném ra.

Lỗi trình biên dịch là do thiếu chính xác trong mã, trong đó trình biên dịch đưa ra lỗi để cảnh báo bạn về nội dung không biên dịch và do đó không thể chạy được.

Một ví dụ về một lỗi biên dịch sẽ là:

int = "this is not an int"; 

Hy vọng rằng sẽ giúp.

0

Nếu bạn muốn sử dụng Google, bạn sẽ có được điều này:

Compile time error là bất kỳ loại lỗi mà ngăn chặn một chương trình java biên dịch như một lỗi cú pháp, không tìm thấy một lớp học, một tập tin xấu tên cho lớp được xác định, có thể mất độ chính xác khi bạn đang trộn các loại dữ liệu java khác nhau, v.v.

Lỗi thời gian chạy nghĩa là lỗi xảy ra trong khi chương trình đang chạy. Để đối phó với loại lỗi này, java xác định Ngoại lệ. Ngoại lệ là các đối tượng đại diện cho một điều kiện bất thường trong luồng của chương trình. Nó có thể được kiểm tra hoặc bỏ chọn.

http://wiki.answers.com/Q/Difference_between_run_time_error_and_compile_time_error_in_java

+2

-1 Anh ấy không sử dụng Google - anh ấy hỏi ở đây. Ít nhất buộc văn bản dán của bạn vào ví dụ của mình. –

+0

Bây giờ, sử dụng các liên kết Google này ... haha ​​ –

11

Một lỗi runtime xảy ra trong các hoạt động của chương trình. Lỗi trình biên dịch xảy ra khi bạn cố biên dịch mã.

Nếu bạn không thể biên dịch mã của mình, đó là lỗi trình biên dịch.

Nếu bạn biên dịch và chạy mã của bạn, nhưng sau đó nó không thành công trong khi thực thi, đó là thời gian chạy.

+1

Trong ví dụ của bạn, 'discountVariable' là loại khai báo' DiscountSale' và 'saleVariable' thuộc loại khác. Khi bạn cố gắng gán giá trị của cái này cho cái kia với dòng 'discountVariable = saleVariable', điều này gây ra lỗi trình biên dịch. Nếu bạn đặt các diễn viên tại chỗ '(DiscountSale)', điều này nói với trình biên dịch rằng nó là okay. Sau đó nó phá vỡ khi bạn chạy nó vì 'saleVariable' không thực sự thuộc loại' DiscountSale'. –

+1

+1 vì đây là câu trả lời đơn giản nhất cho câu hỏi: Sự khác biệt giữa lỗi thời gian chạy và lỗi trình biên dịch là gì? Tôi sẽ hạnh phúc hơn nhiều nếu câu trả lời thực sự giải quyết ví dụ cụ thể được cung cấp bởi OP, tuy nhiên. –

1

Bởi vì trình biên dịch không biết loại đối tượng "saleVariable" cho đến khi giá trị đó thực sự được đặt khi chương trình đang chạy.

Bạn đang buộc phải bán bất kỳ thứ gìVào loại DiscountSale, điều này được coi là không an toàn và không thể được đánh giá cho đến khi chạy.

+0

Không phải là +1 bởi vì "trình biên dịch không biết loại đối tượng saleVariable". Đo không phải sự thật. Trình biên dịch biết loại - nó chỉ không tương thích với DiscountSale. –

+0

Quyền của bạn, tôi chỉ đang nghĩ về nó trong bối cảnh nếu anh ta đang làm một cái gì đó như e.DataItem – bigamil

2

Lỗi thời gian biên dịch có nghĩa là Trình biên dịch biết rằng discountVariable = saleVariable phải kết thúc bằng dấu chấm phẩy như bên dưới discountVariable = saleVariable; để nó sẽ phát ra lỗi khi bạn biên dịch mã.

Lỗi thời gian chạy có nghĩa là lỗi sẽ xảy ra trong thời gian chạy, bởi vì ngay cả khi bạn đang truyền chương trình giảm giáĐược giảm giáVariable, diễn viên không thể thực hiện vì chúng khác nhau về loại.

5

Lỗi thời gian biên dịch đề cập đến cú pháp và ngữ nghĩa. Ví dụ: nếu bạn thực hiện các hoạt động liên quan đến các loại khác nhau. Ví dụ: thêm một chuỗi với một int, hoặc chia một chuỗi bởi một thực tế. (đọc đoạn cuối cùng thou !!!)

Lỗi thời gian chạy là những lỗi được phát hiện khi chương trình thực thi. Ví dụ, chia cho số không. Trình biên dịch không thể biết nếu hoạt động x/a-b sẽ dẫn đến phân chia bằng không cho đến khi thực hiện.

Đây là giải thích rộng. Có nhiều trình biên dịch thông minh, và, cũng có thể thực hiện việc đúc nội bộ giữa các kiểu khác nhau dẫn đến các hoạt động có ý nghĩa.Có thể biên dịch trước mã và xem một số lỗi thời gian chạy chạy ngay cả khi mã không được thực hiện.

Tham khảo liên kết này quá: Runtime vs Compile time

1

nghĩ rằng bạn đã có được cái nhìn chung về sự khác biệt là gì. Cụ thể trong mã bạn đã hiển thị trong OP,

  • Trong câu lệnh thứ hai, trình biên dịch so sánh các loại trên LHS và RHS và không tìm thấy nội dung có thể xảy ra để lỗi này xảy ra.
  • tuyên bố đầu tiên được trình biên dịch nhìn thấy như nhau, nhưng ở đây lập trình viên mô tả rõ ràng loại, tốt như trình biên dịch biết tôi đang làm gì và dĩ nhiên trình biên dịch tin tưởng bạn và cung cấp cho bạn không có lỗi.
+0

+1 muộn cho bữa tiệc, nhưng điều này là hữu ích –

0

Lỗi trình biên dịch là do không chính xác trong mã, trong đó trình biên dịch gửi lỗi cảnh báo cho bạn về nội dung không biên dịch và do đó không thể chạy.

Ex: - MethodOverloading

class OverloadingTest { 
    void sum(int a, long b) { 
     System.out.println("a method invoked"); 
    } 

    void sum(long a, int b) { 
     System.out.println("b method invoked"); 
    } 

    public static void main(String args[]) { 
     OverloadingTest obj = new OverloadingTest(); 
     obj.sum(200, 200);// now ambiguity 
    } 
} 

Run Time lỗi là những người được phát hiện khi chương trình thực thi. Ví dụ, chia cho số không. Trình biên dịch không thể biết nếu hoạt động x/ab sẽ dẫn đến phân chia bằng không cho đến khi thực hiện

0

Biên dịch/Biên dịch/Cú pháp/Lỗi ngữ nghĩa: Lỗi biên dịch hoặc biên dịch do lỗi nhập sai, nếu chúng tôi không tuân theo cú pháp và ngữ nghĩa thích hợp của bất kỳ ngôn ngữ lập trình nào sau đó biên dịch lỗi thời gian được trình biên dịch đưa ra. Chúng sẽ không cho phép chương trình của bạn thực hiện một dòng duy nhất cho đến khi bạn loại bỏ tất cả các lỗi cú pháp hoặc cho đến khi bạn gỡ lỗi các lỗi biên dịch thời gian.
Ví dụ: Thiếu dấu chấm phẩy trong C hoặc nhập sai int làm Int.

Lỗi thời gian chạy: Lỗi thời gian chạy là lỗi được tạo khi chương trình đang ở trạng thái hoạt động. Các loại lỗi này sẽ khiến chương trình của bạn hoạt động bất ngờ hoặc thậm chí có thể giết chết chương trình của bạn. Chúng thường được gọi là Ngoại lệ.
Ví dụ: Giả sử bạn đang đọc tệp không tồn tại, sẽ dẫn đến lỗi thời gian chạy.

Đọc thêm về tất cả programming errors đây

2

Compile lỗi thời gian là lỗi cú pháp và ngữ nghĩa.

Lỗi thời gian chạy là lỗi logic chủ yếu. Do điều gì đó mà người lập trình đã bỏ qua, chương trình gặp sự cố, ví dụ: chia cho 0, truy cập vào biến mà không khởi tạo biến đầu tiên, v.v.

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