Static

7 respostas
N

Olá pessoal, estou iniciando agora em Java-Orientação a objetos e tenho algumas dúvidas.
Gostaria de saber como funciona o STATIC, os tutoriais que tenho visto não explicam de uma maneira muito clara e objetiva o significado dessa palavra- chave. Alguém ai saberia me explicar e se possível citar alguns exemplos?

Obg

:smiley:

7 Respostas

Naruffy

quando você usa o modificador static em atributos ou métodos, quer dizer que esses são da classes e não da instancia, deixa eu exemplificar

Imagine a seguinte classe

class A {
  public static void metodoEstatico(){}
  public void metodoDaInstancia(){}
}

O método “metodoEstatico” é da class A ou seja eu posso invoca-lo estáticamente da seguinte maneira

A.metodoEstatico();

Já o método “metodoDaInstancia” não pode ser invocado desta maneira, é necessário instanciar a classe para invoca-lo

A a = new A();
a.metodoDaInstancia();

Att

denislima

Ola Natalia.

Nesse link você encontra as informações necessárias para entender o modificador Static.

http://www.guj.com.br/article.show.logic?id=121

:wink:

newbcc

Olá Natália,

qualquer membro marcado com este modificador significa que ele pertence à classe e não à uma instância da classe.

Execute esse exemplo e veja como funciona:

public class StaticTeste {

 static int valor = 0;
 int _valor = 0;

 public static void main(String[] args) {

 StaticTeste obj1 = new StaticTeste();

 System.out.println("Valor marcado como static: " + obj1.valor++);
 System.out.println("Valor marcado sem static: " + obj1._valor++);

 StaticTeste obj2 = new StaticTeste();

 System.out.println("Valor marcado como static: " + obj2.valor++);
 System.out.println("Valor marcado sem static: " + obj2._valor++); }
}

Sendo assim, com o modificador static fará com que para cada objeto da classe criado, compartilhem o mesmo valor. Caso não exista o modificador, ao criar um novo objeto, a variável de instância terá o seu próprio valor não compartilhado com nenhum outro objeto.

Quando você possui um método marcado com este modificador ou uma variável de instância, você poderá acessá-los através do nome da classe seguido pelo membro que se quer acessar. Por exemplo:

Isso porque, como dito, o membro pertence à classe e não à uma instância, sendo assim não é necessário instanciar um objeto da classe para acessar os tais membros.

Abs.

sinapse

É importante também ressaltar o bloco de código static. Se uma classe possuir um bloco de códio static, este bloco de código será executado somente quando a primeira instancia do objeto for criada. A partir da segunda instancia o bloco de codigo static já nao é mais executado.

static{

System.out.println(BLOCO DE CODIGO STATIC);

}

se voce colocar esse trecho de codigo em uma classe A por exemplo, quando voce criar a PRIMEIRA instancia desta classe aquele system.out será executado. A partir da segunda intancia da classe A que voce criar, o system.out nao será executado, ou seja, o bloco de codigo estatico nao sera executado.

Outra coisa importante ressaltar do modificador static é a maneira em que ele é representado na UML. Todo atributo ou método que for SUBLINHADO em um diagrama de classe significa que aquele atributo ou método é estatico.

Outra coisa importante, principalmente para SCJP é o conceito de que métodos estaticos só podem acessar/utilizar atributos que forem estaticos, e também métodos estaticos não aceitam os operadores THIS e SUPER (creio que você os aprenderá posteriormente).

Espero ter ajudado.

N

puxa, brigadão galera!
dessa vez deu pra entender bem como funciona o static.

:smiley:

newbcc

Apenas uma observação neste ponto:

O bloco estático será carregado quando a tal classe for carregada pela primeira vez em memória e não quando for criado o primeiro objeto.

Blocos estáticos, assim como qualquer outro membro marcado com este modificador, independem da criação de objetos.

Abs.

sinapse

Correto, o conceito estava certo mas a explicação equivocada.

Obrigado.

Criado 23 de junho de 2009
Ultima resposta 23 de jun. de 2009
Respostas 7
Participantes 5