Вызов другого метода из основного метода в java
У меня
class foo{
public static void main(String[] args){
do();
}
public void do(){}
}
но затем, когда я вызываю do()
из main
, запустив команду java foo
в командной строке, java жалуется, что вы не можете вызвать метод из статической функции.
Итак, мой вопрос: как вы вызываете методы из основного метода, и если невозможно, какие альтернативные стратегии вызывать методы после запуска программы из командной строки с помощью команды java.
Ответы
Ответ 1
Вы можете вызвать метод экземпляра, например do()
(который является незаконным именем метода, кстати) против экземпляра класса:
public static void main(String[] args){
new Foo().doSomething();
}
public void doSomething(){}
Кроме того, make doSomething()
static также, если это работает для вашего дизайна.
Ответ 2
Обратите внимание на статичность перед основным методом, это объявляет метод как метод класса, что означает, что ему не нужен экземпляр для вызова. Так как вы собираетесь вызывать нестационарный метод, Java жалуется, потому что вы пытаетесь вызвать так называемый "метод экземпляра", который, конечно, сначала должен иметь экземпляр;)
Если вы хотите лучше понять классы и экземпляры, создайте новый класс с помощью методов экземпляра и класса, создайте объект в своем основном цикле и вызовите методы!
class Foo{
public static void main(String[] args){
Bar myInstance = new Bar();
myInstance.do(); // works!
Bar.do(); // doesn't work!
Bar.doSomethingStatic(); // works!
}
}
class Bar{
public do() {
// do something
}
public static doSomethingStatic(){
}
}
Также помните, что классы в Java должны начинаться с прописной буквы.
Ответ 3
Это фундаментальное понимание в Java, но может быть немного сложнее для новых программистов. Сделайте небольшое исследование разницы между статическим и экземпляром метода. Основное отличие заключается в том, что метод экземпляра do() доступен только для экземпляра класса foo.
Вы должны создать (создать экземпляр) класс, создав объект, который вы используете для вызова метода экземпляра.
Я включил ваш пример в пару комментариев и пример.
public class SomeName {
//this is a static method and cannot call an instance method without a object
public static void main(String[] args){
// can't do this from this static method, no object reference
// someMethod();
//create instance of object
SomeName thisObj = new SomeName();
//call instance method using object
thisObj.someMethod();
}
//instance method
public void someMethod(){
System.out.print("some message...");
}
}// end class SomeName
Ответ 4
Вы можете сделать это несколькими способами. Вот два. Ура!
package learningjava;
public class helloworld {
public static void main(String[] args) {
new helloworld().go();
// OR
helloworld.get();
}
public void go(){
System.out.println("Hello World");
}
public static void get(){
System.out.println("Hello World, Again");
}
}
Ответ 5
Если вы хотите использовать do()
в своем основном методе, есть 2 варианта, потому что один из них статичен, а другой (do()) не
- Создайте новый экземпляр и вызовите do() как
new Foo().do();
- сделать
static do()
метод
Посмотрите на этот sun tutorial
Ответ 6
Первая java не позволит вам иметь метод do()
. Вместо этого вы можете сделать это doOperation()
.
Вторые Вы не можете вызывать непосредственно статические методы из статической функции. Main
- статическая функция. Вам нужно создать экземпляр класса сначала, а затем вызвать метод, используя этот экземпляр.
В-третьих, вы можете вызвать статический метод непосредственно из нестатических методов.