2015-12-28 5 views
2

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

Что я не понимаю о создании объектов Java?

public class Function { 

private static double coefficient; 
private static int startX; 
private static int endX; 
private static int exponent; 


protected Function(double coefficient, int startX, int endX, int exponent) { 
    this.coefficient = coefficient; 
    this.startX = startX; 
    this.endX = endX; 
    this.exponent = exponent; 

    } 

    public static void main(String[] args) { 

    Function func1 = new Function(2, 1, 2, 2); 

    Function func2 = new Function(0,1,2,1/3); 

    // now func1 properties are the same as func2 
     } 
    } 
} 
+0

Почему вы ставите поля данных? –

+0

Я ссылаюсь на них в методах далее в классе Function. Если я удаляю static, я получаю ошибку: «не может статически ссылаться на нестатическое поле» –

+0

@ theActuary: вы всегда можете ссылаться на поля в функции одного и того же класса, не будучи статическими. –

ответ

0

Измените код на ниже

public class Function { 

private double coefficient; 
private int startX; 
private int endX; 
private int exponent; 


protected Function(double coefficient, int startX, int endX, int exponent) { 
    this.coefficient = coefficient; 
    this.startX = startX; 
    this.endX = endX; 
    this.exponent = exponent; 

    } 

    public static void main(String[] args) { 

    Function func1 = new Function(2, 1, 2, 2); 

    Function func2 = new Function(0,1,2,1/3); 

    // now func1 properties are the same as func2 
     } 
    } 
} 

код, который вы сделали, вы делаете static переменные, которые создаются только один раз для приложения. Таким образом, каждый раз, когда он переопределяет значение.

0

Статические переменные являются общими для всех объектов, поэтому вы получаете одинаковое значение для обоих объектов. Удалите ключевое слово static из полей класса.

Для примера.

private double coefficient; 
... 
0

Ваших объекты кажется иметь то же значение, потому что ваши атрибуты static, они прикреплены к классу, а не в объектов.

В общем, конструктор объекта не должен манипулировать переменными-членами static.

0

Вы объявляете свои поля как static, поэтому они «разделяются» всеми экземплярами Function. Это по определению.

Вместо этого просто удалите модификатор static, и он будет работать нормально. Вы можете получить доступ к нестационарным членам внутри всех методов класса, без проблем!

EDIT: То же самое касается static методов, просто удалите модификатор static, если они должны работать на не статические члены.

0

коэффициент, StartX, EndX и показатель все поля вашего класса являются статическими. Статические переменные являются переменными класса, что означает, что они разделяются всеми экземплярами вашего класса. Функция

Именно по этой причине оно показывает самое последнее значение полей данных.

Чтобы изменить код просто удалить статический ключевое слово из всех полей данных, которые делают их в качестве переменной экземпляра, а затем каждый экземпляр вашего класса будет иметь свою собственную копию коэффициента, StartX, EndX и exponent

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