2012-05-16 44 views

Trả lời

6

Một chút của google có thể?

"Điều chính bạn nên ghi nhớ là câu lệnh if-else nên được sử dụng để kiểm soát luồng chương trình và từ khóa khẳng định chỉ nên được sử dụng cho mục đích thử nghiệm. Bạn không bao giờ nên sử dụng xác nhận để thực sự thực hiện bất kỳ thao tác nào cần thiết cho ứng dụng của bạn hoạt động tốt Theo tài liệu Java chính thức của Sun:. "Mỗi khẳng định chứa một biểu thức boolean mà bạn tin rằng sẽ đúng khi khẳng định được thực thi." "

Read more: http://wiki.answers.com/Q/What_is_the_difference_between_assert_keyword_and_if_keyword_in_java#ixzz1v2GGfAhq

+0

xem mã bên dưới – jcy

+0

'int * ptr = malloc (sizeof (int) * 10);' 'khẳng định (ptr);' '...' ' – jcy

+0

Đặt mã của bạn vào thẻ mã để tôi có thể thấy nó tốt hơn. Nó phụ thuộc nếu bạn muốn làm bài kiểm tra. Nếu bạn không muốn tách các thử nghiệm khỏi mã thực của mình, hãy sử dụng lệnh thoát khác. Các xác nhận chỉ dành cho mục đích thử nghiệm ^^ – Depado

3

bạn có thể, khẳng định được thiết kế đặc biệt để khẳng định một số phần của mã,

khẳng định sẽ ném AssertionError nếu nó không thành công để khẳng định


Ngoài Xem

2

if-else là để kiểm soát luồng của chương trình của bạn. khẳng định không được sử dụng cho việc này! Xác nhận chỉ dành cho việc có "các điểm kiểm tra" trong mã của bạn để kiểm tra các điều kiện "phải luôn" khớp.

Có thể bật hoặc tắt các cảnh báo khi chạy chương trình để bạn có thể bật xác nhận trên môi trường tích hợp máy/phát triển và tắt chúng trong phiên bản đã phát hành.

2

Từ khóa assert sẽ chỉ kích hoạt một ngoại lệ khi bạn bật xác nhận với -ea trên dòng lệnh. Nếu/else sẽ luôn luôn thực hiện. Trên hết, từ khóa khẳng định cho phép viết mã tiết ngắn hơn. Hãy so sánh:

assert parameter != null; 

tới:

if(parameter != null) 
{ 

} 
else 
{ 

} 
+0

Chắc chắn khẳng định cho phép bạn viết mã tiết ngắn hơn, nhưng bạn vẫn có thể viết 'if (prm == null) ném ngoại lệ mới (...);'. Các xác nhận chỉ không được thực hiện cho mục đích đó, chúng được thực hiện để khi đưa chương trình của bạn vào sản xuất, không có thử nghiệm vô ích nào được thực hiện (bởi vì xác nhận của bạn luôn được cho là hợp lệ). Do đó, chúng được lấy ra khỏi gói sản xuất. – belka

0

Khẳng định được bỏ qua trừ khi param-ea được truyền:

java-ea MyJar.jar

Bằng cách đó, bạn có thể sử dụng chúng khi bạn đang thử nghiệm ứng dụng của mình, nhưng bỏ qua chúng vào những lúc khác.

3

Tôi chỉ có thể bỏ qua sự khẳng định

class A{ 

public static void main(String[] args) { 
    assert false; 
    System.out.println("hi"); 
} 
} 

Mã này sẽ in hi theo mặc định

$ java -cp . A 
hi 
$ java -ea -cp . A 
Exception in thread "main" java.lang.AssertionError 
    at A.main(A.java:6) 
1

tôi có thể chỉ cần sử dụng if() {} thoát khác thay vì khẳng định?

Có bạn có thể, nhưng ...

  • bạn sẽ không thể để biến những thử nghiệm trừ khi bạn đã thực hiện điều kiện phụ thuộc vào một lá cờ thêm (mà làm cho nó phức tạp hơn, vv),

  • bạn sẽ không có cơ hội để thực hiện gọn gàng lên trong bất kỳ kèm theo finally khối,

  • nó sẽ phức tạp hơn để ghi lại những nguyên nhân của vấn đề hơn nếu một số AssertionError (hoặc bất kỳ ngoại lệ nào khác) bị ném và

  • nếu mã của bạn cần được sử dụng lại (dưới dạng) trong một ứng dụng khác, cuộc gọi của bạn tới exit có thể có vấn đề.

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