[RESOLVIDO]Como criar um cadastro de Alunos

Olá,

Meu nome é Paulo, estou estudando java e eu estou com uma duvida que eu não to conseguindo entender.
Pelo que eu entendo quando eu crio uma referencia para um objeto de uma classe(instanciação da classe) eu estou apenas identificado um endereço de memória daquele objeto daquela classe.
Exemplo:

Aluno aluno1 = new Aluno();

O aluno1 é um objeto da classe Aluno, essa referencia não guardo os dados do objeto só um endereço de memória do objeto.
A minha duvida é a seguinte, em um cadastro de alunos, por exemplo, para cada aluno cadastrado eu tenho um objeto diferente, ou seja uma referencia diferente, como é que é feita automaticamente a identificação da referencia de cada objeto criado, por exemplo:

Aluno aluno01 = new Aluno();
Aluno aluno2 = new Aluno();

aluno1.nome = ?Paulo?;
aluno1.matricula = 200810550;

aluno2.nome = ?Daniel?;
aluno2.matricula = 200810000;

aqui eu criei 2 objetos da classe Aluno manualmente, mas em um sistema como é o mecanismo de criação dos objetos?
seu colocar esse código ? Aluno aluno01 = new Aluno(); ? dentro de laço toda vez que o laço executar vai criar um objeto diferente? o nome da referencia pode ter o mesmo nome para todos os objetos que forem criados?
É isso pessoal, tomara que eu tenha conseguido expressar corretamente a minha dúvida.
Obrigado;
Paulo Gomes.

Se você colocar dentro de um laço, será criado um objeto diferente a cada iteração.

Acontece que se você não guardar essa referência em lugar nenhum, você não vai ter como acessar o objeto depois.

Caso você queira criar vários objetos Aluno dentro de um laço e utilizar esses objetos depois, você pode guardar os objetos em uma coleção.

Por exemplo:


List<Aluno> alunos = new ArrayList<Aluno>();

while (alguma condição) {
    Aluno aluno = new Aluno();
    aluno.setNome(algum nome);
    alunos.add(aluno);
}

Ao final do laço, você tem uma coleção de alunos.

Qdo vc cria uma outra instancia usando a mesma variável, a instancia que existia lá se perde, você não terá mais acesso.

Para isto existe o Garbage Collector, ele irá varrer a memória em busca desses objetos perdidos para então remove-los e liberar espaço na memória.

[quote=Poneis123]Qdo vc cria uma outra instancia usando a mesma variável, a instancia que existia lá se perde, você não terá mais acesso.

Para isto existe o Garbage Collector, ele irá varrer a memória em busca desses objetos perdidos para então remove-los e liberar espaço na memória.[/quote]

O objeto só é recolhido pelo Garbage Collector se não houver nenhuma referência. Caso o objeto esteja dentro de uma coleção ou houver qualquer outra referência o objeto não é recolhido.

Cria os “get set”'s pro aluno

[code]public void setNome (String parametronome) {
nome = parametronome;
}
public String getNome () {
return nome;
}

public void setIdade (int parametroidade) {
idade = parametroidade;
}
public Integer getIdade () {
return idade;
}
[/code]
Depois crie 1 lista de alinos:

List<Aluno> alunos = new ArrayList<Aluno>();  

Depois no botão, ou sei lá oq, vc faz isso:

Aluno aluno = new Aluno(); aluno.setNome("José"); aluno.setIdade("12"); alunos.add(aluno);

Vlw pessoal, vou fazer o que vcs sugeriram!
Obrigado.

A vontade…
Qualquer coisa dá 1 grito ae…
Ou melhor, crie 1 tópico =D

Se esse tópico tiver sido resolvido, vá ao primeiro post, clique EDITAR, e adicione [RESOLVIDO] na frente do assunto
Flws !

lembre o seguinte

[code] Aluno aluno1; // cria uma referencia, ainda não aponta para nada

new Aluno(); // cria uma instancia, sem referencias, sujeita ser pega pelo garbage collector

Aluno aluno1 = new Aluno() // cria uma nova instancia e referencia como aluno1[/code]

espero ter ajudado.
Valews!

Eu já fiz o que vocês me sugeriram, eu usei o ArreyList e deu certo, eu consigo listar os alunos cadastrados e tudo, mas se eu quiser acessar um objeto da lista para relizar alguma operação, tipo enviar o um objeto aluno do Array como parametro para algum metodo de uma classe como eu faço para apontar o objeto?

Eu ainda não vou dar o tópico como resolvido, eu ainda vou continuar ficar fazendo alguns testes. Para os mais experientes algumas coisas podem ser simples, mas para mim que estou tentando aprender sozinho pode ser complicado. Por isso eu agradeço a paciencia e a ajuda de todos vocês.
Abraço…

[quote=paulogomes.tec]Eu já fiz o que vocês me sugeriram, eu usei o ArreyList e deu certo, eu consigo listar os alunos cadastrados e tudo, mas se eu quiser acessar um objeto da lista para relizar alguma operação, tipo enviar o um objeto aluno do Array como parametro para algum metodo de uma classe como eu faço para apontar o objeto?

Eu ainda não vou dar o tópico como resolvido, eu ainda vou continuar ficar fazendo alguns testes. Para os mais experientes algumas coisas podem ser simples, mas para mim que estou tentando aprender sozinho pode ser complicado. Por isso eu agradeço a paciencia e a ajuda de todos vocês.
Abraço…[/quote]

A classe ArrayList tem métodos que vc usa para obter certo elemento. O primeiro é o método get, se vc ja souber em qual índice está o elemento!

[code]
public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();

    lista.add(new Pessoa("a"));
    lista.add(new Pessoa("b"));
    lista.add(new Pessoa("c"));
    lista.add(new Pessoa("d"));

    //lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
    // na linha abaixo.
    System.out.println(lista.get(1).getNome()); 

}

}

class Pessoa{
private String nome;

public Pessoa(String nome){
	this.setNome(nome);
}
public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}[/code]

Se vc nao sabe o índice do elemento, use o método indexOf … PORÉM olhe esse exemplo…

[code]public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();

    lista.add(new Pessoa("a"));
    lista.add(new Pessoa("b"));
    lista.add(new Pessoa("c"));
    lista.add(new Pessoa("d"));

    //lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
    // na linha abaixo.
    System.out.println(lista.indexOf(new Pessoa("a"))); //Escreverá -1
}

}

class Pessoa{
private String nome;

public Pessoa(String nome){
	this.setNome(nome);
}
public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}[/code]

O índice será -1 porque ele está comparando memória e os dois objetos (apesar de terem o mesmo nome) estão em espaços de memória diferentes. Para resolver esse problema, vc deve sobreescrever o método equals da classe Object.
Se vc usa Eclipse, ele faz isso automaticamente para vc… Vá ate a classe Pessoa e clique em Source => Generate hashCode() and equals()… selecione os campos que você deseja que sejam levados em conta para fazer o equals e de ok.
O meu ficou algo dessa maneira:

[code]public class Main
{
public static void main(String[] args)
{
List lista = new ArrayList();

    lista.add(new Pessoa("a"));
    lista.add(new Pessoa("b"));
    lista.add(new Pessoa("c"));
    lista.add(new Pessoa("d"));

    //lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
    // na linha abaixo.
    System.out.println(lista.indexOf(new Pessoa("a"))); //Escreverá -1
}

}

class Pessoa{
private String nome;

public Pessoa(String nome){
	this.setNome(nome);
}
public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}
@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((nome == null) ? 0 : nome.hashCode());
	return result;
}
@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Pessoa other = (Pessoa) obj;
	if (nome == null) {
		if (other.nome != null)
			return false;
	} else if (!nome.equals(other.nome))
		return false;
	return true;
}

}[/code]

Se vc rodar agora aparecerá o índice “0”, o que está correto, uma vez que a pessoa de nome “a” é a primeira da lista.

E, finalmente, se vc quer fazer um método que obtenha uma pessoa… pode fazer assim:

[code]public class Main
{
static List lista = new ArrayList();
public static void main(String[] args)
{
lista.add(new Pessoa(“a”));
lista.add(new Pessoa(“b”));
lista.add(new Pessoa(“c”));
lista.add(new Pessoa(“d”));

    //lembrando que índices começam a ser contados de zero. Logo, vc obterá o segundo elemento
    // na linha abaixo.
    System.out.println(obterPessoa(new Pessoa("c")).getNome());
    
    
}

public static Pessoa obterPessoa(Pessoa p){
	if (p == null){
		return null;
	}
	
	int index = lista.indexOf(p);
	if (index < 0){
		return null;
	}
	
	return lista.get(index);
}

}

class Pessoa{
private String nome;

public Pessoa(String nome){
	this.setNome(nome);
}
public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}
@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((nome == null) ? 0 : nome.hashCode());
	return result;
}
@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Pessoa other = (Pessoa) obj;
	if (nome == null) {
		if (other.nome != null)
			return false;
	} else if (!nome.equals(other.nome))
		return false;
	return true;
}	

}[/code]

OBS: Não leve em conta encapsulamento nem acoplamento no meu código hehehe

ok?

Ok amigão, eu vou testar esses códigos. muito obrigado!
Abraço…

Olá, boa noite,

eu tenho uma tabela chamada aluno que tem os seguintes campos:

idAluno
nomealuno
nota1
nota2

eu quero fazer um select que retorne o nome a media dos alunos que tenha a media maior que 7.

eu estou usando o SQL Server 2005

Desde já eu agradeço a ajuda.