Estava aprendendo a criar classes e fui criar a minha, o problema é quando eu fui instanciar minha classe na main e fui compilar apareceu essa mensagem “non-static variable this cannot be referenced from a static context” . Alguém para me ajudar ?
import java.util.Scanner;
public class a{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
for(int i=0;i<3;i++) {
String nome=input.nextLine();
Pessoa p=new Pessoa();
p.setNome(nome);
p.mostrar();
}
}
class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome=nome;
}
public Pessoa() {
this.nome="";
}
public void setNome(String nome) {
this.nome=nome;
}
public String getNome() {
return this.nome;
}
public void mostrar() {
System.out.println("Nome: "+this.nome);
}
Vc criou Pessoa como uma classe aninhada não-estática. Sendo assim, vc não pode instanciá-la dentro de um método estático como vc fez.
Para contornar isso há 2 coisas que vc pode fazer:
1. Tornar Pessoa uma classe aninhada estática assim:
public class Programa {
public static void main(String... args) {
Pessoa pessoa = new Pessoa("João");
pessoa.mostrar();
}
static class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome = nome;
}
public void mostrar() {
System.out.println("Nome: " + this.nome);
}
}
}
2. Instanciar primeiro a classe Programa e depois instanciar a classe Pessoa.
public class Programa {
public static void main(String... args) {
Programa programa = new Programa();
Pessoa pessoa = programa.new Pessoa("João");
pessoa.mostrar();
}
class Pessoa {
private String nome;
public Pessoa(String nome) {
this.nome = nome;
}
public void mostrar() {
System.out.println("Nome: " + this.nome);
}
}
}