Объекты в Java
Напишите класс с именем Chip в Chip.java с методом beep, который печатает ok. На этой странице метод не static. Во втором файле Bench.java постройте один chip через Chip c = new Chip();, затем вызовите c.beep();. Скомпилируйте оба файла и запустите java Bench. Экран должен показать одну строку: ok. Слово new строит объект из класса. Переменная c держит этот объект. Вы вызываете beep на c, а не на голом имени класса. Этот построенный объект — и вызов, который его использует — то, чему учит эта страница.
Один объект из класса
Класс по-прежнему именованный тип. Объект — значение, построенное из этого типа. Строка new Chip() просит Java построить это значение. Вы сохраняете его в переменной типа Chip, затем используете переменную, чтобы добраться до методов, которые принадлежат каждому объекту.
Сначала создайте Chip.java. Строка public class — public class Chip. Не оставляйте старое имя класса Badge или Desk в этом файле. Внутри фигурных скобок напишите void beep() — без слова static в этом заголовке. Тело — одна печать: System.out.println("ok");. Оставьте void. Метод не возвращает число. В Chip.java на этой странице нет main. Сохраните файл перед компиляцией.
public class Chip {
void beep() {
System.out.println("ok");
}
}
Bench строит chip, затем вызывает beep
Создайте Bench.java в той же папке. Строка public class — public class Bench. Внутри main напишите две строки: сначала Chip c = new Chip();, затем c.beep();. Первая объявляет переменную c типа Chip и заполняет её новым объектом. Вторая вызывает beep на этом объекте. Точка стоит после имени переменной, а не только после имени класса.
public class Bench {
public static void main(String[] args) {
Chip c = new Chip();
c.beep();
}
}
Из папки, где лежат оба файла, выполните javac Chip.java Bench.java. Можно сначала скомпилировать Chip.java, потом Bench.java, когда оба файла готовы. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем выполните java Bench — не java Bench.java и не java Chip. Уберите окончание .java из команды запуска. Стартуйте класс, который держит main. Те же команды работают в Windows и macOS.
Программа должна напечатать одну строку и остановиться: ok. Она не должна ждать ввода. Если терминал ждёт клавиатуру, в каком-то файле ещё остался вызов nextLine из старого упражнения. Удалите его и оставьте Chip c = new Chip(); плюс c.beep(); в Bench, с beep в Chip.
Пройдите запуск один раз. Java начинает с Bench.main. Выражение new Chip() строит объект. Этот объект сохраняется в c. Вызов c.beep() входит в beep для этого объекта. Метод печатает ok и возвращается. Затем Bench заканчивается. Строка экрана пришла из метода объекта после того, как new создал объект.
Думайте о классе как о чертеже на диске, а об объекте — как о построенной детали в памяти для этого запуска. Чертёж компилируете один раз. Каждое new Chip() строит ещё одну деталь. Переменная именует деталь, чтобы следующие строки могли до неё добраться. Без этого имени на этой странице не остаётся ручки для beep.
Почему вызов использует c, а не Chip один
На странице классов static-метод можно было вызвать как Badge.show() с именем типа. Здесь у beep нет слова static. Java сначала ждёт объект. Написание Chip.beep(); без объекта не подходит к этой форме для начинающих. Стройте через new, держите результат в переменной, затем вызывайте через эту переменную.
Если написать только new Chip(); и никогда не сохранить, объект всё равно построен, но имени для вызова beep нет. На этой странице держите переменную: Chip c = new Chip(); затем c.beep();. Переменная — путь к объекту после завершения new.
Оставшееся static-демо может запутать папку. Файл, который всё ещё вызывает Badge.show();, — форма предыдущего урока. Для этой страницы держите Chip и Bench и строку new. Здесь Badge не нужен.
Два объекта, два beep
Можно построить больше одного объекта из одного класса. Каждое new Chip() делает отдельный объект. Каждый объект может выполнить beep сам. Текст класса общий; объекты — не одно и то же значение.
public class Bench {
public static void main(String[] args) {
Chip a = new Chip();
Chip b = new Chip();
a.beep();
b.beep();
}
}
Скомпилируйте и запустите снова: javac Chip.java Bench.java, затем java Bench. Экран должен показать две строки: ok, потом ok. Первая пришла от a. Вторая от b. Обе использовали один и тот же текст метода beep в Chip, но каждый вызов шёл на другом объекте, построенном через new.
Если экран показывает только одно ok, проверьте, что оба вызова на месте и обе переменные построены через new. Написание Chip b = a; не строит второй объект; оно заставляет b ссылаться на тот же объект, что и a. Эта идея ждёт следующих страниц. На этой странице используйте два выражения new Chip(), когда нужны два объекта.
Что эта страница оставляет для fields
Эта страница ещё не хранит число или слово внутри chip. Поля — имена, которые держат данные на каждом объекте — следующая страница. Здесь объект существует после new, а метод экземпляра beep только печатает. Этого достаточно, чтобы увидеть разделение класса как типа и объекта как построенного значения.
Можно переименовать переменную с c на unit: Chip unit = new Chip(); затем unit.beep();. Экран остаётся ok, когда тело метода всё ещё печатает это слово. Имя переменной ваше; имя типа Chip и выражение new Chip() должны по-прежнему совпадать.
Если javac говорит, что не находит символ Chip при компиляции Bench.java, проверьте, что Chip.java лежит в той же папке и строка класса действительно говорит public class Chip. Если запуск ничего не печатает, подтвердите, что main всё ещё вызывает c.beep(); после строки new и что в beep всё ещё есть println.
Перед fields
Вы можете написать Chip с void beep(), построить объект через Chip c = new Chip(); и вызвать c.beep(); из Bench. Скомпилируйте оба файла и запустите java Bench. Экран показывает ok. Второе new Chip() строит ещё один объект, который может beep сам. Следующая страница — fields; там каждый объект начинает держать свои сохранённые данные.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху