Java Main

3 respostas
mau43100

Pessoal, uma dúvida que me surgiu foi, qual a diferença de eu chamar um método de uma mesma classe no main da propria classe e tambem a diferença de chamar o método de uma classe em outro classe usando o main. Alguem pode me ajudar a tirar essa duvida.

3 Respostas

lvbarbosa

A única diferença de chamar um método na própria classe onde está o main para uma classe onde não está, é que o que está na classe do main pode ser protected, private ou package-private. Dependendo de onde a outra classe está, esse método tem que ser público.

Esse método tem que ser estático, pois o main é estático. A não ser que você inicialize um objeto e chame o método através dessa nova referência. Por exemplo:

class Principal {
    void foo() {} // método de instância
    public static void main (String... args) {
        foo(); // erro, foo não é estático
        new Principal().foo(); // funciona
    }
}

Em termos de invocação, não muda absolutamente nada. Inclusive, você pode chamar o próprio main recursivamente, se quiser. É só um método normal, com uma assinatura definida pela plataforma que você deve seguir caso queira que seu programa seja invocável pela JVM.

mau43100

Quer dizer que a classe que tem o main tem que ser um metodo estático ?

lvbarbosa

Apenas o main precisa ser estático. Caso você queira invocar métodos diretamente de um método estático (não só do main, qualquer método estático), esses métodos também devem ser estáticos. Se quiser invocar métodos não estáticos, tem que ser através de referências a objetos da classe desejada. É só entender o que é um método estático que você entende isso.

Algo estático (método ou atributo) é algo que pertence a uma classe, e não a suas instâncias.

class Foo {
    static void metodoEstatico() {}
    void metodoDeInstancia() {}
}

// em qualquer outro lugar que veja a classe Foo (inclusive dentro dela mesma):
Foo.metodoEstatico(); // não precisa instanciar um objeto
Foo.metodoDeInstancia(); // erro de compilação
Criado 29 de junho de 2017
Ultima resposta 29 de jun. de 2017
Respostas 3
Participantes 2