2012-05-16 13 views

Odpowiedz

6

Może trochę google?

"Najważniejszą rzeczą, o której powinieneś pamiętać jest to, że instrukcja if-else powinna być używana do kontroli przepływu programu, a słowo kluczowe assert powinno być używane tylko do celów testowych. Nigdy nie powinieneś używać dowodów, aby faktycznie wykonać dowolną operację dla aplikacja działała prawidłowo Według oficjalnej dokumentacji Java firmy Sun:. „Każde twierdzenie zawiera logiczną wyrażenia, które Twoim zdaniem będzie prawdziwe, gdy twierdzenie wykonuje.” "

więcej: http://wiki.answers.com/Q/What_is_the_difference_between_assert_keyword_and_if_keyword_in_java#ixzz1v2GGfAhq

+0

patrz kod poniżej: – jcy

+0

'int * ptr = malloc (sizeof (int) * 10);' 'assert (ptr);' "..." ' – jcy

+0

Umieść swój kod w tagu kodu, dzięki czemu mogę go zobaczyć lepiej. To zależy, czy chcesz wykonać test. Jeśli nie chcesz oddzielać testów od rzeczywistego kodu, użyj wyjścia if-else. Asercje są przeznaczone wyłącznie do testowania. ^^ – Depado

3

można, assert jest specjalnie zaprojektowany, aby twierdzić jakąś część kodu

assert rzuci AssertionError jeśli nie dochodzić


Zobacz także

2

if-else służy do sterowania przepływem programu. nie wolno używać tego dowodu! Asserts są po prostu dla posiadania "punktów kontrolnych" w twoim kodzie, by sprawdzić warunki, które "powinny zawsze" pasować.

Potwierdzenia można włączać i wyłączać podczas uruchamiania programu, dzięki czemu można włączyć potwierdzenia w komputerze programisty/środowisku integracji i wyłączyć je w wydanej wersji.

2

Słowo kluczowe wymuszenia wywoła wyjątek tylko po włączeniu asercji z -ea na wiersz poleceń. Polecenie if/else zawsze będzie wykonywane. Ponadto słowo kluczowe assert pozwala pisać mniej szczegółowy kod. Porównaj:

assert parameter != null; 

do:

if(parameter != null) 
{ 

} 
else 
{ 

} 
+0

Oczywiście assert pozwala pisać mniej obszerny kod, ale wciąż możesz napisać 'if (prm == null) throw new Exception (...);'. Twierdzenia nie są po prostu wykonane w tym celu, są one wykonane tak, że podczas wprowadzania programu do produkcji nie są wykonywane niepotrzebne testy (ponieważ twoje twierdzenia zawsze mają być ważne). W związku z tym są one usuwane z pakietu produkcyjnego. – belka

0

twierdzi, są ignorowane, chyba że param -EA przepuszcza:

java -EA myjar.jar

W ten sposób można z nich korzystać podczas testowania aplikacji, ale ignoruj ​​je w innym czasie.

3

mogę po prostu zignorować twierdzenie

class A{ 

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

Ten kod wypisze hi domyślnie

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

mogę tylko używać, jeśli() {} else exit zamiast dochodzić?

Tak, może, ale ...

  • nie będzie w stanie włączyć testu, chyba że dokonane stan zależą dodatkową flagi (co sprawia, że ​​jest bardziej skomplikowana, etc),

  • nie dostanie szansę wykonania schludny-up w dowolnym załączając finally bloku,

  • byłoby bardziej skomplikowane, aby zalogować przyczynę problemu niż jeśli został zgłoszony AssertionError (lub jakikolwiek inny wyjątek) i jeśli Twój kod musiał zostać ponownie użyty (tak jak jest) w innej aplikacji, twoje połączenia z numerem exit mogą być problematyczne.