Criando objetos com variavel pré-definida [RESOLVIDO]

7 respostas
Jeanfbs

Ola pessoal, gostaria de criar um projeto que tenha a seguinte logica:

Para cada objeto(ex. obj1, obj2), que eu criar na classe OperarioTest, gostaria que a instancia matricula fosse dada pelo sistema,
por exemplos se eu criasse um obj1 a matricula seria 001, e se eu criasse o obj2, o programa criaria uma outra matricula automaticamente sem eu dar o valor na variavel do objeto.

aqui está o codigo que tenho.

// Essa é a classe Operario onde tem as variaveis.
public class Operario{
    
	 String nome;
	
	  int matricula=001;
	
		

}

// Essa e a classe OperarioTest

public class OperarioTest {
     
	 public static void main(String[]args){
	 
	 Operario  obj1= new Operario();
	 
	 obj1.nome="Jean";
	 obj1.matricula=001; //aqui é onde o programa iria criar a matricula automaticamente para cada objeto criado. Ex cadastramento de funcionarios em uma empresa.
	
	System.out.println(obj1.cadastro);
	
	
	Operario  obj2= new Operario();
	obj2.nome="Fabio";
	obj2.matricula=002;
	
	System.out.println(obj2.cadastro);
	 }

}

por favor me ajudem e coloquem comentario nos codigos para definir as etapas logicas do programa.

Grato!!!

7 Respostas

S

cria um campo estatico na classe para armazenar a identificação da próxima instância, tipo um contador.
No construtor da classe, matricula é inicializada com o valor desse campo, e o valor do é incrementado (para a próxima instância).

Um campo estático é uma variável da classe, só existe um valor para a classe, independentemente do número de instâncias criadas.
Ex:

public class Operario {  

    private static int proximaMatricula = 1;

    ...
E

Só uma coisinha - cuidado ao definir constantes numéricas nos seus programas.

Em particular, constantes numéricas que começam por zero estão em base 8, não em base 10.

Portanto, uma coisa aparentemente inocente como:

int meuCodigoSecreto = 010;

vai lhe causar problemas, porque 010 em base 8 é o número 8 em decimal.

lucaslzl

Faça isso.

public class Operario{  
      
     private String nome;   
     private int matricula;  

     //Envie no construtor os valores que deseja
     public Operario(String n, int m){
          nome = n;
          matricula = m;
     }

     public void setNome (String n){
          nome = n;
     }
    
     public void setMatricula (int m){
          matricula = m;
     }

     public String getNome(){
          return nome;
     }

     public int getMatricula(){
          return matricula;
     } 

}  
  
public class OperarioTest {  
       
     public static void main(String[]args){  
       
         private int cont = 1;
      
         Operario  obj1= new Operario("Jean", cont);  
         i++;  //A cada objeto criado ele incrementa o contador
      
        System.out.println(obj1.getMatricula());  
      
      
        Operario  obj2= new Operario("Fabio", cont);  
        cont++;
      
        System.out.println(obj2.getMatricula());  
     
    }  
  
}
RafaelCassau

Segue abaixo um exemplo de como implementar isso que você precisa:

public class Operario {

	static int matricula = 0;
	String nome;
	
	public Operario() {
		matricula++;
	}
	
	public void cadastro() {
		System.out.println("Nome: " + nome);
		System.out.println("Matricula: " + matricula);
		System.out.println();
	}
	
	
	public static void main(String [] args) {
		
		Operario op1 = new Operario();
		op1.nome = "Jean";
		op1.cadastro();
		
		
		Operario op2 = new Operario();
		op2.nome = "Fabio";
		op2.cadastro();
		
		Operario op3 = new Operario();
		op3.nome = "Roberto";
		op3.cadastro();
	}
}

toda classe no java tem um método contrutor que é responsavel por construir o objeto daquela classe na memoria,
esse método é executando toda a vez que o comando new é chamado, no exemplo acima apenas sobrescrevi esse construtor padrão que já é implicito
e mandei ele incrementar a variável matricula que é estática, sendo assim ela não depende da instancia de uma classe em memoria para existir.

então para cada vez que você usar o new para criar um objeto do tipo operario a variavel matricula é incrementada dando a esse operario a sua matricula.

obs: essa classe só vai funcionar se a classe teste for executada nessa sequencia senão teria que fazer algumas pequenas alterações para torna-la mais flexivel

espero ter ajudado

Jeanfbs

valeu consegui entender, apenas tirando uma duvida sobre construtores e o static, pelo que entendi o static torna uma variavel comum a todos objetos criados,
o que eu quero dizer é que uma variavel static será compartilhada com todas as instancias que eu criar seria isso mesmo? O construtor chamado pelo “new” é defaut ou seja ele apenas cria os objetos?

Mesmo assim valeu que consegui entender um pouco e resolvi meu programa :slight_smile:

RafaelCassau

exatamente meu caro, as variaveis estaticas compartilham seu estado independente de objeto, pois as variaveis estaticas são da classe e não do objeto, porem se deve tomar muito cuidado pois o seu valor é compartilhado entre todos os objetos q a acessem, e sim o metodo contrutor e default, toda classe criada possui o seu metodo construtor padrão e implicito que é chamado pelo operador new, a sua função é construir o objeto em memoria

t+

caso tenha sua duvida respondida por favor altere o titulo do topico para [RESOLVIDO]

RafaelCassau

exatamente meu caro, as variaveis estaticas compartilham seu estado independente de objeto, pois as variaveis estaticas são da classe e não do objeto, porem se deve tomar muito cuidado pois o seu valor é compartilhado entre todos os objetos q a acessem, e sim o metodo contrutor e default, toda classe criada possui o seu metodo construtor padrão e implicito que é chamado pelo operador new, a sua função é construir o objeto em memoria

t+

caso tenha sua duvida respondida por favor altere o titulo do topico para [RESOLVIDO]

Criado 11 de abril de 2013
Ultima resposta 18 de abr. de 2013
Respostas 7
Participantes 5