Загрузка...

Поля в Java

Положите поле int с именем fill внутрь класса Cup в Cup.java. В Shelf.java постройте одну чашку через Cup c = new Cup();, сохраните число через c.fill = 3;, затем напечатайте это поле через System.out.println(c.fill);. Скомпилируйте оба файла и запустите java Shelf. Экран должен показать одну строку: 3. Поле держит данные на том одном объекте. Вы добираетесь до него через переменную, которая именует объект. Сохранение и чтение этого значения на объекте — то, чему учит эта страница.

Место для данных на объекте

На странице объектов beep только печатал. Он не хранил число на потом. Поле — имя, объявленное внутри класса, в котором каждый объект может держать своё собственное значение. После того как new построил объект, вы присваиваете поле через переменную объекта, затем можете его напечатать.
Сначала создайте Cup.java. Строка public class — public class Cup. Не оставляйте здесь старое имя класса Chip или Badge. Внутри фигурных скобок класса напишите одну строку поля: int fill;. В этом первом блоке нет метода. В Cup.java на этой странице нет main. Сохраните перед компиляцией.

Cup with fill field

java
public class Cup {
    int fill;
}

Shelf присваивает fill, затем печатает

Создайте Shelf.java в той же папке. Строка public class — public class Shelf. Внутри main напишите три строки по порядку: Cup c = new Cup();, затем c.fill = 3;, затем System.out.println(c.fill);. Первая строка строит объект. Вторая сохраняет 3 в fill этого объекта. Третья печатает сохранённое число.

Shelf sets and prints fill

java
public class Shelf {
    public static void main(String[] args) {
        Cup c = new Cup();
        c.fill = 3;
        System.out.println(c.fill);
    }
}

Из папки, где лежат оба файла, выполните javac Cup.java Shelf.java. Вы можете скомпилировать сначала Cup.java, затем Shelf.java, когда оба готовы. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем запустите java Shelf — не java Shelf.java и не java Cup. Уберите окончание .java из команды запуска. Запускайте класс, в котором есть main. Те же команды работают в Windows и в macOS.
Программа должна напечатать одну строку и остановиться: 3. Она не просит вас вводить текст. Если терминал ждёт ввода с клавиатуры, в каком-то файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте три строки выше в Shelf, с полем fill в Cup.
Пройдите запуск один раз. Java начинает с Shelf.main. new Cup() строит один объект и сохраняет его в c. Присваивание c.fill = 3 записывает 3 в поле этого объекта. println(c.fill) читает то же поле и печатает 3. Число на экране — значение, сохранённое на объекте, а не жёсткая печать строки вроде "ok".
Имя поля fill объявляется один раз в классе. Каждый объект, построенный из Cup, получает свой слот для этого имени. Когда вы пишете c.fill, вы сначала именуете объект, затем слот на этом объекте. Этот порядок — объект, затем поле — форма, которую держит эта страница.

Класс, объект и поле рядом

Прочитайте три имени один раз в небольшой таблице. Строка поля на этой странице всегда идёт через объект.

📊 class object field

Имя Что это на этой странице
Cup класс / тип в Cup.java
c один объект, построенный через new Cup()
c.fill int, сохранённый на этом объекте

Запись Cup.fill = 3; без объекта не совпадает с этой формой для начинающих. Поле принадлежит каждому объекту после new. Сначала постройте, затем присвойте через переменную. Запись только new Cup(); без сохранения результата тоже не даёт вам имени для fill. Держите Cup c = new Cup();, затем c.fill = 3;.
Оставшийся демо-пример объектов может запутать папку. Файл, который всё ещё вызывает c.beep(); с классом Chip, — предыдущий урок. Для этой страницы держите Cup и Shelf и поле fill. Здесь beep не нужен.
Если вы печатаете сам c через System.out.println(c);, экран не покажет чистое 3. Он печатает текст объекта по умолчанию. Чтобы увидеть сохранённое число, печатайте c.fill.

Две чашки держат отдельные fill

Вы можете построить два объекта из Cup. У каждого свой fill. Изменение одного не меняет другой.
В Shelf вы можете написать Cup a = new Cup(); и Cup b = new Cup();, затем a.fill = 2; и b.fill = 9;, затем напечатать a.fill и b.fill. После javac Cup.java Shelf.java и java Shelf экран должен показать 2 в одной строке и 9 в следующей. Оба объекта делят текст класса, который объявляет fill, но каждый объект держит своё число.
Если обе печати показывают одно и то же значение, а вы хотели два разных числа, проверьте, что вы присвоили оба поля и что не написали Cup b = a;. Эта строка заставляет b ссылаться на тот же объект, что и a, поэтому оба имени делят один fill. На этой странице используйте два выражения new Cup(), когда хотите два отдельных fill.
Для этой практики вам не нужен третий программный блок. Осторожно отредактируйте Shelf, перекомпилируйте и запустите снова. Затем можете вернуть блок с одной чашкой, если хотите первую форму викторины.

Что constructors добавят позже

Эта страница присваивает поле после new отдельной строкой: c.fill = 3;. Позже страница constructors покажет другой способ задать начальные значения в момент построения объекта. Здесь оставайтесь с простым полем и присваиванием после new. Не придумывайте метод-конструктор на этой странице.
Для полей, которым вы никогда не присваиваете, есть значения по умолчанию: поле int начинается с 0. Если напечатать c.fill до любого присваивания, экран может показать 0. Эта страница всё же учит присваиванию, которое вы пишете сами, поэтому в основном демо держите c.fill = 3; перед печатью.
Если javac не находит символ Cup при компиляции Shelf.java, проверьте, что Cup.java лежит рядом с Shelf.java и что строка класса — public class Cup. Если экран показывает 0, а вы ожидали 3, строка присваивания может отсутствовать или идти после печати — поставьте c.fill = 3; выше println(c.fill).

Перед constructors

Вы можете объявить int fill; внутри Cup, построить Cup c = new Cup();, присвоить c.fill = 3; и напечатать c.fill из Shelf. Скомпилируйте оба файла и запустите java Shelf. Экран показывает 3. Два объекта могут держать два разных fill. Следующая страница — constructors, где вы начинаете задавать значения в момент, когда new строит объект.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
6
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху