1. Try and understand the use of static
java keyword.
2. There is a small difference between static fields and non-static fields of a Class.
2.1 If Class A has a non-static field a1 and then you create 10 objects of class A, each object has a field a1 in it and they can all hold different values.
2.2 If Class A has a static field a2 and if you load the class A in memory( you haven't created any object of it, yet), a2 is available to be accessed. Now if you create 10 objects of Class A, those objects DO NOT have the field a2. There is only one copy of a2 in memory and it can be accessed using A.a2. Even if you access a2 via one of those 10 objects you are still acessing the same a2.
3. So, out is a static field and hence it is accessed as System.out. println() just happens to be a method of Class Out and hence can be run as out.println().