tente com recursos introduza bytecode inacessível
É possível que o javac gere bytecode inacessível para o procedimento a seguir?
public void ex06(String name) throws Exception {
File config = new File(name);
try (FileOutputStream fos = new FileOutputStream(config);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(
fos , "rw"))) {
bar();
}
}
Quando olho para a tabela de exceção do bytecode (javap -v), existem as seguintes entradas que parecem estranhas:
43 48 86 Class java/lang/Throwable
43 48 95 any
e
21 135 170 Class java/lang/Throwable
21 135 179 any
Agora, o problema é que algum código é acessível apenas se as exceções do tipo "any", em vez de Throwable, forem detectadas. Existe alguma situação em que isso possa realmente acontecer?
====== EDIT ====== Obrigado pelas respostas até agora. Deixe-me apresentar outra evidência para mostrar que realmente não entendo o tratamento de exceções: Considere o seguinte procedimento
Object constraintsLock;
private String[] constraints;
private String constraint;
public void fp01() {
// Add this constraint to the set for our web application
synchronized (constraintsLock) {
String results[] =
new String[constraints.length + 1];
for (int i = 0; i < constraints.length; i++)
results[i] = constraints[i];
results[constraints.length] = constraint;
constraints = results;
}
}
Se você procurar no bytecode, terá:
65: astore 4
67: aload_1
68: monitorexit
69: aload 4
e a tabela de exceção
Exception table:
from to target type
7 62 65 any
65 69 65 any
Isso significa que esse cara pode fazer um loop para sempre?