public class Duck {
int duckCount = 0;
public Duck(){
duckCount++;
}
}
public class Test {
public static void main(String[] args) {
Duck duck = new Duck();
Duck duck1 = new Duck();
System.out.println(duck.duckCount);
System.out.println(duck1.duckCount);
}
}
Здесь в консоли 2 раза выйдет единица (1):
1
1
Не пойму в чем суть если переменную duckCount не помечаем static то значение в консоле выходит 1 у всех, а если static то 2 в данном примере
public class Duck {
static int duckCount = 0;
public Duck(){
duckCount++;
}
}
public class Test {
public static void main(String[] args) {
Duck duck = new Duck();
Duck duck1 = new Duck();
System.out.println(duck.duckCount);
System.out.println(duck1.duckCount);
}
}
А тут выйдет в консоле:
2
2
Из-за статика не пойму почему
Как я правильно понял если переменная не статичная значит для каждого экземпляра класса будет своя переменная duckCount, а если статичная то общая для всех экземпляров, но в данном примере зачем тогда создавать экземпляры класса если вызываем нашу статичную переменную через Класс.переменная?
Давайте разберем Ваш пример.
public class Duck {
int duckCount = 0;
public Duck(){
duckCount++;
}
}
Тут у нас есть класс, где есть переменная duckCount = 0, и есть конструктор счетчик Duck
Duck duck = new Duck();
Duck duck1 = new Duck();
System.out.println(duck.duckCount);
System.out.println(duck1.duckCount);
Тут мы создаем два экземпляра нашего класса, и при этом вызывается конструктор по умолчанию, где мы к новой переменной 0 - применяем счетчик +1
В таком же примере, только со статичной переменной происходит все то же самое, только вот новая переменная не создается, а вызывается та же, к которой все равно применяется конструктор(два раза), ведь мы создали экземпляр класса. Зачем же тогда создавать экземпляр класса? Тут ответить мне сложно, т.к. это порой требует задача, со временем поймете.
И настоятельно рекомендую читать книгу, к примеру Java-8-Полное руководство, автор Шилдт
https://ideone.com/nP27RE
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
static class Duck {
static int duckCount = 0;
int duckIndex;
public Duck(){
duckIndex = ++duckCount;
}
}
public static void main(String[] args) {
Duck duck = new Duck();
Duck duck1 = new Duck();
System.out.println(duck.duckIndex);
System.out.println(duck1.duckIndex);
}
}
Продвижение своими сайтами как стратегия роста и независимости