Duvida no exemplo Clike me red spot do tutorial da sun

no codigo :
//criando a bolinha vermelha
public class Spot {
public int size;
public int x, y;

public Spot(int intSize) {
    size = intSize;
    x = -1;
    y = -1;
}

}

criando o applet :
import java.applet.Applet;
import java.awt.;
import java.awt.event.
;

public class ClickMe extends Applet implements MouseListener {
-----------> private Spot spot = null;<---------------------------------
private static final int RADIUS = 7;

public void init() {
addMouseListener(this);
}

public void paint(Graphics g) {
//draw a black border and a white background
    g.setColor(Color.white);
g.fillRect(0, 0, getSize().width - 1, getSize().height - 1);
    g.setColor(Color.black);
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);

//draw the spot
    g.setColor(Color.red);
if (spot != null) {
    g.fillOval(spot.x - RADIUS, spot.y - RADIUS, RADIUS * 2, RADIUS * 2);
    }
}
public void mousePressed(MouseEvent event) {	
    if (spot == null) {
        spot = new Spot(RADIUS);
    }
spot.x = event.getX();
spot.y = event.getY();
repaint();
}
public void mouseClicked(MouseEvent event) {}
public void mouseReleased(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}

}

Dúvida:
-----------> private Spot spot = null;<---------------------------------
Posso criar uma varialvel de qualquer tipo de classe ? não deveria ser :

Spot spot = new Spot para criar um objeto ou instancia? Por que criar uma “variavel” do tipo Spot e inicializa la para null e não criar um objeto diretamente?

por exemplo:

public class Gata{…}

private Gata g = null

podem me ajudar?

obrigado

Uma variável de uma classe é como um nome (ou apelido) de um objeto dessa classe. Du, Edu, Dudu e Eduardo, num determinado contexto, podem estar se referindo à mesma pessoa. Ou melhor, ao mesmo objeto da classe pessoa.

Você pode inventar um apelido, Bibi por exemplo, e só depois dizer que esse é o apelido daquela garota chamada Bianca que você tanto olha. :slight_smile: Em linguagem de nerd, você pode definir uma variável de instância e só depois amarrá-la a um objeto.

E aí você me pergunta: pra quê fazer isso? Bom, na vida real não faz muito sentido. Mas na programação muitas vezes isso é util. Às vezes você precisa de informações para criar um objeto. Exemplos sempre ajudam:

   public class Jogador {
      private String nome = null;
      private int pontos;

      public Jogador(String nome){
           this.nome = nome;
            pontos = 0;
     }

     public setPontos(int pontos){
           this.pontos = pontos;
     }
     
     public getPontos(){
           return pontos;
    }
   }  

   public class Main {
      public static void main(String[] args){
          String nome = obterNomeDoVencedor();
          Jogador vencedor = new Jogador(nome);
          vencedor.setPontos(100);
          (...)
     }
   }     

Note que não faz sentido criar um objeto da classe String no início. :wink:
Só mais uma coisa, fazer isso:

  public class C {
     private Jogador vencedor = null;
     private Jogador perdedor = null;
  }

é o mesmo que fazer:

  public class C {
     private Jogador vencedor;
     private Jogador perdedor;
  }

No caso do Spot, ele começa com null simplesmente para só aparecer no applet assim que clicarem com o mouse pela primeira vez.

Abraços

:smiley: :smiley:
OBRIGADO FOI DE GRANDE AJUDA