我有
class foo{
public static void main(String[] args){
do();
}
public void do(){}
}
但是当我通过在命令行上运行命令do()
从main
调用java foo
时,java会抱怨你无法从静态函数调用方法。
所以我的问题是:如何使用java命令从命令行运行程序之后调用main方法中的方法以及是否可能调用方法的替代策略。
答案 0 :(得分:42)
你只能针对类的实例调用像do()
这样的实例方法(这是一个非法的方法名称):
public static void main(String[] args){
new Foo().doSomething();
}
public void doSomething(){}
或者,如果适用于您的设计,也可以使doSomething()
保持静态。
答案 1 :(得分:12)
在main方法之前检查静态,这将方法声明为类方法,这意味着它不需要调用实例。因此,当您打算调用非静态方法时,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中的类应该以大写字母开头。
答案 2 :(得分:7)
这是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
答案 3 :(得分:6)
你可以采取多种方式。这是两个。干杯!
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");
}
}
答案 4 :(得分:1)
如果你想在main方法中使用do()
,有两个选择,因为一个是静态的,而另一个是(do())不是
new Foo().do();
static do()
方法看看这个sun tutorial
答案 5 :(得分:0)
首先java不允许你使用do()
方法。相反,你可以将它doOperation()
。
第二,你不能直接从静态函数调用非静态方法。 Main
是一个静态函数。您需要先实例化该类,然后使用该实例调用方法。
第三,您可以直接从非静态方法调用静态方法。