Java проверил исключение в ошибке компиляции предложения catch - PullRequest
0 голосов
/ 02 мая 2010

Я ожидал ошибки компиляции в следующей программе из-за оператора throw в блоке catch, поскольку IOException является проверенным исключением и не перехватывается другим блоком try в блоке catch. Но я получаю "Ура!" распечатаны. Любое объяснение будет высоко ценится.

Согласно JLS 11.2.3, http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html

Это ошибка времени компиляции, если метод или тело конструктора может бросить некоторые Тип исключения E, когда оба следующее удержание:

* E is a checked exception type
* E is not a subtype of some type declared in the throws clause of the

метод или конструктор.

import java.io.*;
public class Test{ 
    public static void main(String args[])
    {


        System.out.println(method()); 
    } 
    public static int method()
    {


        try{ 
            throw new Exception(); 
        }
        catch(Exception e){

            throw new IOException(); //No compile time error
        } 
        finally{

                    System.out.println("Hurray!");

        } 
    }
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2010

Может быть, я что-то упускаю, но где в вашей программе пункт throws ?

Исходный код, как он выглядит сейчас для method (), не содержит предложения throws в заголовке метода, только операторы throw. Ваша цитата из JLS явно ссылается на предложение throws.

0 голосов
/ 02 мая 2010

Это дает ошибку компиляции с использованием встроенного компилятора Java Eclipse.

То же самое для компилятора JDK 6.0.

Какую версию Java вы используете, которая не дает ошибки компиляции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...