Initialize member variables in the beginning of class definition or in constructor

What is the difference between defining and initialising the member variables in the beginning of the class definition, and defining the member variables first and initialising the member variables in the constructor?

Say, for example:

public class Test {
   private int foo = 123;
   private boolean flag = false;

   public void fooMethod() {...}
}

Versus:

public class Test {
   private int foo;
   private boolean flag;

   public Test() {
      foo = 123;
      flag = false;
   }

   public void fooMethod() {...} 
}

Thanks in advance.

4 Answers
  1. In your example, the only difference is when they are initialized. According to the JLS, instance variables are initialized before the constructor is called. This can become interesting when you have super classes to deal with, as the initialization order isn't always so obvious. With that, keep in mind "super" instance variables will still be initialized when no explicit super constructor is called.

    2011-08-24 00:45:41
  2. The difference is the order in which they are initialized / set.

    Your class member variables will be declared / set before your constructor is called. My personal preference is to set them in the constructor.

    tsells2011-08-24 00:40:27
  3. In-class initialization allows you to avoid writing a trivial constructor.

    You have to initialize instance members that depend on constructor parameters inside the constructor. It could be reasonable, for readability if nothing else, to put initialization of all other instance members inside the same constructor.

    Otherwise, there's no difference.

    2011-08-24 00:35:37
  4. Usually a constructor will accept arguments and assign those arguments to fields of the class.

    public Test(int foo, boolean flag)
    {
       this.foo = foo;
       this.flag = flag;
    }
    
    Kevin Bowersox2011-08-24 00:43:31
Related Articles
You Might Also Like