Вопрос-ответ

Java: How To Call Non Static Method From Main Method?

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

Я изучаю java, и теперь у меня следующая проблема: у меня есть метод main, объявленный как

public static void main(String[] args) {

..... }

Внутри моего основного метода, поскольку он статический, я могу вызывать ТОЛЬКО другой статический метод!!! Почему?

Например: у меня есть другой класс

 public class ReportHandler {       
private Connection conn;
private PreparedStatement prep;
public void executeBatchInsert() { ....
} }

Итак, в моем основном классе я объявляю private ReportHandler rh = new ReportHandler();

Но я не могу вызвать ни один метод, если они не являются статическими.

Где это пошло не так?

РЕДАКТИРОВАТЬ: извините, мой вопрос таков: как "спроектировать" приложение, чтобы позволить мне вызывать другой класс из моей "начальной точки" (static void main).

Переведено автоматически
Ответ 1

Вам просто нужно создать экземпляр ReportHandler:

ReportHandler rh = new ReportHandler(/* constructor args here */);
rh.executeBatchInsert(); // Having fixed name to follow conventions

Важным моментом методов экземпляра является то, что они предназначены для конкретного экземпляра класса... поэтому вам нужно сначала создать экземпляр. Таким образом, экземпляр будет иметь доступ к нужному соединению и подготовленному оператору в вашем случае. Просто вызывая ReportHandler.executeBatchInsert, не хватает контекста.

Действительно важно, чтобы вы понимали, что:


  • Методы экземпляра (и поля и т.д.) относятся к конкретному экземпляру

  • Статические методы и поля относятся к самому типу, не конкретному экземпляру

Как только вы поймете это фундаментальное различие, становится понятным, что вы не можете вызвать метод экземпляра без создания экземпляра... Например, имеет смысл спросить: "Каков рост этого человека?" (для конкретного пользователя) но не имеет смысла спрашивать: "Каков рост человека?" (без указания человека).

Предполагая, что вы опираетесь на Java из книги или руководства, вам следует прочитать больше примеров статических и нестатических методов и т.д. - Это жизненно важное различие, которое необходимо понять, и у вас будут всевозможные проблемы, пока вы его не поймете.

Ответ 2

Пожалуйста, найдите ответ:

public class Customer {

public static void main(String[] args) {
Customer customer=new Customer();
customer.business();
}

public void business(){
System.out.println("Hi Harry");
}
}
Ответ 3

Java - это разновидность объектно-ориентированного программирования, а не программирования процедур. Таким образом, каждая вещь в вашем коде должна манипулировать объектом.

public static void main - это всего лишь запись вашей программы. В ней нет никакого объекта.

Итак, что такое кодирование с использованием объекта? Это просто, вам нужно создать конкретный объект / экземпляр, вызвать их методы для изменения их состояний или выполнить другую конкретную функцию внутри этого объекта.

например, так же, как

private ReportHandler rh = new ReportHandler();
rh.<function declare in your Report Handler class>

Итак, когда вы объявляете статический метод, он не связывается с вашим объектом / экземпляром вашего объекта. И это также противоречит вашему программированию O-O.

статический метод обычно вызывается, когда эта функция не связана ни с каким объектом, находящимся за ней.

Ответ 4

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

java