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

class useTent { Scanner keyboard=new Scanner (System.in); public void main (String[] args) { Tent t= new Tent(); HireContract hc = new HireContract(); ProcessHire(t, hc); } } 

这是我的代码,我一直得到同样的错误:

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

当我使它静态时我得到以下错误:

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

而且还是

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

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

 public static void main (String[] args) { 

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

 ProcessHire ph = new ProcessHire(t, hc); 

默认情况下,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 } } 

主类应该是public static void main (String[] args)

如果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命名约定。