Как вызвать нестатический метод в статическом в java

Вызов нестатического метода в основном статическом методе в Java

Итак, я вызываю метод, определенный в основном методе того же класса. Я ссылаюсь на вызываемый метод с помощью ключевого слова this. Почему я не могу вызвать этот нестатический метод, как показано ниже, в статическом основном методе?

Соответствующий, но немного другой вопрос, по выбору дизайна, имеет ли смысл создать отдельный класс для реализации логики. По сути, для простоты у основного класса должен быть только основной метод. Любые идеи будут оценены по достоинству.

7 ответов

Потому что this нестатичен. this является экземпляром , и вы не можете ссылаться на переменные экземпляра в статическом методе, поскольку static означает «один для всего класса».

Вы должны сделать метод hasAllUniqueChars static (например, static boolean hasAllUniqueChars(String input) ), чтобы вы могли

Или просто (поскольку вы уже в классе)

Вы также можете оставить его нестатичным и сделать следующее:

В методе экземпляра или конструкторе this является ссылкой на текущий объект, которым является non-static . Вы не можете использовать экземпляр non-static для метода static .

Либо создайте экземпляр класса, у которого есть основной метод (возможно, в самом main ()), и вызовите метод для него.

System.out.println (новый UniqueChars (). HasAllUniqueChars (ввод));

Или сделайте hasAllUniqueChars () статическим методом.

Метод hasAllUniqueChars не статичен. Чтобы сделать его статичным, вы должны поставить static перед именем boolean , например static boolean hasAllUniqueChars . Статическим методам не нужны экземпляры, чтобы их можно было вызывать. Таким образом, вы бы назвали это как UniqueChars.hasAllUniqueChars() . если вы не хотите, чтобы метод был статическим, вам нужно будет создать новый экземпляр класса UniqueChars , а затем вызвать его. new UniqueChars().hasAllUniqueChars() , как указывали другие.

Используйте этот код:

Потому что в статическом методе нет this , потому что this относится к текущему экземпляру (например, созданному объекту этого класса).

Для статических методов нет экземпляра: поэтому они называются статическими методами. Они живут на уровне класса и не связаны ни с одним экземпляром.

Вы должны либо (а) создать экземпляр и вызвать на нем метод экземпляра, либо (б) сделать метод статическим и не беспокоиться. Если классу не требуется какое-либо состояние, зависящее от экземпляра, можно также сделать его статическим, например, служебный метод.

Вы можете использовать this только в экземпляре объекта.

Итак, вам нужно либо создать объект UniqueChars, либо сделать hasAllUniqueChars статическим

Обращение к не статическому методу класса из статического метода

Добавлено через 2 минуты
Стоп. Оно и так работает.
Не знаю почему, но работает.

Добавлено через 8 минут
Короче запутался я ))

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp.

Обращение к методу класса находящийся в интерфейсе из статик метода
С праздниками форумчане! У меня есть два файла, один с мейном второй с Персонами. В мейне читаю с.

Обращение к возможно неопределенному методу addEventListener через ссылку статического типа Class
у меня есть анимация и я попыталась сделать на ней кнопки делала все по инструкции. но вот при.

Обращение из статического метода
Очень интересно вот что: В уроке 120 проекта startandroid есть статический метод в классе.

Как вызвать нестатический метод в статическом в Java?

Здравствуйте! Создал нестатический метод logger . Он считывает стэк ошибки , вызываемый при каком-либо Exception ‘е , и выводит в графический интерфейс. Так как этот метод нестатический , вызвать его из статического метода нельзя. Объявить его статичным нельзя, так как я использую методы setContentPane и setSize , которые также не статичны. Что посоветуете сделать?

В статическом методе создать класс и вызвать из созданного класса нестатический метод. Примерно так:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками java ооп или задайте свой вопрос.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.26.40833

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *