static в Java
Напишите класс Tag в Tag.java с методом static вида static void ping(), который печатает ok. В Yard.java из main вызовите Tag.ping(); и на этой странице не пишите new Tag(). Скомпилируйте оба файла и запустите java Yard. Экран должен показать одну строку: ok. Метод принадлежит имени класса Tag, а не одной переменной объекта. Вызов через имя класса — то, чему учит эта страница.
Метод на имени класса
На странице методов экземпляра после new Jar(3) вы писали j.bump(). Тому вызову нужен был объект. Методу static объект не нужен. Вы пишете Tag.ping(); с именем класса. Java выполняет этот метод без предварительного создания объекта Tag на этой странице.
Сначала создайте Tag.java. Строка public class — public class Tag. Не оставляйте здесь старое имя класса Jar или Tin. Внутри фигурных скобок напишите один метод:
static void ping() { System.out.println("ok"); }
В первом демо нет поля и нет конструктора. В Tag.java нет main. Сохраните перед компиляцией. Слово static стоит в заголовке метода перед void. Без static поздний вызов Tag.ping(); из Yard не совпадёт с формой метода экземпляра, которую эта страница хочет.
public class Tag {
static void ping() {
System.out.println("ok");
}
}
Yard вызывает Tag.ping
Создайте Yard.java в той же папке. Его строка public class — public class Yard. Внутри main напишите один вызов: Tag.ping();. На этой странице не пишите Tag t = new Tag();. Не делайте t.ping(); путём урока. Имени класса перед точкой достаточно.
Держите Yard как класс, в котором есть main. Не кладите main внутрь Tag для этого урока. Если в папке ещё лежит оставшийся файл Desk со страницы методов экземпляра, не запускайте для этого урока java Desk — после компиляции Tag.java и Yard.java выполните java Yard.
public class Yard {
public static void main(String[] args) {
Tag.ping();
}
}
Из папки, где лежат оба файла, выполните javac Tag.java Yard.java. Вы можете сначала скомпилировать Tag.java, затем Yard.java, когда оба готовы. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем запустите java Yard — не java Yard.java и не java Tag. Уберите окончание .java из команды запуска. Запускайте класс, в котором есть main. Те же команды работают в Windows и в macOS.
Программа должна напечатать одну строку и остановиться: ok. Она не просит вас вводить текст. Если терминал ждёт ввода с клавиатуры, в каком-то файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте в Yard Tag.ping();, а в Tag — static void ping.
Пройдите запуск один раз. Java начинает с Yard.main. Вызов Tag.ping() находит метод static на классе Tag и выполняет его тело. Тело печатает ok. Объект не создавался. Экран показывает ok. Ничего другого печатать не должно. Если вы видите 4 или 5, вы всё ещё запускаете старую программу Desk из урока bump.
Если внутри Yard.main вы напишете ping(); без Tag. впереди, javac в этой форме откажет. Методу static по-прежнему нужно имя его класса (или аккуратный стиль import, которым вы ещё не пользуетесь). Держите Tag.ping();. Если оставите void без static, тогда Tag.ping(); — неверный вид вызова для метода экземпляра — верните static. Заголовок должен выглядеть как static void ping(), а не просто void ping(), и не static int ping() для этого демо печати.
Tag.ping и j.bump рядом
Одна короткая таблица держит две формы вызова ясными.
📊 static vs instance call
| Вызов | Сначала нужен объект? |
|---|---|
Tag.ping(); |
нет — имени класса достаточно |
j.bump(); |
да — после Jar j = new Jar(3); |
static void ping() |
метод на классе |
void bump() |
метод на каждом объекте |
Таблица только напоминание. Строка, которую вы держите на этой странице, — Tag.ping(); в Yard, с static void ping() в Tag. |
Сравнение с методами экземпляра
На странице методов экземпляра j.bump() менял fill у одного jar. Это по-прежнему работает. Эта страница поле не меняет. Она только печатает ok из метода static, чтобы вы увидели вызов по имени класса. Оставшееся демо Jar j = new Jar(3); j.bump(); — другой урок. Для этой страницы держите Tag, Yard и Tag.ping();.
В другие дни вы всё ещё можете строить объекты. Этот урок намеренно выбирает путь static. Не смешивайте j.bump() и Tag.ping() в одном демо Yard на этой странице. Одного ясного пути достаточно: static на методе, имя класса перед вызовом, печать ok. Когда позже понадобятся оба стиля в одной программе, держите каждый вызов честным — объект перед методами экземпляра, имя класса перед методами static — чтобы читатель видел, какой вид вы имели в виду.
Для этого вызова new Tag не нужен
Потому что ping — static, Yard не выделяет объект Tag перед вызовом. Написать Tag t = new Tag(); и затем t.ping(); во многих настройках для метода static может скомпилироваться, но это не форма, которой учит эта страница. Оставайтесь только с Tag.ping();. Если экран показывает 4 или 5, всё ещё работает старое демо Desk bump — перейдите на java Yard.
Если javac говорит, что не находит символ ping на Tag, проверьте, что в заголовке метода есть static и что оба файла лежат в одной папке. Если java Tag запускается и ничего полезного не делает, вы стартовали не тот класс — стартуйте Yard, в котором есть main.
Что остаётся для access
Эта страница использует public-класс и метод static с пакетной видимостью в той же папке. Более поздняя страница — access — покажет слова вроде public и private на членах. Здесь оставайтесь с вызовом static. Не изобретайте на этой странице private static, если вы его ещё не знаете; цель урока — Tag.ping(); с static void ping().
Когда в папке ещё лежат Jar.java или Desk.java, не трогайте их или удалите только если они путают команду компиляции. После компиляции пары Tag и Yard с этого урока запустите java Yard.
Перед access
Вы можете написать в Tag static void ping() { System.out.println("ok"); } и из Yard без объекта вызвать Tag.ping();. Скомпилируйте оба файла и запустите java Yard. Экран показывает ok. Метод static выполнился на имени класса. Следующая страница — access, где вы контролируете, какие имена могут видеть другие классы.
Держите static на методе. Держите имя класса перед вызовом. Держите main в Yard. Эти три привычки — контрольная точка этой страницы перед тем, как идти дальше.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху