Нестатическая переменная, на которую нельзя ссылаться из статического контекста при создании объекта

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);
Другие вопросы по тегам