Возможно ли, что javac генерирует недостижимый байт-код для следующей процедуры?
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();
}
}
Когда я смотрю в таблицу исключений байт-кода (javap -v), появляются следующие записи, которые выглядят странно:
43 48 86 Class java/lang/Throwable
43 48 95 any
и
21 135 170 Class java/lang/Throwable
21 135 179 any
Теперь проблема в том, что некоторый код доступен только в случае обнаружения исключений типа "any", а не Throwable. Есть ли ситуация, когда это может произойти?
====== EDIT ====== Спасибо за ответы. Позвольте мне дать еще одну улику, чтобы показать, что я действительно не понимаю обработку исключений: Рассмотрим следующую процедуру.
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;
}
}
Если вы посмотрите в байт-коде, у вас есть:
65: astore 4
67: aload_1
68: monitorexit
69: aload 4
и таблица исключений
Exception table:
from to target type
7 62 65 any
65 69 65 any
Означает ли это, что этот парень может зацикливаться навсегда?