Где размещать переменные: класс или метод?
Внутри метода размещаются переменные, которые необходимы и будут использоваться только во время выполнение этого метода. Внутри класса размещаются переменные, которые говорят о состоянии объекта, порожденного из этого класса. И как правило эти переменные делают приватными + создают геттеры и сеттеры для них. В вашем примере, размер кошки говорит о ее "состоянии", поэтому разумно хранить переменную в классе.
public class Cat {
    private int size;
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        if(size <= 9) throw new IllegalArgumentException("Cat size should be more than 9");
        this.size = size;
    }
}
#1 от #2 отличаются только явной инициализацией переменной во втором случае. В первом - она инициализируется при создании объекта.
#3 и #4 сами по себе вполне корректны, но бессмыслены: ht, я так понимаю -  рост кошки. Нет никакого смысла переносить эту переменную внутрь метода. Метода может и не быть, а рост, видимо, быть должен. Кроме того, если бы в классе Cat были еще какие-то методы (например int getHeight() ),  то они не имели возможность получить доступ к этой переменной в последних случаях.
Вот еще пример:public class Cat {
    int height;

    public int getHeight() {
        return height;               //Все ок переменную видно.
    }

    public void setHeight(int height) {
        this.height = height;    //Все ок переменную видно. this.height - эта переменная, обозначенная в классе.
    }

    public void setInternalVar(int var) {
        int internalVar = var;   //Все ок, но переменная скрыта внутри метода
    }
    
    public int getInternalVar() {
        return internalVar;   // !!Не компилируется  - переменная internalVar не определена внутри класса.
    }
}