Static methods and variables are shared by all instances of the class. Static variables are initialized when a class is loaded whereas instance variables are initialized when an instance of the class is created. Static methods belong to a class, therefore, it can only access static members of the class and it can be called before instantiating the class. class StaticCase { static int staticCounter = 0; int nonStaticCounter = 0; StaticCase() { staticCounter++; //class level nonStaticCounter++; //instance level } } class StaticCaseImpl { //static method, entry point public static void main(String... args) { //StaticCase.nonStaticCounter, error, not a static variable StaticCase sc1 = new StaticCase(); StaticCase sc2 = new StaticCase(); System.out.println("staticCounter sc1: " + sc1.staticCounter); //output is staticCounter sc1: 2 //or in static context, StaticCase.staticCounter System.out.println("nonSta...