静态方法只能在处理Java时以静态或顶级类型声明

静态方法只能在处理Java时以静态或顶级类型声明,java,static,processing,Java,Static,Processing,所以我在Windows上制作了一个处理3.5.4-Java的程序,出现了一个奇怪的错误。我在网上寻找调试它的方法,但找不到可行的答案 class ball{ public PVector pos; public PVector vel; public int radius; public ball(int r){ pos = new PVector(0,0); vel = new PVector(3/5,4/5); radius = r; } pu

所以我在Windows上制作了一个处理3.5.4-Java的程序,出现了一个奇怪的错误。我在网上寻找调试它的方法,但找不到可行的答案

class ball{
  public PVector pos;
  public PVector vel;
  public int radius;
  public ball(int r){
    pos = new PVector(0,0);
    vel = new PVector(3/5,4/5);
    radius = r;
  }
  public void move(){
    pos.add(vel);

  }
  void render(){
        circle(pos.x,pos.y,radius);
  }

  public static PVector tanxd2(PVector inp){//finds value of tan(x/2)
  float hyp = sqrt(pow(inp.x,2)+pow(inp.y,2));
  float scl = 1/hyp;
  PVector ret = new PVector(scl*inp.y, scl*(hyp+inp.x));
  return ret;
}
};
产生误差的那一行是:-

公共静态PVector tanxd2(PVector inp){//查找tan(x/2)的值

未使用其他代码,错误为:-

方法tanxd2不能声明为静态;静态方法只能在静态或顶级类型中声明


任何帮助都将不胜感激。

如错误消息所示,
静态
方法只能在顶级类型(不是内部类的类)中声明。这是Java的一个限制

但是
Ball
是顶级类型,对吗

实际上,它不是……这是由处理的预处理器(将
.pde
脚本转换为Java
.class
文件)的工作原理引起的

在预处理过程中,所有类都成为(当前不可见)父类的内部类。而在Java中,您的
Ball
类实际上是顶级类型(因为它没有封闭的父类),当您的处理脚本成为可运行的Java代码时(如下例所示),情况就不再如此了

例子 Processing的预处理器获取如下代码

void setup() {...}

void draw() {...}

class Ball {...}
…并生成一个如下所示的Java类:

import processing.core.PApplet;

final class JavaVersion extends PApplet {

    public static void main(String[] args) {
        PApplet.main(JavaVersion.class);
    }

    @Override
    void setup() {...}
    
    @Override
    void draw() {...}
    
    class Ball {...} // ball is an inner class!

}

回到错误消息:处理只是强制执行java限制——当然,在我们考虑预处理器的行为之前,这样的代码不触发这种限制。

错误消息中什么不明确?答案已经给出…移动您可以声明静态方法的方法,或者RE。移动static关键字…是内部类吗?
ball
顺便说一下,java中的类名应该按惯例以大写开头。