Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

davide92

public static

Mensagens Recomendadas

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


Ligação para a mensagem
Partilhar noutros sites
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.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.