Skip to main content

New/strange Java "try()” syntax?


While messing around with the custom formatting options in Eclipse, in one of the sample pieces of code, I saw code as follows:




/**
* 'try-with-resources'
*/
class Example {
void foo() {
try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) {

}
}
}



I've never seen try used like this and I've been coding in Java for 9 years! Does any one know why you would do this? What is a possible use-case / benefit of doing this?



An other pieces of code I saw, I thought was a very useful shorthand so I'm sharing it here as well, it's pretty obvious what it does:




/**
* 'multi-catch'
*/
class Example {
void foo() {
try {
} catch (IllegalArgumentException | NullPointerException | ClassCastException e) {
e.printStackTrace();
}
}
}


Source: Tips4allCCNA FINAL EXAM

Comments

  1. It was added in Java 7. It's called the try-with-resources statement.

    /edit

    Might as well throw this in here too. You can use the try-with-resources statement to manage Locks if you use a wrapper class like this:

    public class CloseableLock implements Closeable {
    private final Lock lock;

    private CloseableLock(Lock l) {
    lock = l;
    }

    public void close() {
    lock.unlock();
    }

    public static CloseableLock lock(Lock l) {
    l.lock();
    return new CloseableLock(l);
    }
    }

    try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock
    // do something
    } // release the lock


    However, since you have to declare a variable for every resource, the advantage of this is debatable.

    ReplyDelete
  2. This is Java 7's new try-with-resources statement: http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

    ReplyDelete
  3. Those are changes introduced in JDK7.

    First statement is a try-with-resources. I don't know exactly why they exist but exceptions are often caused by inputstreams etc, I guess it just improves readability. Edit: thanks to the other answerers, I read the javadoc and I now know that it will close all i/o streams that implement AutoCloseable, omitting the need for a finally block in a lot of situations

    Second is a multi-catch, which is really handy when you have different exceptions that you handle in exactly the same way.

    ReplyDelete
  4. It's called try-with-resource. It's a way so as to not have to clean after yourself as the language will do it for you.

    ReplyDelete
  5. That is called with a try with resources. in a try with resources, any kind of closable stream declared in the resources section will be closed after the try statement is done. So it pretty much is a

    try{
    InputStream is;
    //Stuff
    }finally{
    is.close()
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.