主类方法在类错误中不是静态的

时间:2015-03-28 05:59:36

标签: java main-method

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

    public void main (String[] args)
    {

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

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

  

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

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

  

" C:\ Users \ Emma \ Documents \ opps ass1 \ useTent.java:22:error:non-static method   ProcessHire(Tent,HireContract)无法从静态上下文ProcessHire(t,hc)引用;"

还是

  

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

4 个答案:

答案 0 :(得分:1)

main的签名需要static,就像错误告诉你一样

public static void main (String[] args) {

你没有发布ProcessHire,但我认为你想要new并且可能要保存参考

ProcessHire ph = new ProcessHire(t, hc);

答案 1 :(得分: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方法,那么您可以使用另一个主方法作为普通方法。

现在当你使方法静态时你会得到另一个错误,因为在静态上下文中,调用非静态方法(本地到类)而不初始化它的对象会给出错误,因为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
}
}

答案 2 :(得分:0)

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

答案 3 :(得分: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命名约定。