Если есть статья или видео, любая информация о том, как правильно делать? буду благодарен за помощь. Хочется сразу делать "как положено", а не как получится) p.s. С какой целью интересуюсь: в первом варианте мы не сможем в int age ввести "asd", будет ошибка. во втором варианте строка же примется и только потом(при создании объекта) компилятор поймет что строка age содержит "sdaf". Условно говоря мы можем считать строку и сразу задать ей значение int используя parceInt.
String name = reader.readLine();
            if (name == null || name.isEmpty()) {
                break;
            }
            int age = Integer.parseInt(reader.readLine());
Во втором варианте мы сканируем строки, и при создании объекта парсим строки в int.
String age = reader.readLine();
 Cat cat = new Cat(name, Integer.parseInt(age), Integer.parseInt(weight), Integer.parseInt(tailLength));