public static void mainじゃなきゃいけない理由

12.1.4. Invoke Test.main (The Java Language Specification, Java SE 8 Edition)

Finally, after completion of the initialization for class Test (during which other consequential loading, linking, and initializing may have occurred), the method main of Test is invoked.
The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:
public static void main(String[] args)
public static void main(String… args)