CLASSES e OBJETOS em JAVA?

Oi pessoal!

Estou confuso com alguns mecanismos da programação JAVA.

Gostaria de saber a diferença entre CLASSES e OBJETOS em JAVA?

Porque ora instanciamos um objeto dentro de um programa e ora usamos uma referência a determinada classe apenas?

Quando eu uso o operador NEW eu estou instanciando um objeto como em:

BufferedImage buffImage = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB );

Quais as outras formas de instanciar um objeto o JAVA utiliza?

Quando eu uso um comando deste tipo:

Graphics2D gg = buffImage.createGraphics();

O que realmente acontece aqui?

Vi na documentação do JAVA que o método createGraphics da classe BufferedImage retorna um Graphics2D (Classe ou Objeto?), então a atribuição acima citada cria um objeto gg do tipo Graphics2D “e/ou” faz uma referência ao objeto buffImage?

Vejam o método createGraphics2D da classe BufferedImage da documentação do JAVA abaixo

/**
* Creates a Graphics2D, which can be used to draw into
* this BufferedImage.
* @return a Graphics2D, used for drawing into this
* image.
*/
public Graphics2D createGraphics() {
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
return env.createGraphics(this);
}

Pergunto isso porque no código mais abaixo são executados vários métodos em “gg” para criar uma textura:

gg.setColor( Color.yellow ); // draw in yellow
  gg.fillRect( 0, 0, 10, 10 ); // draw a filled rectangle
  gg.setColor( Color.black );  // draw in black
  gg.drawRect( 1, 1, 6, 6 );   // draw a rectangle
  gg.setColor( Color.blue );   // draw in blue
  gg.fillRect( 1, 1, 3, 3 );   // draw a filled rectangle
  gg.setColor( Color.red );    // draw in red
  gg.fillRect( 4, 4, 3, 3 );   // draw a filled rectangle

porém mais abaixo é criado um objeto TexturePaint, vejam código:

// paint buffImage onto the JFrame
  g2d.setPaint(
     new TexturePaint(
        buffImage, new Rectangle( 10, 10 ) ) );
  g2d.fill(
     new RoundRectangle2D.Double(
        155, 30, 75, 100, 50, 50 ) );

e o primeiro argumento usado no construtor de TexturePaint é o objeto buffImage e não gg?

O objeto buffImage e gg são o mesmo objeto, a mesma referência a memória?

Obrigado pela atenção de todos,

Druid®

Dica: Objetos são instâncias das Classes. Classes são como moldes, elas definem quais atributos e funcionalidades os objetos de seu tipo terão.

http://www.oreilly.com/catalog/hfjava2/chapter/index.html

Boa Leitura (faça o download dos samples chapters)

Não existe “diferença entre CLASSES e OBJETOS em JAVA”. Existe a diferença, como os colegas muito bem colocaram, mas esta diferença independe do JAVA.

[]s

Leandro

CLASSE é a definição.
OBJETO é a instancia.

A definição de uma CLASSE ocorre apenas uma vez no programa.
A instancia de um OBJETO pode ocorrer quantas vezez vc precisar.

Vc pode ter uma CLASSE e instanciar quantos OBJETOS vc precisar desta CLASSE.

A CLASSE vc cria enquanto vc escreve seu codigo fonte.
O OBJETO vc cria quando vc usa new em seus programas. (Ou quando chama algum metodo que cria p/ vc e retorna o objeto pronto, tipo um getConnection() que retorna uma instancia de um objeto Connection. Neste caso vc não usou o new mas em algum lugar dentro do metodo getConnection() ou em algum outro metodo que ele chamou antes de te retornar ele usa o new p/ criar o objeto Connection que vai retornar p/ vc.)

OK pessoal, valeu pela resposta, era exatamente o que eu pensava, mas porque cargas d’água ninguém consegue me dizer o que é mais óbvio nas perguntas que eu fiz acima, ou seja:

Quando eu uso um comando deste tipo:

Graphics2D gg = buffImage.createGraphics();

O que realmente acontece aqui?

Vi na documentação do JAVA que o método createGraphics da classe BufferedImage retorna um Graphics2D (Classe ou Objeto?), então a atribuição acima citada cria um objeto gg do tipo Graphics2D “e/ou” faz uma referência ao objeto buffImage?

É isso que eu gostaria de saber, o que acontece aqui? Por favor, eu quero saber o que acontece, o porque de eu usar o operador de atribuição acima “=” e porque no código abaixo eu tenho uma referência ao objeto “buffImage” e não a “gg” (que eu ainda não sei se um objeto instanciado ou uma classe?).

Eu coloquei este código no outro índice do forum por pensar ser uma dúvida simples, mas parece que não, e mesmo aqui no avançado, ninguém consegue me responder, porque?

Agradeço a atenção e a paciência de todos na espera de uma resposta que venha realmente me esclarecer esse mecanismo do JAVA que ainda esta obscuro.

Druid®

Você está criando o objeto gg do tipo Graphics2D e atribuindo a ele uma instância gerada pelo método createGraphics() do objeto buffImage.
Este método provavelmente retorna um objeto do tipo Graphics2D.
Nada além disso!!!

Será que já ficou claro o que é OO???
Seria muito bom você dar uma olhadas nesses links passados e estudar mais a teoria antes de ir a fundo no técnico.

Qualquer dúvida estamos aí!!!

Boa sorte!!!

OK meu amigo rodrigovfsilva!

Com isso voce quer dizer que o comando de atribuição faz uma referência do objeto “buffImage” para o objeto “gg”, por isso quando os métodos todos criam a textura no objeto Graphics2D gg ele esta referenciando o objeto “buffImage”, por isso quando eu uso o comando: “g2d.setPaint( new TexturePaint( buffImage, new Rectangle( 10, 10 ) ) );” eu uso buffImage como argumento e não “gg”?

Abrigado pela atenção,

Druid®

Obrigado, as respostas foram bem esclarecedoras… parabéns! Consegui diferenciar o que é uma classe e um objeto facilmente agora!

Por favor, não ressuscite um tópico com mais de 1 ano se não tiver um motivo EXCELENTE. Elogiar, agradecer ou fazer uma piadinha não configuram motivos excelentes.