Por que o método main é estático?

Qual a melhor justificativa?

A. A inicialização dos atributos estáticos ocorre no método main.

B. O método main não deve instanciar nenhum objeto.

C. Nenhum objeto deve ter acesso ao método main.

D. Não há nenhum objeto instanciado quando o aplicativo inicia
execução.

Eu acredito que seja a D, mas confesso que não entendi direito. Alguém pode clarear essa pra mim?

[quote=sllalow]Qual a melhor justificativa?

A. A inicialização dos atributos estáticos ocorre no método main.

B. O método main não deve instanciar nenhum objeto.

C. Nenhum objeto deve ter acesso ao método main.

D. Não há nenhum objeto instanciado quando o aplicativo inicia
execução.

Eu acredito que seja a D, mas confesso que não entendi direito. Alguém pode clarear essa pra mim?[/quote]

A. Falsa. A inicialização dos atributos estáticos pode ocorrer em qualquer classe, pode ocorrer diretamente no atributo e pode não estar ligada ao método main.

B. Falsa. Tradicionalmente o método main instancia o primeiro objeto da aplicação.

C. Falsa. O método main é público, portanto, os objetos tem acesso a ele. Por ser estático, ele ainda fica acessível a todos os objetos.

D. Verdadeira. Pelo main ser o ponto de início da aplicação, nenhum objeto do aplicativo foi criado ainda.

PS: Na frase como está, a D também é falsa. Quando o aplicativo sobe, já foi criado o objeto do classloader, os descritores de classe, os atributos estáticos da classe onde o main está, etc. Na verdade, a razão pela qual o main é estático é uma mera convenção. É interessante porque não força o programador a instanciar nenhuma classe especial, e permite que o main seja colocado onde quiser.