try
quase não tem nenhuma despesa. Em vez de fazer o trabalho de configurar o try
tempo de execução, os metadados do código são estruturados no tempo de compilação, de modo que, quando uma exceção é lançada, ele agora faz uma operação relativamente cara, subindo a pilha e ver se try
existem blocos que capturariam isso. exceção. Do ponto de vista de um leigo, também try
pode ser livre. Na verdade, está lançando a exceção que lhe custa - mas, a menos que você esteja lançando centenas ou milhares de exceções, você ainda não perceberá o custo.
try
tem alguns custos menores associados a ele. Java não pode fazer algumas otimizações no código em um try
bloco que faria de outra forma. Por exemplo, o Java geralmente reorganiza as instruções em um método para torná-lo mais rápido - mas o Java também precisa garantir que, se uma exceção for lançada, a execução do método seja observada como se suas instruções, como escritas no código-fonte, fossem executadas em ordem até alguma linha.
Como em um try
bloco, uma exceção pode ser lançada (em qualquer linha do bloco try! Algumas exceções são lançadas de forma assíncrona, como chamar stop
um Thread (que foi descontinuado) e, além disso, o OutOfMemoryError pode acontecer em quase qualquer lugar), e ainda assim pode ser capturado e o código continua sendo executado posteriormente no mesmo método, é mais difícil pensar em otimizações que podem ser feitas, portanto, é menos provável que isso aconteça. (Alguém precisaria programar o compilador para executá-los, argumentar e garantir a correção, etc. Seria uma grande dor para algo que deveria ser 'excepcional'). Mas, novamente, na prática, você não notará coisas assim.