Ir para o conteúdo
davide92

public static

Mensagens Recomendadas

davide92    0
davide92

Boas gostaria de saber para que serve o "public static", sei que se pode declarar variaveis la ( por exemple "public static int i" ) mas não sei para que serve  ;) .

Abraço

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

De uma forma muito simples e sucinta :

Dando uma analogia : é "quase" como ter variáveis globais em C. Só que como em Java não existe nada global e tem de estar contido numa classe ...

Por outras palavras : é uma variavel que existe sem a necessidade de instanciar uma classe.

Se não sabes C avisa para tentar explicar melhor.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mAiN_iNfEcTiOn    0
mAiN_iNfEcTiOn

Um bom exemplo (em PHP) é:

class Exemplo{
  public static $objectos = 0;

  function __construct()
  {
    self::$objectos++;
  }
}

echo Exemplo::$objectos . ' objecto(s)<br/>'; # resultado: 0 objecto(s)
$exemplo1 = new Exemplo();
echo $exemplo1::$objectos . ' objecto(s)<br/>'; # resultado: 1 objecto(s)
$exemplo2 = new Exemplo();
echo $exemplo2::$objectos . ' objecto(s)<br/>'; # resultado: 2 objecto(s)

São 2 objectos diferentes e ao mesmo tempo partilham a mesma variável estática ;)

Normalmente, em PHP, uso as variáveis estáticas para fazer o controlo de instâncias, de modo a trabalhar sempre com a mesma:

class Exemplo
{
  public static $instance = NULL;
  private $vars = array();
  
  public static function instance()
  {
    if( !self::$instance )
    {
      self::$instance = new Exemplo();
      return self::$instance;
    }
    else
      return self::$instance;
  }

  public function addVars($name)
  {
    $this->vars[] = $name;
  }

  public function getVars()
  {
    return $this->vars;
  }
}

#Exemplo::$vars; # Dá erro não é estático, nem público...
#Exemplo::addVars('teste'); # Dá erro, não é estático
#Exemplo::getVars(); # Dá erro, não é estático...

#Exemplo::instance()->vars; # Dá erro, não é público
Exemplo::instance()->addVars('teste'); # OK
print_r(Exemplo::instance()->getVars()); # resultado: array com o valor teste

$obj1 = Exemplo::instance();
$obj2 = Exemplo::instance();

print_r($obj1->getVars()); # resultado: array com o valor teste
$obj2->addVars('teste2');
print_r($obj1->getVars()); # resultado: array com os valores teste, teste2

o $obj1 e $obj2 referenciam o mesmo objecto e/ou espaço de memória :thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
davide92    0
davide92

De uma forma muito simples e sucinta :

Dando uma analogia : é "quase" como ter variáveis globais em C. Só que como em Java não existe nada global e tem de estar contido numa classe ...

Por outras palavras : é uma variavel que existe sem a necessidade de instanciar uma classe.

Se não sabes C avisa para tentar explicar melhor.

Nunca dei nada de C.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

class Soma {
   public static int soma1(int a, int b) { return a+b; }
   public int soma2(int a, int b) { return soma3(a, b); }
   private int soma3(int a, int b) { return a+b; }
}

A palavra "public" significa que o método ou variável é acessível no exterior da classe. Ou seja, daquela classe podes chamar o soma1() e o soma2(), porque são public. A chamada dessas funções é que é diferente. Para chamares o soma1() só precisas de:

int x = Soma.soma1(1, 3);

Ou seja, não tens que instanciar qualquer tipo de objecto para poderes chamar o método. Se já utilizaste o método Integer.parseInt(), é exactamente a mesma coisa. É um método static.

Para chamares o soma2():

Soma soma = new Soma();
int x = soma.soma2(1, 3);

Ou seja, primeiro tens que instanciar o objecto e só depois podes chamar o método.

O método soma3(), sendo privado, não o podes chamar fora da classe. Mas podes chamar dentro dela, como podes ver no primeiro pedaço de código que mostrei.

No caso das variáveis é a mesma coisa:

class Vars {
   public static int var1;
   public int var2;
   private int var3;
}

Vars.var1 = 10; // OK
Vars var = new Vars();
var.var2 = 9; // OK
var.var3 = 8; // Erro

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

Vars.var1 = 10; // OK
Vars var = new Vars();
var.var2 = 9; // OK
var.var3 = 8; // Erro

Só +2 para completar isso:

Vars.var1 = 10; // OK
Vars.var2 = 5; // Erro
Vars.var3 = 2; // Erro
Vars var = new Vars();
var.var2 = 9; // OK
var.var3 = 8; // Erro

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade