Se instanciarmos 100 objetos todos a partir da classe cachorro que possui o método public latir teremos 100 objetos cada qual com um método latir? E se o método latir for static teremos 100 objetos que usa um único método no espaço que a JVM reservou na memória para a classe?
[Resolvido]Método no-static x static
5 Respostas
Mais ou menos.
Métodos, sejam estáticos ou não, pertencem a classe e não ao objeto. O que é individual de cada objeto são as variáveis de classe.
Portanto, a diferença de um método não estático para o estático está apenas no fato do não estático enxergar o this e as variáveis da própria classe.
Mais ou menos.Métodos, sejam estáticos ou não, pertencem a classe e não ao objeto. O que é individual de cada objeto são as variáveis de classe.
Portanto, a diferença de um método não estático para o estático está apenas no fato do não estático enxergar o this e as variáveis da própria classe.
Então posso dizer que a JVM reserva um espaço na memória para a classe (com os atributos e métodos públicos e estaticos) e todo o objeto que for criado vai apontar para esse método dando uma ‘falsa’ impressão de que cada objeto tem seu próprio método, quando na verdade só existe um, e com os atributos, ai sim ele vai fazer uma cópia para cada objeto.
E no método static o objeto não vai apontar para o método porque ele é global (ele não pertence ao objeto), portanto só pode ser acessado através da chamada da classe e não do objeto.
Mais ou menos.Métodos, sejam estáticos ou não, pertencem a classe e não ao objeto. O que é individual de cada objeto são as variáveis de classe.
Portanto, a diferença de um método não estático para o estático está apenas no fato do não estático enxergar o this e as variáveis da própria classe.
Vini uma dúvida se não-static é também métodos da classe, porque Principal.setQtdOvos(3); não funcionaria?
package iesp;
public class Principal {
private static int qtdOvos;
public int getQtdOvos() {
return qtdOvos;
}
public void setQtdOvos(int qtdOvos) {
Principal.qtdOvos = qtdOvos;
}
}
Já sei onde você está confundindo. Muitas pessoas falam que métodos estáticos são “métodos da classe”, enquanto que métodos não estáticos são “do objeto”.
Bem, essa é uma maneira didática de dizer que métodos estáticos não dependem da instância da classe para executar, enquanto os não-estáticos dependem.
Como eu falei no primeiro post, o método não-estático “enxerga o this e as variáveis da própria classe.”
Por isso, o java irá exigir que essa variável esteja presente no momento da invocação.
No mais, é como você falou mesmo. Quando uma classe é carregada na memória, todos os seus métodos também são.
O java apenas cria para você a “ilusão” de que cada objeto tem seu próprio método.
Se um método não-estático for chamado, o código é redirecionado para o método da classe nesse “local global”, mas os dados do objeto são passados junto (por isso a necessidade de ter o objeto na hora da invocação).
Se um método estático for chamado, então, o java irá redirecionar o código para o método, sem passar os dados dos objetos junto.
Ficou claro! Obrigadooo