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