Objetos com construtores

Olá pessoal! Eu estou estudando o livro - Java como programar. Porém, não estou consiguindo compreender quando ele fala de objetos construtores. Usaremos o seguinte exemplo:

[code]// Fig. 3.10: GradeBook.java
// Classe GradeBook com um construtor para inicializar o nome de um curso.

public class GradeBook
{
private String courseName; // nome do curso para esse GradeBook

// construtor inicializa courseName com String fornecido como argumento
public GradeBook( String name )
{
courseName = name; // inicializa courseName
} // termina construtor

// método para configurar o nome do curso
public void setCourseName( String name )
{
courseName = name; // armazena o nome do curso
} // termina o método setCourseName

// método para recuperar o nome do curso
public String getCourseName()
{
return courseName;
} // termina o método getCourseName

// exibe uma mensagem de boas-vindas para o usuário GradeBook
public void displayMessage()
{
// essa instrução chama getCourseName para obter o
// nome do curso que esse GradeBook representa
System.out.printf( “Welcome to the grade book for\n%s!\n”,
getCourseName() );
} // termina o método displayMessage

} // fim da classe GradeBook[/code]

[code]public class GradeBookTest
{
// método main inicia a execução do programa
public static void main( String args[] )
{
// cria objeto GradeBook
GradeBook gradeBook1 = new GradeBook(
“CS101 Introduction to Java Programming” );
GradeBook gradeBook2 = new GradeBook(
“CS102 Data Structures in Java” );

  // exibe valor inicial de courseName para cada GradeBook
  System.out.printf( "gradeBook1 course name is: %s\n",
     gradeBook1.getCourseName() );
  System.out.printf( "gradeBook2 course name is: %s\n",
     gradeBook2.getCourseName() );

} // fim de main

} // fim da classe GradeBookTest[/code]

Para que próposito ele faz isso?

Aguardo respostas. Um grande abraço a todos da comunidade !

Objetos construtores??? Ou vc ta falando dos métodos contrutores da linguagem?

Você deve estar se referindo a construtores de objetos, não?

Um construtor é um método especial em uma classe que:

  • Cria uma nova instância de um objeto;
  • Opcionalmente, preenche os campos desse objeto com alguns valores, conforme sua necessidade.

Um objeto não aparece “do nada”; ele tem de ser criado.

O construtor de um objeto oferece uma forma de se criar um objeto passando os dados a serem inicializados, seu construtor pode ter varios argumentos ou nenhum se vc nao criar um
o compilador ira criar um padrao para vc sem argumentos.

Mas, para que proposito ?

Hum… faz parte do estilo. Se quiser usar programação orientada a objeto, é de bom tom usar construtores. Se não quiser, tudo bem - (embora seu empregador talvez faça cara feia e talvez nem lhe contrate), mas não é Java e sim algo que é parecido com Java.

Em Roma, proceda como os romanos.

Agora falando sério: o compilador Java já lhe fornece o “construtor padrão” (um construtor sem parâmetros, que não faz nada exceto alocar a memória inicial e preencher com zeros ou nulls) se você não o especificar. Mas nem sempre isso é suficiente.

Mas, porque eu não especifico os demais método, por exemplo:

// método para configurar o nome do curso

public void setCourseName( String name )

{

courseName = name; // armazena o nome do curso

} // termina o método setCourseName

// método para recuperar o nome do curso

public String getCourseName()

{

return courseName;

} // termina o método getCourseName

// exibe uma mensagem de boas-vindas para o usuário GradeBook

public void displayMessage()

{

Porque não precisei de fazer isso com os outros, sendo que criei o construtor com o primeiro ?

Tah vamos lah,imagine que vc queira criar um objeto ferrari isto e so um exemplo,e vc quer que seu objeto seja criado ja com um banco de couro um motor possante e td mais,qdo vc cria um objeto assim:

	Class Ferrari {
	String banco;
	Motor motor;
	Color cor;
	}
	Ferrari f = new Ferrari();
vc esta iniciando os variaveis de instancia com valores padrao que sao 0 para Integer null para objetos e tals,
mas suponha que vc queira iniciar seu objeto ferrari com a cor vermelha e outro com a cor preto vc criaria um construtor para passar a cor a ele por exemplo
[code]
public Ferrari(Color c){
this.color=c;
}
Ferrari f1 = new Ferrari(Color.BLACK);
Ferrari f2 = new Ferrari(Color.RED);

[/code]

Hm,certo. Agora, no caso, eu criei o construtor no começo do programa:

// construtor inicializa courseName com String fornecido como argumento

public GradeBook( String name )

{

courseName = name; // inicializa courseName

} // termina construtor

No caso, eu criei o construtor apenas para esse méotodo ? courseName ? Então se eu queser criar o construitor para o displayMessage ou getCourseName ?

vc pode ter um que inicializa as trae variaveis de instancia de uma so vez assim:

 public GradeBook( String name,String courseName,String displayMessage) {

this.name=name;
.......
........

}

Muito obrigado lgweb. Consigui compreender completamente. Então no meu caso, que é o programinha que estou criando, vou poder alterar apenas o courseName, certo ?

sim na criacao sim,mas vc pode utilizar os metodos setter para alterar o objeto apos cria - lo.

Muito obrigado, lgweb. Qualquer dúvida, eu posso criar outro topico denovo?

cara pode postar aki mesmo,se for sobre o msm assunto se nao crie outro .
T+

[quote=entanglement]Você deve estar se referindo a construtores de objetos, não?

Um construtor é um método especial em uma classe que:

  • Cria uma nova instância de um objeto;
  • Opcionalmente, preenche os campos desse objeto com alguns valores, conforme sua necessidade.

[/quote]

Cuidado.

  1. Um construtor não é um método.“método construtor” é outra coisa (ver factory method)
  2. O construtor não cria a instancia do objeto. Isso quem faz é a JVM.
  3. O objetivo do construtor é deixar o objeto num estado válido. É por isso que ele pode receber argumentos porque às vezes os objetos só podem ser criados se tivermos outras informações antes.

O construtor, embora o nome, atua como um inicializador. O nome diferente é para não confundir com os inicializadores do C++ que sim são métodos. Este status de “não método” é importante para entender , por exemplo, porque construtores não são herdados e não têm retorno e existem regras especiais relativas a atributos finais.

Vocês são demais! Muito obrigado a todos que me responderam.

Cara, recomendo você dá uma ida na apostila da FJ-11 Caelum, acho que vai lhe esclarecer bem suas dúvidas.