Bom…vamos lá…
primeiro que public e private são modificadores de acesso e static é uma propriedade…
O modificador static, diz que sua variável é presa a classe, ou seja a variável pertence a classe aonde ela está declarada…no caso ela NÃO é uma variável de instancia…e sim variável estática…
isso funciona da mesma maneira para metodos staticos…
classes nunca podem ser estaticas…claro…
Public é o modificador de acesso menos restrito que temos, qualquer classe dentro do pacote pode enchergar os atributos public…
Private é o modificador de acesso mais restrito que temos, somente dentro da classe aonde os atributos private são declarados é que podemos encherga-los
Ok, valeu, mas vc me disse mais a respeito de variáveis. E quanto aos métodos? Por exemplo, quando eu preciso instanciar um objeto, como dito acima, ou apenas chamar a classe junto ao método desejado (exemplo disso seria o método showMessageDialog da classe JOptionPane).
Se o metodo for statico ele pertence a classe, então você não precisa criar uma instancia você usa o metodo usando direto o nome ou dando um import statico
Perceba que JOptionPane é o nome de uma classe e não uma instância de uma classe, certo? vc não fez um new JOptionPane … assim sendo o método showMessageDialog é publico (pois vc consegue invocar, resumidamente) e é static, pois vc acessa de forma estática, sem uma instância da classe.
[quote=akumaldo]
Public é o modificador de acesso menos restrito que temos, qualquer classe dentro do pacote pode enchergar os atributos public…[/quote]
Já a visibilidade public faz com que o membro seja acessível à qualquer classe de qualquer pacote, basta usar import.
Eu me enrolei uma vez com esses conceitos, e aqui no fórum mesmo o pessoal me ajudou.
bom eu respondi um topico semelhante um dia desse mais vamos la:
public está disponivel ao mundo ou seja sao variaveis glovais vc pode chamar dentro de um metodo ou nao… iai vai.
private - está restrito apenas naquele metodo fora dali ele nao existe para os demais…
static - funciona da seguinte forma é algo q nao muda por exemplo desde qdo vc nasceu a formula de PI mudou? ou é a mesma?
a classe Math eh um exemplo vc pode importa-la em qualquer classe… que sempre sera a mesma… ela é um public static!! acho q ajudei…
um exemplo melhor de public e private eh:
“vc é um administrador de rede(public) e tem um subordinado(private), para esse subordinado vc diz q ele apenas pode monitorar o setor de vendas e fiscal da empresa ja o admistrador tem acesso a todos os setores” espero ter ajudado parceiro!!
[quote=knik]Tem sim:
E o que dizer de variáveis declaradas sem modificadores, dentro de um método?[/quote]
Variaveis dentro de metodos são chamadas de variáveis locais, elas só existem enquanto o metodo existir na memoria…depois que ele deixa de existir elas ficam sujeitas a serem pegas pelo coletor de lixo…
por isso o unico modificador possível é o final como nosso amigo disse…que não se aplica ao acesso da variável e sim ao valor dela que é constante
Static é o que pertence a classe e não a instância, que me diz do código abaixo:
static double pi = Math.PI;
public static void main(String[] args) {
pi++;
System.out.println(pi);
}
Percebe que o valor de pi é alterado?
Não é porque é static que não muda, se você quisesse que o valor não fosse alterado deveria ser final, como o atributo PI da classe Math.
Logo o código abaixo não compila pois o valor de pi não pode ser alterado:
static final double pi = Math.PI;
public static void main(String[] args) {
pi++;
System.out.println(pi);
}
[quote=camilolopes]bom eu respondi um topico semelhante um dia desse mais vamos la:
public está disponivel ao mundo ou seja sao variaveis glovais vc pode chamar dentro de um metodo ou nao… iai vai.
private - está restrito apenas naquele metodo fora dali ele nao existe para os demais…
static - funciona da seguinte forma é algo q nao muda por exemplo desde qdo vc nasceu a formula de PI mudou? ou é a mesma?
a classe Math eh um exemplo vc pode importa-la em qualquer classe… que sempre sera a mesma… ela é um public static!! acho q ajudei…
um exemplo melhor de public e private eh:
“vc é um administrador de rede(public) e tem um subordinado(private), para esse subordinado vc diz q ele apenas pode monitorar o setor de vendas e fiscal da empresa ja o admistrador tem acesso a todos os setores” espero ter ajudado parceiro!![/quote]
Camilo,
Uma pequena correção nessa parte de static que vc citou. Bom variaveis staticas podem mudar sim =), podem ser atribuidos novos valores e por ae vai. A diferença é que esse valor é visivel para todas as instancias do sistemas que acessam aquela classe com a variavel statica. Exemplo:
Dois usuarios acessando uma aplicação cujo existe uma variavel estatica na classe q os dois estão tentando acessar.
Usuario 1 - modificou o valor da variavel pra X
Usuario 2 - tava usando a variavel com valor Y e do nada o valor foi pra X
Problema - Muitos dos desenvolvedores pecam por esse lado, acabam usando variavel staticas de forma erronea prejudicando o funcionamento correto de um sistema.
Solução - Estruturar bastante seu sistema pra q isso não aconteça e faça uso de static da maneira melhor possivel.
Espero ter sido claro quando a variaveis staticas.