I have to initialize file objects inside the constructor and for handling the exception, is it efficient using throws
or should I go for try
/
Generally it is a bad idea to do heavy lifting in constructors: in many languages, you'll be restricted anyhow in what can be done about exceptions during construction.
You sure can (for example, FileOutputStream
does).
Throwing an exception from the constructor should be done wisely - make sure you clean up after yourself cleanly. Throwing exceptions in a constructor is sometimes done in order to make sure RAII is held.
I suggest try/catch, and throw usefull errors from your catches. This will give users a better sense of what is going wrong with your application. For example you should check for file existence, and properly formated conditions.
Of course you can and throwing an exception is actually what I would do (instead of swallowing it in the constructor). You want to let the caller know that something unexpected happened, you don't want to return a non properly initialized instance. That said, it may be a sign that you are doing too much things in the constructor.
To me, that's not a question of efficiency.
If you can react on the exceptional state and still create a valid or at least useable object, then handle it within the constructor.
Otherwise - in case the object is not usable - throw the exception back at the caller. In that case, he won't get an object and can't continue with an unusable/inconsistant instance which might produce errors in some other corners of the application.
Of course, it's actually used a lot in Java. For example,
public FileInputStream(String name)
throws FileNotFoundException