2016-02-25 3 views
1

Я новичок в Java и стараюсь выучить концепцию исключения. Я видел этот код онлайн, и у него есть блок try-catch внутри тела другого блока try-catch-finally. Мне просто интересно, есть ли способ упростить код, чтобы он мог быть написан более ясным образом?Есть ли способ упростить блок try-catch в другом блоке try-catch-finally?

public static void main(String[] args) { 
    Properties p1 = new Properties(); 
    OutputStream os1 = null; 

    try { 
     os1 = new FileOutputStream("xanadu123.properties"); 

     //set the properties value 
     p1.setProperty("database", "localhost"); 
     p1.setProperty("1", "one"); 
     p1.setProperty("2", "two"); 

     p1.store(os1, "this is the comment"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (os1 != null) { 
      try { 
       os1.close(); 
      } catch (IOException e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

ответ

2

Это действительно очень общий шаблон, поэтому специальный синтаксис был добавлен в Java недавно: try-with-resources

Вы можете сделать

try(OutputStream os1 = new FileOutputStream("xanadu123.properties")){ 
} 
catch (WhatYouHadBefore e){} 
// no more finally, unless you want it for something else 

Это будет finally закрывается автоматически (даже без блок finally), и любые ошибки во время закрытия будут подавлены.

1

Согласно javadocs, в Java SE 7 и более поздних версиях вы можете использовать try-with-resources, и он будет автоматически закрывать ресурсы по завершении.

public static void main(String[] args) { 
    Properties p1 = new Properties(); 
    OutputStream os1 = null; 
    try(os1 = new FileOutputStream("xanadu123.properties")){ //set the properties value 
     p1.setProperty("database", "localhost"); 
     p1.setProperty("1", "one"); 
     p1.setProperty("2", "two"); 
     p1.store(os1, "this is the comment"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
Смежные вопросы