Пример 1 это хорошо. Пример 2 это зло. Почему? Здесь - ссылка из официальной документации. Таким образом, переменные static
предназначены для случаев, когда переменная не зависит от ее объекта.
Если вы когда-либо работали с javax.swing.JFrame
, вы, вероятно, использовали метод JFrame.setDefaultCloseOperation(int)
, где вы можете использовать JFrame.EXIT_ON_CLOSE
, который идеально подходит для читабельности кода. Эта переменная должна быть независимой от своего объекта.
Однако для примера, подобного вашим птицам, им не нужна статическая переменная. «Но удобнее просто увеличивать его вместо геттеров и сеттеров!»Ну, это плохо.
Например, если все лебеди откладывали ровно 1 яйцо, то для этого вы должны сделать переменную static
, вероятно: numberOfEggs = 1
как вы описали. Посмотрите на комментарий @ VGR.
class Example1 {
int eggs = 0;
public void layEgg(){
this.eggs++; // increases the eggs value for this object;
}
}
class Example2 {
static int eggs;
public void layEgg(){
eggs++;
}
}
import package.Example1;
class foo {
public static void main(String[] args){
Example1 A = new Example1();
Example2 B = new Example2();
A.layEgg(); // Increases the value of eggs for this object
B.layEgg();
System.out.println(A.eggs);
System.out.println(B.eggs); // Why is eggs static if it is called this way?
System.out.println(Example2.eggs); // Okay, but the variable is meant to
// be different from other Example2 objects.
B.layEgg();
System.out.println(Example2.eggs); // Perfect for final variables
System.out.println(B.eggs); // Why is eggs static?
}
}
Вывод:
1
1
1
2
2