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.publicclassOperario{Stringnome;intmatricula=001;}// Essa e a classe OperarioTestpublicclassOperarioTest{publicstaticvoidmain(String[]args){Operarioobj1=newOperario();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);Operarioobj2=newOperario();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.
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:
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:
intmeuCodigoSecreto=010;
vai lhe causar problemas, porque 010 em base 8 é o número 8 em decimal.
lucaslzl
Faça isso.
publicclassOperario{privateStringnome;privateintmatricula;//Envie no construtor os valores que desejapublicOperario(Stringn,intm){nome=n;matricula=m;}publicvoidsetNome(Stringn){nome=n;}publicvoidsetMatricula(intm){matricula=m;}publicStringgetNome(){returnnome;}publicintgetMatricula(){returnmatricula;}}publicclassOperarioTest{publicstaticvoidmain(String[]args){privateintcont=1;Operarioobj1=newOperario("Jean",cont);i++;//A cada objeto criado ele incrementa o contadorSystem.out.println(obj1.getMatricula());Operarioobj2=newOperario("Fabio",cont);cont++;System.out.println(obj2.getMatricula());}}
RafaelCassau
Segue abaixo um exemplo de como implementar isso que você precisa:
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
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]