Нестатическая переменная, на которую нельзя ссылаться из статического контекста при создании объекта
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class n00686349
{
public static void main(String args [])throws FileNotFoundException
{
String control;
FileInputStream fis = new FileInputStream("C:/Users/Steven Fowler/Desktop/data.txt");
Scanner scanner = new Scanner(fis);
vehicle one = new vehicle();
while(scanner.hasNextLine())
{
control = scanner.nextLine();
if (control.equals("vehicle") == true)
{
new vehicle();
one.setOwner(control);
}
else if (control.equals("car") == true)
{
System.out.println("You doing alright");
}
else if (control.equals("truck") == true)
{
System.out.println("You doing alright");
}
else if (control.equals("bicycle") == true)
{
System.out.println("You doing alright");
}
else if (control.equals("american car") == true)
{
System.out.println("You doing alright");
}
else if (control.equals("foreign car") == true)
{
}
}
scanner.close();
}
public class vehicle
{
private String ownersName;
private String address;
private String phone;
private String email;
public vehicle()
{
this.ownersName = ("none");
this.address = ("none");
this.phone = ("none");
this.email = ("none");
}
public void setOwner (String ownersName)
{
this.ownersName = ownersName;
}
public void setAddress (String address)
{
this.address = address;
}
public void setPhone (String phone)
{
this.phone = phone;
}
public void setEmail (String email)
{
this.email = email;
}
public String ownersName()
{
return ownersName;
}
public String address ()
{
return address;
}
public String phone ()
{
return phone;
}
public String email()
{
return email;
}
}
class car extends vehicle
{
private boolean convertible;
private String color;
public car()
{
convertible = false;
color = ("none");
}
public void setConvertible (boolean convertible)
{
this.convertible = convertible;
}
public void setColor (String color)
{
this.color = color;
}
public boolean convertible ()
{
return convertible;
}
public String color ()
{
return color;
}
}
Выше приведен мой код для класса, который построчно считывает входные данные из файла и обрабатывает информацию в объекте (не завершено, все еще строится). Я понимаю, почему вы обычно получаете это сообщение об ошибке. Вы не можете получить доступ к методам экземпляра, не создав сначала объект, не назначив ссылку на объект, а затем вызвав методы объектов. Эта ошибка появляется в строках 16 и 23, когда я пытаюсь создать новый объект. Так что я немного дурачился с этим, и если я изменю классную машину на статическую, это сработает. Поэтому мои вопросы для этого таковы: меняется ли класс на статический, меняются ли все переменные статическими, и поэтому он работает? Каковы последствия для этого?(Создание статического класса, который создает экземпляры), и я использую переменную this.variable в своем классе транспортного средства, а затем пытаюсь расширить этот класс, вызывая эту проблему? Я не очень знаком с использованием этого ключевого слова.
Спасибо
3 ответа
Сделайте свой класс автомобиля статичным, как это:
public static class vehicle
Создание статического класса класса Vehicle не имеет большого значения. Это просто означает, что у внутреннего класса не будет никакого способа ссылаться на вещи из внешнего класса, чего вы в любом случае не делаете.
Создание всех членов класса "Автомобиль" означает, что все автомобили имеют одну копию этих свойств. Например, у всех автомобилей будет один и тот же владелец.
Что я, вероятно, сделал бы, это переместить все из main
метод к новому методу. (Назови это run
или что-то типа того.)
Затем измените main на:
public static void main(String[] args) {
n00686349 obj = new n00686349();
obj.run();
}
Вы не назначаете свой новый автомобиль () one
ссылка. Изменить это
new vehicle();
one.setOwner(control);
в
one = new vehicle();
one.setOwner(control);