2016-12-08 7 views
-1

В следующем примере я могу получить приведенный отпечаток, хотя ожидал исключения Runtime. Так как я использовал блокировку catch, значит ли это, что я тоже могу уловить неконтролируемое исключение? если да, то почему мы не можем просто пропустить, поставив блок catch, где мы подозреваем, что произойдет исключение во время выполнения.Можем ли мы поймать UnsupportedOperationException

Ниже приведен код:

public class CollectionsSample { 

public static void main(String args[]) /*throws UnsupportedOperationException*/{ 

    Set<String> st = new HashSet<String>(); 

    st.add("akkhil"); 
    st.add("gupta"); 
    Collection<String> coll = Collections.unmodifiableCollection(st); 
    try{ 
    coll.add("changed"); 
    }catch(Exception e){ 
     //throw e; 
    } 

    for(String s : st){ 
     System.out.println(" " + s); 
    } 

} 

Это производит вывод как akkhil Гупта, хотя я ожидал его к сквозному runtimeexcption в coll.add («изменился»);

+0

Как вы думаете, 'catch (Exception e)' делает? –

+0

Как вы относитесь к обработке исключений и как вы думаете, что это делается здесь? –

ответ

1

Это значит, что я могу уловить и неконтролируемое исключение?

Абсолютно, вы can. Однако это не значит, что вы должны.

Почему мы не можем просто пропустить, поставив блок catch, где мы подозреваем, что произойдет исключение во время выполнения?

Мы, конечно, может делаем это. Тем не менее, это было бы неправильно, потому что в правильно спроектированных исключениях для среды выполнения указываются ошибки программирования. Эти ошибки должны быть исправлены в коде, а не пойманы. Например, если вы не знаете, является ли коллекция модифицируемой или нет, не изменяйте ее, не создавая копию.