Minha duvida é simples. Gostaria de saber se o modificador Static serve apenas para facilitar a chamada de atributos e metodos de um objeto.
Acho que isso pode te ajudar :
Olá!
“serve apenas…” - Não. Os modificadores de acesso são padrões de visibilidade de acessos às classes, atributos e métodos. Na maioria das declarações de variáveis de instância são definidos os seus atributos com a palavra-chave private (privado) para garantir a segurança de alterações acidentais, sendo somente acessíveis através dos métodos, ajudando no encapsulamento dos dados, preservando ainda mais a segurança.
É usado para a criação de uma variável que poderá ser acessada por todas as instâncias de objetos desta classe como uma variável comum, ou seja, a variável criada será a mesma em todas as instâncias e quando seu conteúdo é modificado numa das instâncias, a modificação ocorre em todas as demais.
Ele tem uma finalidade própria para o cenário. É um recurso a ser usado dependendo do caso. Caso queira que cada objeto instanciado tenha seu próprio conteúdo de variável, no cenário em questão, não usará estático, do contrário, se essa variável estiver marcada como estática terá seu conteúdo acessado por todas as suas instancias.
Clareou?
Fonte: http://www.devmedia.com.br/metodos-atributos-e-classes-no-java/25404
Sim, acho que não usei a palavra correta para referir-se aos modificadores, já como dito por você, ambos tem sua finalidade, padronizar as visibilidades de cada atributo ou metodo ou seja la o que seja usado. Mas diante sua resposta, pude pensar melhor e cheguei a um conceito melhor diante o modificador Static.
Não, o static
não serve pra facilitar nada!
Ele serve para indicar que aquele membro pertence à classe e não aos objetos da classe.
Um erro comum para quem está começando é declarar tudo como static pois não conseguem invocar métodos não-estáticos de dentro do método main, sendo que o problema é fácilmente resolvido criando uma instância da classe que declara o main.
Exemplo:
public class MeuPrograma {
public static void main(String[] args) {
executar();
}
public void executar() {
System.out.println("Funciona!");
}
}
O código acima não compila pois não é possível invocar o método executar
de dentro do main
aí erroneamente a maioria vai lá e marca o executar como static
, sendo que na verdade era só criar uma instância da classe MeuPrograma
, dessa forma:
public class MeuPrograma {
public static void main(String[] args) {
MeuPrograma objeto = new MeuPrograma();
objeto.executar();
}
public void executar() {
System.out.println("Funciona!");
}
}
O mesmo problema é comum por exemplo quando se tem uma classe A
cujos objetos conversam com objetos de uma classe B
. Acidentalmente o programador tenta acessar um método da classe B
sem ter um objeto dela, aí o que ele faz?
Ao invés de se preocupar em como obter um objeto daquela classe, ele vai lá e erroneamente marca o método como static
.
Para quem vem de linguagens como o C++ ou o Object Pascal, o static
é o modificador que torna os métodos ou atributos globais, ou seja, podem ser acessados sem a necessidade de um objeto da classe.
Entendi. Mas não tenho esse problema já que estou acostumado a basicamente criar um objeto… Só estou a procura de informações e você me ajudou bastante parceiro.
Você poderia me dar exemplos de quando eu poderia criar atributos e metodos estaticos ?
Me falaram que usar muito metodo estatico pode ate mesmo causar problemas na classe… O que aconteceria se eu tivesse muitos dos static em uma classe ?
Você usa static
quando um método não depende da instância da classe onde ele foi declarado ou usa static
em um atributo quando ele deve ser o mesmo para todas as instâncias da classe.
O que é static
é compartilhado por todas as instâncias daquela classe.
Por isso se chama static
, pois é alocado em uma região de memória e vai ficar pendurado lá enquanto a JVM estiver no ar, diferente de atributos não estáticos cujo endereço de memória só é alocado na instanciação das classes.
Constantes por exemplo, são atributos cujo valor não é alterado e é sempre o mesmo para todas as instâncias da classe, então deveriam ser static
.
Métodos utilitários, aqui vai depender da criatividade de cada um, mas imagine por exemplo um método para calcular média que receba algumas notas por parâmetro e retorne a média delas, se esse método não manipula nenhum membro da instância da classe onde está declarado, então ele deveria ser static
.
Poha agora eu saquei, valeu ai mano