Atualizado: 26/10/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Assert em Java

O mecanismo assert (asserção) é um padrão comum de verificação de condições internas de um programa, conhecido como guard pattern. Ele permite testar, durante a execução, se determinadas condições lógicas estão sendo respeitadas. Para isso, o Java oferece a palavra-chave assert.

O operador assert é usado para detectar erros em situações em que não faz sentido continuar a execução do programa. Normalmente, é empregado durante o desenvolvimento e a fase de testes, para identificar inconsistências ou falhas internas.

Formas do operador assert

O operador assert pode ser escrito de duas formas:

assert condição;
assert condição : expressão;

Em ambas, o Java verifica se a condição é verdadeira. Se for falsa, a JVM lança uma exceção do tipo AssertionError.

Na segunda forma, após o símbolo de dois pontos, é possível indicar uma expressão que será passada ao construtor de AssertionError. Esse valor é incluído na mensagem de erro exibida.

Por exemplo, a primeira forma:

assert n > 0;

Aqui o operador assert verifica se a variável n é maior que 0. Se n for 0 ou menor, o sistema lançará um erro AssertionError.

A segunda forma:

assert n > 0 : n;

Neste caso, o valor de n é incluído na mensagem do erro, facilitando a depuração.


Ativando o suporte a assert

Por padrão, o operador assert não afeta a execução do programa. O erro AssertionError só é gerado se o suporte a asserções for explicitamente ativado no momento da execução.

Para habilitar as asserções, é necessário usar a opção -enableassertions ou sua forma abreviada -ea ao executar o programa:

java -enableassertions Program

Também é possível habilitar asserções apenas para classes ou pacotes específicos:

java -ea:SomeClass -ea:com.mycompany.somelib... Program
  • -ea:SomeClass ativa asserções apenas na classe SomeClass.
  • -ea:com.mycompany.somelib... ativa para todo o pacote com.mycompany.somelib.

Se o programa estiver no pacote padrão (sem nome), o comando é:

java -ea:... Program

É possível também desativar asserções em classes ou pacotes específicos, mesmo que estejam ativas globalmente, com as opções -disableassertions ou -da:

java -ea:... -da:SomeClass Program

Exemplo de uso de assert

O exemplo a seguir mostra o uso do operador assert dentro de um método que calcula o fatorial de um número:

class Program {

    public static void main(String[] args) {

        int f1 = factorial(4);
        System.out.println("f1: " + f1);

        int f2 = factorial(-4);
        System.out.println("f2: " + f2);
    }

    static int factorial(int n) {

        assert n > 0;

        int result = 1;
        while (n > 1) result *= n--;
        return result;
    }
}

O método factorial() calcula o fatorial do número recebido como parâmetro. Entretanto, o fatorial só é definido para números positivos, portanto o código inclui uma asserção assert n > 0 para verificar essa condição.

No método main(), a função é chamada duas vezes: uma com um valor válido e outra com um valor inválido.

Compilando e executando com as asserções habilitadas:

javac Program.java && java -enableassertions Program

Saída esperada:

f1: 24
Exception in thread "main" java.lang.AssertionError
	at Program.factorial(Program.java:14)
	at Program.main(Program.java:8)

O primeiro cálculo (factorial(4)) ocorre normalmente. No segundo (factorial(-4)), a asserção falha e o programa gera um AssertionError na linha correspondente.

Durante o teste ou desenvolvimento, isso permite identificar rapidamente condições incorretas ou casos não tratados, que podem ser ajustados posteriormente com verificações explícitas.


Forma alternativa do assert

Se o método factorial() for alterado para incluir uma mensagem personalizada:

static int factorial(int n) {

    assert n > 0 : n;

    int result = 1;
    while (n > 1) result *= n--;
    return result;
}

Nesse caso, o valor de n é passado ao AssertionError e exibido na mensagem de erro:

f1: 24
Exception in thread "main" java.lang.AssertionError: -4
	at Program.factorial(Program.java:14)
	at Program.main(Program.java:8)

Isso facilita a identificação da causa do problema. Também é possível especificar uma mensagem mais descritiva:

assert n > 0 : "O parâmetro é menor que 1";

Resumo

  • O operador assert verifica condições durante a execução e lança AssertionError quando uma condição é falsa.
  • Pode ser usado nas formas assert condição; e assert condição : expressão;.
  • Por padrão, as asserções estão desativadas e precisam ser habilitadas com -enableassertions ou -ea.
  • É possível ativar ou desativar asserções seletivamente por classe ou pacote.
  • O uso de assert ajuda a detectar erros lógicos durante o desenvolvimento e os testes.