Declaring a static variable in Java , means that there will be only one copy, no matter how many objects of the class are created. The variable will be accessible even with no Objects created at all. However, threads may have locally cached values of it. When a variable is volatile and not static , there will be one variable for each Object. So, on the surface it seems there is no difference from a normal variable but totally different from static . However, even with Object fields, a thread ... Java has a rather unique interpretation of the " static " keyword . It looks like OP is coming from C# where " static class" is the equivalent of a singleton in Java . The static keyword in Java means that the variable or function is shared between all instances of that class as it belongs to the type, not the actual objects themselves. When is it considered poor practice to use the static keyword in Java on method signatures? If a method performs a function based upon some arguments, and does not require access to fields that are...