Question: As a rule in object-oriented paradigm, a static method can have access only to static variables and static methods. If it is so, an obvious question arises as to how can the main() method in Java has access to non-static members (variables or methods) even though it is specifically public static void...!!!

Answer: 
The main() method **cannot** have access to the non-static variables and methods, you will get “non-static method cannot be referenced from a static context” when you try to do so.

This is because by default when you call/access a method or variable it is really accessing the this.method() or this.variable. But in the main() method or any other static method(), no "this" objects has yet been created.

In this sense, the static method is not a part of the object instance of the class that contains it. This is the idea behind utility classes.

To call any non-static method or variable in a static context, you need to **first construct the object with a constructor or a factory** like your would anywhere outside of the class.
Through the reference to the object.

```
public class A {
    private String field;

    public static void main(String... args) {
        //System.out.println(field); <-- can not do this
        A a = new A();
        System.out.println(a.field); //<-- access instance var field that belongs to the instance a 
    }
}

```