Variable might not have been initialized

In Java, class instance variables and static variables have default values: null for all object types, false for boolean primitive and 0 for numeric primitives. But local variables inside a method have no defaults.

Consider the following code snippet:

public static void main(String[] args){
java.util.Date d;
It will fail to compile with this error:
variable d might not have been initialized
1 error
However, the following will compile and run successfully:
public static void main(String[] args){
java.util.Date d;
Because the rule is that all local variables must be initialized before they are first read. So it's perfectly OK to first declare a local variable without initializing it, initialize it later, and then use it:
public static void main(String[] args){
java.util.Date d;
//do more work
d = new java.util.Date();
It may be an old habit from languages like C, where you need to declare all local variables at the beginning of a code block. But in Java with this rule in place, it's best to defer declaring local variables till needed.


Anonymous said...

well this rule is most frustrating when trying to close a resource in a finally block. if I instantiate the resource inside a try, but try to close it within the finally, I get this error. if I move the instantiation outside the try, I get another error stating that a it must be within a try.

very frustrating.

Anonymous said...

Thanks for posting this! I searched on google and this page was the first result, very good to know!

Singularity said...

If I am declaring PI, how about that,
Do I have to specifically mention the value of PI(If so then wt the hell is this error) which I am getting for PI

Anonymous said...

Sometimes when you use for, while, etc. to initialize you need to use for example:
variable1 = null;
That message will dissapear.

Anonymous said...

Thanks! About 1 hour trying to find out... and in one minute you saved me.

Wheez said...

Thank you, that was very helpful! :D

Wheez said...
This comment has been removed by the author.
Anonymous said...


Bill said...

This is actually a huge feature of Java, and you should absolutely get out of the habit of typing "=0" or "=null" when declaring variables.

This uses branch code checking to ensure that every possible path that could get to the use of a given variable has, at some point, initialized that variable.

If you go around setting them to 0, you will eliminate this extremely useful warning. If you are getting the warning, look at it closely to figure out if you are missing something. Sometimes you still have to initialize it, but now I never do until I'm sure that's the best way to code it.

Aspticka said...

I wrote the following code to set a variable to an unused, random value:

// Find an empty place in tmp
boolean foundEmptyPlace = false;
while (!foundEmptyPlace) {
randomNumber = randomGenerator.nextInt(tmp.length);
if (tmp[randomNumber] == null) {
foundEmptyPlace = true;
// do something with tmp[randomNumber]

Here I get the "might not have been initialized" error, though reasonably it must have been initialized within the while loop. My solution was to initialize randomNumber (= 0) before the loop. But, as Bill points out, this seems to be an unpreferrable habit. Can I avoid the error in a more clean and correct way?

Kshitiz Arora said...

i am getting error in following
what should i dooooo??????

Steve Smith said...

Great and Useful Article.

Online Java Training

Java Online Training India

Java Online Course

Java EE course

Java EE training

Best Recommended books for Spring framework

Java Interview Questions

Java Course in Chennai

Java Online Training India

Dipanwita said...

Very useful blog. java training in chennai

franklinraj said...

Thank you for excellent article.

Please refer below if you are looking for best project center in coimbatore

soft skill training in coimbatore
final year projects in coimbatore
Spoken English Training in coimbatore
final year projects for CSE in coimbatore
final year projects for IT in coimbatore
final year projects for ECE in coimbatore
final year projects for EEE in coimbatore
final year projects for Mechanical in coimbatore
final year projects for Instrumentation in coimbatore

jvimala said...

Hey, would you mind if I share your blog with my twitter group? There’s a lot of folks that I think would enjoy your content. Please let me know. Thank you.
Java Training in Chennai | J2EE Training in Chennai | Advanced Java Training in Chennai | Core Java Training in Chennai | Java Training institute in Chennai

gokul said...

Thank you for this informative blog
data science interview questions pdf
data science interview questions online
data science job interview questions and answers
data science interview questions and answers pdf online
frequently asked datascience interview questions
top 50 interview questions for data science
data science interview questions for freshers
data science interview questions
data science interview questions for beginners
data science interview questions and answers pdf
data science interview questions for experienced
top 100 data science interview questions

Elevators and Lifts said...

NIce post... The information you shared was so awesome. elevators and lifts | home lifts | Lifts for home | Residnetial lifts

Anonymous said...

Thanks for sharing the valuable information here. So i think i got some useful information with this content. Thank you and please keep update like this informative details.

erp software development company in us
erp software company in us
list of erp software companies in us
erp in chennai
list of erp software companies in chennai
Latest CRM Software