Skip to main content

Avoid empty catch blocks

Most contend that it's usually a very bad idea to have an empty catch block.

When the exception occurs, nothing happens, and the program fails for unknown reasons.

Example


import java.io.*;
import java.util.*;

/** How NOT to implement a catch. */
public final class BadCatch {

public static void main( String... arguments ) {
List quarks = Arrays.asList(
"up", "down", "charm", "strange", "top", "bottom"
);

//serialize the List
try {
ObjectOutputStream output = new ObjectOutputStream(
new FileOutputStream("quarks.ser")
);
try{
output.writeObject(quarks);
}
finally{
//flush and close all streams
output.close();
}
}
catch(IOException exception){

}
}
}

In general, when a exception occurs, it can be thrown up to the caller, or it can be caught in a catch block. When catching an exception, some options include :
  • inform the user (strongly recommended)
  • log the problem, using the JDK logging services, or similar tool
  • send an email describing the problem to an administrator

Deciding what exactly to do seems to depend on the nature of the problem. If there is an actual bug in the program - a defect that needs to be fixed - then one might do all three of the above. In this case, the end user should likely be shown a generic "Sorry, we goofed" message, not a stack trace. It is usually considered bad form to display a stack trace to a non-technical end user, or if exposing a stack trace may be a security risk.

If the exception does not represent a bug, then different behavior may be appropriate. For example, if a problem with user input is detected and an exception is thrown as a result, then merely informing the user of the problem might be all that is required.

Comments

Popular posts from this blog

Initializing fields to 0-false-null is redundant

One of the most fundamental aspects of a programming language is how it initializes data. For Java, this is defined explicitly in the language . For fields and array components , when items are created, they are automatically set to the following default values by the system: numbers: 0 or 0.0 booleans: false object references: null This means that explicitly setting fields to 0, false, or null (as the case may be) is unnecessary and redundant. Since this language feature was included in order to, in part, reduce repetitive coding, it's a good idea to take full advantage of it. Insisting that fields should be explicitly initialized to 0, false, or null is an idiom which is likely inappropriate to the Java programming language. _______________________________________________

One good Question about Garbage Collection

Class CardBoard {        Short story = 200;        CardBoard go(CardBoard cb){             cb = null;             return cb;        }        public static void main(String args[]){             CardBoard c1 = new CardBoard();             CardBoard c2 = new CardBoard();             CardBoard c3 = c1.go(c2);             c1 = null; // (1)            // some code        } } After executing line (1) how many objects are eligible for garbage collection ? First we can go through the code, - We are creating two objects and they are referred by reference variables c1 and c2.- During the execution of thisline CardBoard c3 = c1.go(c2); no new objects are created in the heap. - The...

Explain the Class Loader Mechanism of JVM?. How to write a custom Class Loader Class?

Every java program has at least three class loaders. - The bootstrap class loader - The extension class loader. - The system class loader. The bootstrap class loader loads the system classes from the JAR Fle rt.jar(part of JRE System Library) . It is an integral part of the virtual machine and is usually implemented in C. There is no Class loader object corresponding to the bootstrap class loader. For example. String.class.getClassLoade r() will return null since String class is loader by bootstrap loader. The extension class loaders loads "standard extensions "from the jre/lib/ext directory. The system class loader loads the application classes. It locates the classes in the directories and JAR/ZIP files on the class path. The System class loader also called application class loader. In Sun's java implementation , the extension adn system class loaders are implemented in java. Both are instances of URLClass loader. You can just go through the source code of URLCla...