2013-12-07 5 views
-1

Я знаю, что этот вопрос задавали много раз, и я читал множество ответов, но я не могу понять, как исправить мою проблему. Вот мой код:Нестационарная переменная не может ссылаться на статический контекст java

public class Circle 
{ 
    public int diameter; 
    public int xPosition; 
    public int yPosition; 
    public String color; 


    public Circle() 
    { 
     diameter = 30; 
     xPosition = 20; 
     yPosition = 60; 
     color = "blue"; 
    } 

    public void toString() 
    { 
     System.out.println("The diameter of the circle is " + Circle.diameter); 
     System.out.println("The x position of the circle is " + Circle.xPosition); 
     System.out.println("The y position of the circle is " + Circle.yPosition); 
     System.out.println("The colour of the circle is " + Circle.color); 
    } 


    public static void main(String[] args) 
    { 
     Circle c1 = new Circle(); 
     c1.toString(); 

    } 

} 

я первоначально решить проблему путем изменения:

public class Circle 
{ 
    public int diameter; 
    public int xPosition; 
    public int yPosition; 
    public String color; 
} 

в

public class Circle 
{ 
    public static int diameter; 
    public static int xPosition; 
    public static int yPosition; 
    public static String color; 
} 

Хотя это работа, я чувствую, что это не очень хороший способ сделать Это. Я прочитал кое-что о переменных экземпляра, но я не уверен, как это сделать.

Спасибо.

+1

Обратите внимание, что 'public void toString()' - очень плохое имя метода. Вместо этого вы должны переопределить метод 'toString()' из класса 'Object'. I.e 'public String toString()' и вернуть строку, описывающую ваш объект. –

ответ

7

Проблема с с toString() функции:

System.out.println("The diameter of the circle is " + Circle.diameter); 
    System.out.println("The x position of the circle is " + Circle.xPosition); 
    System.out.println("The y position of the circle is " + Circle.yPosition); 
    System.out.println("The colour of the circle is " + Circle.color); 

Вы ссылаетесь нестатический переменной со ссылкой класса. Просто замените Circle на this. Взгляните Understanding Instance and Class member Аркадам

Edit:

Как ни странно, это не позволить мне использовать имя ToString(), потому что "ToString() в Кругу не может переопределить ToString() в объекте". Он работает с любым другим именем, хотя

да потому, toString() метод объявлен в Object класса, который является супер-класс для всех из класса Java. Этот метод имеет тип возврата с String, где вместо этого вы используете void. Поэтому либо вам придется изменить тип возврата на String, либо изменить имя функции на что-либо другое.

+0

Или просто 'диаметр' и т. Д., Что эквивалентно' this.diameter'. –

+0

@PatriciaShanahan, спасибо, но не ссылается на экземпляр с 'this' является предпочтительным, как обычный подход. – Sage

+0

@JaAnTr, пожалуйста, отредактируйте edit – Sage

0

Поскольку статические переменные и методы связаны с самим классом, а не его экземпляры так они называли, используя имя класса, как:

================= ================================================== ==============

class ABC{ 
public static int a; 

public void A() 
{ 
    System.out.println("The value of a is: "+a); 
} 

public class test 
{ 
    ABC.a = 10; 
    ABC.A(); 
} 

Вам не нужно менять переменные на статические переменные.

Просто вызовите переменные, используя оператор this.

Смежные вопросы