0
class useTent
{
    Scanner keyboard=new Scanner (System.in);

    public void main (String[] args)
    {

        Tent t= new Tent();
        HireContract hc = new HireContract();
        ProcessHire(t, hc);
    }
}

这是我的代码,我不断收到同样的错误:

" main 方法在 useTent 类中不是静态的,请将 main 方法定义为:public static void main(String[] args)"

当我将它设为静态时,我收到以下错误:

“C:\Users\Emma\Documents\opps ass1\useTent.java:22: 错误:不能从静态上下文 ProcessHire(t, hc) 引用非静态方法 ProcessHire(Tent,HireContract);”

而且仍然是

“错误:主方法在 useTent 类中不是静态的,请将主方法定义为:public static void main(String[] args)”

4

4 回答 4

1

Java默认寻找方法

public static void main (String[] args) { }

或者说

public static void main (String ...args) {}

args 可以是任何名称,例如 public static void main (String ...arguments) {}

如果您已经有一个 public static void main 方法,那么您可以有另一个 main 方法作为普通方法。

现在,当您将方法设为静态时,您会得到另一个错误,因为在静态上下文中,调用非静态方法(类本地)而不初始化它的对象会产生错误,因为 java 不允许来自静态上下文/方法的非静态调用。

 non-static method error

一个示例解决方案是将 ProcessHire 方法设为静态:-

class UseTent
{
    Scanner keyboard=new Scanner (System.in);

public void main (String[] args)
    {

    Tent t= new Tent();
    HireContract hc = new HireContract();
    ProcessHire(t, hc);

    }

public static void processProcessHire(Tent tent,HireContract hireContract){
//your method definition
}
}

或者如果你不能使方法静态,那么使用下面的方法: -

class UseTent
{
    Scanner keyboard=new Scanner (System.in);

public void main (String[] args)
    {

    Tent t= new Tent();
    HireContract hc = new HireContract();
   new UseTent().ProcessHire(t, hc);

    }

public void processProcessHire(Tent tent,HireContract hireContract){
//your method definition
}
}
于 2015-03-28T06:14:04.943 回答
1

mainrequires的签名static就像错误告诉你的那样

public static void main (String[] args) {

而且您没有发布ProcessHire,但我认为您想要一个new并且也许是为了保存参考

ProcessHire ph = new ProcessHire(t, hc);
于 2015-03-28T06:01:53.657 回答
0

主要课程应该是public static void main (String[] args)

于 2015-03-28T06:04:40.883 回答
0

如果 ProcessHire 方法是静态的并且在 ABC 类中试试这个,

class useTent{

    Scanner keyboard=new Scanner (System.in);

    public static void main (String[] args){

        Tent t= new Tent();
        HireContract hc = new HireContract();
        ABC.ProcessHire(t, hc);
   }
}

还遵循 Java 命名约定。

于 2015-03-28T06:11:44.707 回答