Dúvida: Erro de Compilação

Sou novato em Java.
Na hora de compilar ta dando o seguinte erro: Exception in thread “main” java.lang.NullPointerException
at Exercício2.PrincipalCarro.main(PrincipalCarro.java:23)

Qual foi o meu erro no código?

[code]package Exercício2;

public class Motor {
private String nome;
private int cilindros;

public void setNome(String n){
	nome = n;
}

public void setCilindros(int i){
	cilindros = i;
}

public String getNome(){
	return nome;
}

public int getCilindros(){
	return cilindros;
}

}

[/code]

[code]package Exercício2;

public class Carro {
private String nome;
private long ano;
private Motor motor;

public void setNome(String n){
	nome = n;
}

public void setAno(long i){
	ano = i;
}

public String getNome(){
	return nome;
}

public long getAno(){
	return ano;
}

public void setMotor(Motor motor){
	this.motor = motor;
}

public Motor getMotor(){
	return motor;
}

}
[/code]

[code]package Exercício2;

public class PrincipalCarro {

public static void main(String[] args) {
	Motor one = new Motor();
	one.setNome("V8");
	one.setCilindros(200);
	
	Motor two = new Motor();
	two.setNome("V6");
	two.setCilindros(150);
	
	Carro a = new Carro();
	a.setNome("Ferrari");
	a.setAno(2000);
	
	Carro b = new Carro();
	b.setNome("Porshe");
	b.setAno(2005);
	
	System.out.println("Carro: " + a.getNome() + " " + "Ano: " + a.getAno() + " Motor: " + a.getMotor().getNome());
	System.out.println("Carro: " + b.getNome() + " " + "Ano: " + b.getAno()  + " Motor: " + b.getMotor().getNome());
}

}
[/code]

Pra começar, isso é um erro de execução, não de compilação.

E se você prestou atenção (o que você obviamente não fez), seus carros estão sendo fabricados SEM motor, o que está causando esse erro :slight_smile:

Em primeiro lugar existe uma diferença entre erro de compilação e erro de execução. O seu caso é o último.

Agora quanto ao seu erro:

Eu não testei seu código tenho quase certeza de que o erro é que você está chamando um método do motor sem instancia-lo.

É um erro muito comum (eu mesmo já o fiz várias vezes). Existem várias formas de arrumar. A mais simples seria adicionar um construtor na classe Carro que não recebe nenhum parametro e dar um new no motor dentro desse construtor.

Isso porque quando você não inicia nenhum atributo do tipo objeto eles são automaticamente iniciados com null.

Sem contar que o nome do carro é “Porsche” (embora isso não cause nenhum erro de execução…)

em momento algum vc atribui os motores a seus devidos carros. ou seja vc tem os carros, tem os motores.
mas não há o vinculo entre eles !

exemplo:

Carro a = new Carro()
a.setMotor(one);

quando vc acessa a.getMotor() no seu codigo neste momento o motor é nulo ou seja por isso o erro java.lang.NullPointerException

Resolvido. Obrigado a todos :slight_smile: