Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

static block vs private static method for static member initialization

A static variables can be initialized with the private static methods or with a static block. Are there any subtle difference between the two? Are there any situation where I cannot use the static method for initializing static members? I found the later more readable.

Static Block initialization :

private static int NUM_ITER;
static {
    // Operations
    NUM_ITER = //val from above operations.
}

Private static method initialization:

private static int NUM_ITER = calculateNumIter();

// Some method comment on how we are calculating.
private static int calculateNumIter()
{
    // Operations.
    return //value_from_operations.
}

I prefer the second one since it is more readable. Are there any situation I have to use only first (static blocks) ?

What is the best coding convention/design for initializing static members(final as well as variable)? Even from this thread I learned private static methods have an advantage over the static blocks.

thanks,

like image 306
Mohan Avatar asked Jul 23 '12 18:07

Mohan


2 Answers

The static block would be necessary (or at least useful) if two different variables are interdependant and can't be initialized independently.

Suppose you need to read two values from a file, for example. You could store both values in an additional object. But if you really want two constants, a static block is useful.

like image 165
JB Nizet Avatar answered Sep 22 '22 20:09

JB Nizet


I would suggest to use whatever syntax keeps your code clean and readable:

  • if the initialization amounts to one, max two, very simple lines of code, then go with the static block;

  • if the initialisation is a complex operation, then a method with a good name will be best;

  • in doubt, use the method syntax and use the method name to declare not only which variable, but also how you are initializing (i.e. initializeValueWithRandomNumber() );

like image 22
Matteo Caprari Avatar answered Sep 23 '22 20:09

Matteo Caprari