Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: what is static{}?

Can someone explain me what the following is?

public class Stuff
{
    static
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch ( ClassNotFoundException exception )
        {
            log.error( "ClassNotFoundException " + exception.getMessage( ) );
        }
...
}

What does this static { ...} do?

I know about static variables from C++, but is that a static block or something?

When is this stuff going to get executed?

like image 236
Omu Avatar asked Nov 15 '09 10:11

Omu


2 Answers

The static block is called a class static initializer - it gets run the first time the class is loaded (and it's the only time it's run [footnote]).

The purpose of that particular block is to check if the MySQL driver is on the classpath (and throw/log error if it's not).


[footnote] The static block run once per classloader that loads the class (so if you had multiple class loaders that are distinct from each other (e.g. doesn't delegate for example), it will be executed once each.

like image 153
Chii Avatar answered Oct 04 '22 05:10

Chii


The primary use of static initializers blocks are to do various bits of initialization that may not be appropriate inside a constructor such that taken together the constructor and initializers put the newly created object into a state that is completely consistent for use.

In contrast to constructors, for example, static initializers aren't inherited and are only executed once when the class is loaded and initialized by the JRE. In the example above, the class variable foo will have the value 998877 once initialization is complete.

Note also that static initializers are executed in the order in which they appear textually in the source file. Also, there are a number of restrictions on what you can't do inside one of these blocks such as no use of checked exceptions, no use of the return statement or the this and super keywords.

like image 20
dimos Avatar answered Oct 04 '22 06:10

dimos