O documento discute o uso de asserções e exceções no Java, incluindo: 1) testar invariantes com asserções; 2) tratar múltiplos tipos de exceções em um único bloco catch; 3) usar try-catch com recursos que implementam a interface AutoClosable.
Objetivos da Certificação
●Testar invariantes usando Assertions
● Desenvolver código que trata multiplos tipos
de Exceções em apenas um bloco catch
● Desenvolver código que usa blocos try/catch
com recursos (incluindo o uso de classes que
implementam a interface AutoClosable
4.
Usando Assertivas
● Assertivasprovém uma forma de testar suas
suposições durante o desenvolvimento ou
debug
● Assertivas são geralmente habilitadas
durante os testes, mas desabilitadas durante
a implantação.
5.
Usando Assertivas
● Vocêpode usar assert como uma palavra
chave ou identificador, mas não os 2 ao
mesmo tempo. Para compilar códigos
legados que usam assert como identificador
você deve usar a flag -soucr 1.3 junto com o
comando javac
6.
Usando Assertivas
● Porpadrão assertivas são desebilitadas em
tempo de execução. Para habilitá-las, use a
flag -ea ou -enableassertions
● Desabilite seletivamente assertivas usando a
flag -da ou -disableassentions
7.
Usando Assertivas
● Sevocê habilita ou desabilita assertivas
usando a flag sem nenhum argumento, você
está habilitando ou desabilitando assertivas
em geral. Você pode combinar habilitar ou
desabilitar assertivas em apenas algumas
classes ou pacotes e não no restante do
código.
8.
Usando Assertivas
● Vocêpode habilitar ou desabilitar assertivas
classe a classe usando a seguinte sintaxe:
java -ea -da:ClasseDesabilitada ClasseTeste
● Não use assertivas para validar argumentos
em método públicos.
9.
Usando Assertivas
● Nãouse expressões assertivas que causem
efeitos colaterais. Assertivas não tem
garantia de que sempre serão executadas, o
comportamento de seu programa não deve
mudar devido a assertivas estarem
habilitadas ou não.
10.
Usando Assertivas
● Assertivaspodem ser usadas (mesmo em
métodos públicos) para validar uma código
em particular que nunca deverá ser
executado. Você pode usar assert false; para
código que nunca deveria ser alcançado,
assim a AssertionError é lançada
imediatamente se o assert for executado.
11.
Try-multi-catch
● Se 2blocos cath lidam com a exceção da
mesma forma, você pode juntá-los com um
multi-catch usando:
catch (Exceptio1 | Exception2 ex){ };
● Os tipos em multi-catch não podem ser
subclasses uns dos outros.
12.
Try-multi-catch
● Se vocêpegar uma exceção geral como atalho
para exceções subclasse específica e relançar
a exceção, você ainda pode listar as
subclasses específicas na assinatura do
método. O compilador irá tratá-los como se
você os tivesse listado fora do catch.
13.
Try-with-resources
● Um try-with-resourcesautomaticamente
chama o método close() de qualquer recurso
declarado no try. Exemplo:
try (AutoClosable c = new Recurso())
● Um bloco try deve ter pelo menos um bloco
catch ou um finally, a menos que seja um
try-with resources.
14.
Try-with-resources
● O métodoclose() da interface AutoClosable
lança Exception e deve ser idempotente.
● O método close() da interface Closable lança
IOException e não precisa ser idempotente.
● Os recursos são fechados em ordem inversa a
sua criação e antes da execução de um
possível bloco catch ou finally.
15.
Try-with-resources
● Se maisde uma exceção é lançada em um
bloco try-with-resources, é adicionada uma
exeção suprimida.
● O tipo usado em um bloco try-with-resources
deve implementar AutoClosable
* Closable estende de AutoClosable