2009-07-17 6 views
3

Что должен сделать следующий код java?java assert дает странные результаты

public class foo{ 
    public static void main(String[] args){ 
     boolean mybool=false; 
     assert (mybool==true); 
    } 
} 

Должно ли это выдать ошибку утверждения? И если нет, то почему? (Я не получаю никаких ошибок!)

ответ

0

Это должно быть метание AssertionErors.

Вам нужно включить утверждения, если вы используете Eclipse. По умолчанию они отключены.

Для этого добавьте -ea в аргументы JVM.

+1

Добавить -ea во время выполнения VM –

+0

Бах .... принят, прежде чем кто-нибудь получит шанс ответить. – skaffman

+0

2 Человек получил шанс ответить ... – jjnguy

4

При запуске программы, вы должны включить утверждения в Java VM, добавляя «-EA» в командной строке:

java -ea -jar myprogram.jar 
+1

Спасибо, ребята! Получил его работу как надо! приветствия для супер быстрых ответов! – 2009-07-17 15:36:27

1

Java-языка утверждения странно. Вы должны включить их при запуске командной строки, и мне это не нравится.

По этой причине я стараюсь использовать сторонние библиотеки для выполнения своих утверждений. Apache Commons Lang (через класс Validator), Spring (через класс Assert) или даже JUnit4 (через класс Assert) предоставляют эту функцию, и она будет работать независимо от настроек VM. Когда вы используете статический импорт Java5, они так же просты в использовании, как и утверждение java, плюс они более гибкие, а также позволяют указывать сообщение об ошибке в исключении.

+0

По умолчанию это раздражает, но есть для обратной совместимости; Для других вещей: вы также можете указать сообщение с утверждениями Java, и они гарантируют, что afaik будет удален из байтового кода, когда они не будут использоваться. Это означает, что вам не нужно так беспокоиться о производительности. Я сомневаюсь, что это будет возможно в сторонней библиотеке. –

+0

Правда, но оценка производительности для проверки этих вещей совершенно незначителен на современной виртуальной машине. – skaffman

+0

Вы можете добавить утверждения о тяжелом весе в соответствие с утверждениями на языке и знать, что они будут удалены в производственном развертывании. Утверждения не удаляются из байт-кода, VM просто компилирует их во время выполнения в зависимости от флагов. –

0

Это делает информацию, если разрешения разрешены в программе.

Если утверждения отключены (это значение по умолчанию), оператор утверждения не будет выполняться, а mybool будет иметь значение false.

Если утверждения разрешены (аргумент jvm -ea), утверждение будет выполнено, а по боковому эффекту mybool будет установлено значение true.

Вы можете использовать это для обеспечения включения или отключения утверждений. Например, у меня есть Тест в моем TestSuites, который терпит неудачу, если утверждения не включены, чтобы обеспечить, чтобы утверждения всегда включались при запуске тестов.

Смежные вопросы