非静态变量在构造对象时无法从静态上下文引用

时间:2014-10-23 02:38:39

标签: java static compiler-errors non-static

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;
   }
}

上面是我的一个类的代码,它逐行读取文件中的输入并将信息处理成一个对象(Not complete still building)。我明白为什么你会得到这个错误信息。您无法在不首先创建对象,分配对象的引用,然后调用对象方法的情况下访问实例方法。每当我尝试创建一个新对象时,就会在第16行和第23行弹出此错误。所以我一直在搞这个,如果我把班级车改为静态,那就行了。所以我的问题是:将类更改为静态,将所有变量更改为静态,这就是它的工作原理吗?对此有什么影响?(使一个类静态创建实例)并且我在我的车辆类中使用this.variable然后尝试扩展该类导致此问题?我对使用this关键字并不十分熟悉。

由于

3 个答案:

答案 0 :(得分:1)

使Vehicle内部类静态不是什么大问题。它只是意味着内部类没有任何方法可以引用外部类中的东西,但是你还没有这样做。

使Vehicle的所有成员静态意味着所有车辆共享这些属性的一个副本。例如,所有车辆都拥有相同的所有者。

我可能会做的是将main方法中的所有内容移动到新方法。 (称之为run或类似的东西。)

然后将main更改为:

public static void main(String[] args) {
    n00686349 obj = new n00686349();
    obj.run();    
}

答案 1 :(得分:1)

让你的车辆类静态如下:

public static class vehicle

答案 2 :(得分:0)

您不能将新车辆()分配给one参考。改变这个

new vehicle();
one.setOwner(control);

one = new vehicle();
one.setOwner(control);