Ответ 1
Источником вашей путаницы может быть то, что слово "статический" на английском языке, и это значение на Java только слабо связано.
Переменная, определенная в классе Cat в "нормальном" способе, может упоминаться как переменная экземпляра.
class Cat {
int weight;
}
Каждый раз, когда вы создаете новый объект типа Cat, вы создаете новую копию переменной "weight". Если вы создаете 10 объектов типа Cat, каждая из них имеет собственную копию весовой переменной.
"Статическая" переменная может рассматриваться как переменная уровня класса, в отличие от переменной экземпляра. Статическая переменная имеет только одну копию и относится к классу Cat, а не к одной копии для каждого объекта типа Cat.
class Cat {
static String speciesName;
int weight;
}
Здесь, независимо от того, сколько объектов типа Cat мы создаем, существует только одна копия видаName.
Если статическая переменная также является "окончательной", эта копия переменной является единственной частью хранилища, которая не может быть изменена. Если переменная "вес" была окончательной в приведенном выше примере, было бы 10 единиц хранения, которые нельзя было бы изменить - по одному для каждого объекта типа Cat, который мы создали.