Estudo dos modificadores de acesso e atributos de classe

Galera, boa noite

Estou começando a aprender java e com o auxilio da apostila do CAELUM estou na etapa de “Modificadores de acesso e atributos de classe”.
Juntamente com a apostila estou fazendo alguns exercícios para aprimorar mais o que estou aprendendo.
Porém nessa etapa fiquei parado em um exercício, o qual aparentemente parece estar tudo ok, porém ao compilar - pelo eclipse LOMBOZ - o mesmo me retorna o seguinte erro:
"
4300.0
Exception in thread “main” java.lang.NullPointerException
at MainPackage.Conta.imprimeBanco(Conta.java:27)
at MainPackage.SacaEDeposita.main(SacaEDeposita.java:18)
"

O programa segue em sequencia, para os que puderem me ajudar:

[b]public class SacaEDeposita {
public static void main(String [] args){
//Criando conta
Conta minhaConta = new Conta();
Cliente client = new Cliente();

	client.setNome("DUKE");
	minhaConta.setSaldo(1000);
	minhaConta.setLimite(3000);
//Saca 200 reais
	minhaConta.Saca(200);
//Deposita 200 reais
	minhaConta.Deposita(500);
System.out.println(minhaConta.getLimite()+minhaConta.getSaldo());
//Imprime nome e saldo do proprietário da conta
	minhaConta.imprimeBanco();
}

}[/b]

[b]public class Conta{
private int numero;
Cliente cliente;
private double saldo;
private double limite;

public double getSaldo(){
	return this.saldo;
}

public void setSaldo(double saldo){
	this.saldo=saldo;
}

public double getLimite(){
	return this.limite;
}

public void setLimite(double limite){
	this.limite=limite;
}

public void imprimeBanco(){
	System.out.println("Essa conta é do banco J e o saldo da conta do(a)" +
			" senhor(a) "+cliente.getNome()+" é de: "+ getSaldo());
}

public boolean Saca(double valor){
	if(this.saldo<valor){
		return false;
	}
	else{
		this.saldo=this.saldo-valor;
		return true;
	}
}
		
public int getNumero(){
		return this.numero;
}
	
public void setNumero(int number){
		this.numero=number;
}
	
public void Deposita(double quantia){
	if(quantia<=0){
		System.out.println("Não é possivel creditar o valor");
	}
	else{
	this.saldo+=quantia;
	}
}

public void transfere(Conta destino, double valor){
	if(this.saldo< valor && (this.saldo+this.limite)< valor){
		System.out.printf("%2ds","Saldo insuficiente",(this.saldo+this.limite));
	}
	if(this.saldo<valor && this.limite>=valor ){
		System.out.println("Transferência consedida, porém o seu limite especial" +
				" no banco passou a ser de de "+(this.limite-valor));
	}
}

}[/b]

Já entendi que o problema está no método imprimeBanco(), porém, aparentemente está tudo correto.

Agradeço desde já a atenção.

Rafael.

No método "imrimeBanco()" você chama um método do objeto cliente :

cliente.getNome()

O problema é que seu objeto cliente não foi instanciado e por isso está dando NullPointerException. A referência guardada na variávgel "cliente" é nula, você deve instanciá-la antes de usar. Você poderia resolver isso simplesmente instanciando o objeto cliente (Ciente cliente = new Clietne()) na sua classe Conta. Mas o código que você passou parece estar faltando algo. Qual é a relação entre Conte e Cliente? Acho que você deveria criar a conta passando o cliente como parâmetro no constructor, ou o contrário, mas um deve ter referência para o outro.

Assim funciona:

public class SacaEDeposita {
	 public static void main(String [] args){
// 		criando o cliente e dando um nome
		Cliente client = new Cliente();
//		Criando conta
		Conta minhaConta = new Conta(client);

		client.setNome("DUKE");
		minhaConta.setSaldo(1000);
		minhaConta.setLimite(3000);
//		Saca 200 reais
		minhaConta.Saca(200);
//		Deposita 200 reais
		minhaConta.Deposita(500);
		System.out.println(minhaConta.getLimite()+minhaConta.getSaldo());
//		Imprime nome e saldo do proprietário da conta
		minhaConta.imprimeBanco();
		} 
}
public class Conta {
	private int numero;

	Cliente cliente;

	private double saldo;

	private double limite;
	
	public Conta(Cliente cliente){
		this.cliente = cliente;
	}

	public double getSaldo() {
		return this.saldo;
	}

	public void setSaldo(double saldo) {
		this.saldo = saldo;
	}

	public double getLimite() {
		return this.limite;
	}

	public void setLimite(double limite) {
		this.limite = limite;
	}

	public void imprimeBanco() {
		System.out.println("Essa conta é do banco J e o saldo da conta do(a)"
				+ " senhor(a) " + cliente.getNome() + " é de: " + getSaldo());
	}

	public boolean Saca(double valor) {
		if (this.saldo < valor) {
			return false;
		} else {
			this.saldo = this.saldo - valor;
			return true;
		}
	}

	public int getNumero() {
		return this.numero;
	}

	public void setNumero(int number) {
		this.numero = number;
	}

	public void Deposita(double quantia) {
		if (quantia <= 0) {
			System.out.println("Não é possivel creditar o valor");
		} else {
			this.saldo += quantia;
		}
	}

	public void transfere(Conta destino, double valor) {
		if (this.saldo < valor && (this.saldo + this.limite) < valor) {
			System.out.printf("%2ds", "Saldo insuficiente",
					(this.saldo + this.limite));
		}
		if (this.saldo < valor && this.limite >= valor) {
			System.out
					.println("Transferência consedida, porém o seu limite especial"
							+ " no banco passou a ser de de "
							+ (this.limite - valor));
		}
	}
}
public class Cliente {
	
	private String nome;

	public String getNome() {
		return nome;
	}

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


}

:smiley:
Ok
Muito obrigado pela ajuda.
De fato estava faltando o parametro client no construtor, e eu também havia esquecido de mandar a classe Cliente.
Já rodei e funcionou, após eu ter instanciado o objeto cliente.

Rafael.