Duvida em codigo (get e set)

Estou estudando um codigo simples em java que basicamente usa get’s e set’s, mas estou com duvidas em algumas linhas(estão comentadas):

  1. Em Acervo.java e Biblioteca.java oque é e como funciona esse “totalAcervo;” ?

  2. como se dá o nome disso : “public Acervo() {}” é um construtor?!

public class Acervo {

	public String titulo;
	public int data;
	
	public Acervo() {
	//	Biblioteca.totalAcervo++;
	}
	
	public void setTitulo(String Titulo) {
		this.titulo = Titulo;
	}
	
	public void setData(int Data) {
		this.data = Data;
	}
	
	public String getTitulo() {
		return this.titulo;
	}
	
	public int getData() {
		return this.data;
	}
}
public class Biblioteca {
	
	public String nome;
	public String endereco;
	//public static int totalAcervo; 
	
	public Biblioteca() { 
	}
	public void setNome(String p1) {
		this.nome = p1;
	}
	
	public void setEndereco(String p1) {
		this.endereco = p1;
	}
	
	public void setTotAcervo(int p1){
		totalAcervo = p1;
	}
	
	public String getNome() {
		return this.nome;
	}
	
	public String getEndereco() {
		return this.endereco;
	}
	
	public int getTotAcervo(){
		return totalAcervo;
	}
}
  • Editado: Utilize a tag CODE em seus códigos

Carlos, boa noite.

É isso mesmo o public Acervo() é o método construtor da classe Acervo.

No caso da variável totalAcervo que esta na classe Biblioteca, você não conseguiria utilizar pq você não instanciou a classe Biblioteca.

O método construtor é invocado quando a classe e instanciada.

O exemplo abaixo chama a classe Biblioteca no void main e atribui na variável que é publica e também chama o método set e get.

public class Acervo { 

   public String titulo; 
   public int data; 
    
   public Acervo() { 
      
   } 
    
   public void setTitulo(String Titulo) { 
      this.titulo = Titulo; 
   } 
    
   public void setData(int Data) { 
      this.data = Data; 
   } 
    
   public String getTitulo() { 
      return this.titulo; 
   } 
    
   public int getData() { 
      return this.data; 
   }

    public static void main(String[] a) {
      Biblioteca biblioteca = new Biblioteca();

      //atribuindo a variavel.
      biblioteca.totalAcervo++;
      System.out.println(biblioteca.totalAcervo);

      //chamado get e set.
      biblioteca.setNome("Acervo 1");
      System.out.println(biblioteca.getNome());

      //chamado get e set.
      biblioteca.setTotAcervo(2);
      System.out.println(biblioteca.getTotAcervo());


    }
 
}  

Espero que ajude.


Emerson

Olá Carlos,

“public Acervo(){}” é um construtor sim, nele você pode colocar código que é executado sempre que um objeto da classe Acervo é instanciado.

Nesse caso tudo que ele mais é acrescentar um numeto ao total de acervo da biblioteca, o que faz sentido, já que um novo item de acervo foi criado e “construído”.

Um construtor também pode receber parâmetros e inicializar os atributos da classe de forma mais rápida, o que ocorreria da seguinte forma:


public class Acervo
{
	private String  titulo;
	private int     data;

	public Acervo(String tituloNovo,int dataNova)
	{
		titulo=tituloNovo;
		data=dataNova;
	}
       
	public void setTitulo(String titulo) 
	{
		this.titulo = titulo;
	}
   
	public void setData(int data) 
	{
		this.data = data;
	}
   
   	public String getTitulo() 
	{
		return titulo;
   	}
   
   	public int getData() 
	{
		return data;
	} 
}

Você pode achar que este construtor acabaria com a necessidade dos métodos Set, porém eles ainda podem ser úteis caso você queira depois de algum tempo mudar o valor de um atributo de um objeto que já foi criado.

Note que defini os atributos como private, e não public. Há uma diferença importante nisso. Um atributo public permite a seguinte chamada:

Acervo meuAcervo = new Acervo();
meuAcervo.titulo = "Cora Java 2 - Vol.2";

Enquanto que um atributo privado só pode ser manipulado pela própria classe, o quer aí sim implica no uso de GETS e SETS. Sendo os gets e sets métodos “públicos”, eles podem ser chamados de fora, para manipular internamente os atributos “privados”.

Acervo meuAcervo = new Acervo();
meuAcervo.setTitulo("Cora Java 2 - Vol.2");

Note também, que seus métodos sets (agora modificados), recebiam um atributo começando por maiúsculo, como no exemplo abaixo:

public void setData(int Data) 
{
      this.data = Data;
} 

Primeiramente eu modifiquei o nome do atributo de “Data” para “data”, porque há uma forte convenção em java sobre como nomear seus atributos, método e classes, e uma destas regras é que atributos começam com letra minúscula, capitalizando-se as primeiras letras de palavras subsequentes (int valorBoleto / float mediaAluno)…

E note também que eu retirei a referência “this” dos seus métodos GETS. Você só precisa usar a referência this, quando deve diferenciar entre atributos de nomes iguais, isso ocorre (só agora, depois da modificação) no caso do setData e do setTitulo…

O setData recebe um parametro de nome “data” porém a própria classe Acervo já tem um atributo com o mesmo nome, como definir qual é qual. Muito simples, o “this.data” é o atributo da classe, e o “data” puramente é o parâmetro que veio na chamada da função setData().

Sabendo isso, se nós modificássemos o construtor da classe para ter nomes mais certinhos, ficaríamos com o seguinte código:


public class Acervo
{
	private String  titulo;
	private int     data;

	public	Acervo(String titulo,int data)
	{
		this.titulo=titulo;
		this.data=data;
	}
        
        // GETS e SETS...
}

Espero que tenha esclarecido todos os pontos que pareciam obscuros no seu trabalho. E boa sorte com o Java, estaremos a disposição… =)

Rafael.

[quote=“erorci”]Carlos, boa noite.

No caso da variável totalAcervo que esta na classe Biblioteca, você não conseguiria utilizar pq você não instanciou a classe Biblioteca.[/quote]
na verdade, conseguirá sim, pois totalAcervo é um atributo estático

Vlw as dicas ae pessoal :wink: :idea: