编译源代码时出现NoSuchMethodError

时间:2011-10-09 11:23:17

标签: java

class Box {
  double weight;
  double height;
  double depth;

  Box(Box ob){
    weight = ob.weight;
    height = ob.height;
    depth = ob.depth;
  }

  Box(double w, double h, double d){
    weight = w;
    height = h;
    depth = d;
  }

  Box() {
    weight = -1;
    height = -1;
    depth = -1;
  }

  Box(double len){
    weight = height = depth = len;
  }

  double volume(){
    return weight * height * depth; 
  }
}

 public class OverloadConss {
    public static void main(String[] args) {
            Box mybox1 = new Box (15,20,10);
            Box mybox2 =  new Box ();
            Box mycube = new Box(7);
            Box myclone =  new Box (mybox1);
            double vol;
            vol = mybox1.volume();
            System.out.println("The volume of the first box: " + vol);
            vol = mybox2.volume();
            System.out.println("The volume of the second box: " + vol);
            vol = mycube.volume();
            System.out.println("The volume of the mycube: " + vol);
            vol = myclone.volume();
           System.out.println("The clone of the mybox1:" + vol);
    }
}

当我编译源代码时,我收到了消息:

  

Java / Eclipse /异常在线程“main”java.lang.NoSuchMethodError:Box。(LBox;)在OverloadConss.main(OverloadConss.java:33)

3 个答案:

答案 0 :(得分:3)

您的代码没有问题;我在eclipse中没有任何错误地运行它。输出:

The volume of the first box: 3000.0
The volume of the second box: -1.0
The volume of the mycube: 343.0
The clone of the mybox1:3000.0

你用什么来运行脚本?如果你使用eclipse;尝试重建工作区或重写文件(复制+粘贴)。

注意:对于Box.java,我会使用类似的东西,所以如果你改变了数据结构,你只需要改变1个构造函数。

class Box {
  double weight;
  double height;
  double depth;

  Box(Box ob){
    this(ob.weight, ob.height, ob.depth);
  }

  Box(double w, double h, double d){
    weight = w;
    height = h;
    depth = d;
  }

  Box() {
    this(-1, -1, -1);
  }

  Box(double len){
    this(len, len, len);
  }

  // additional methods
}

答案 1 :(得分:0)

你必须在不同的.java文件中放置不同的类,它应该可以工作。

答案 2 :(得分:0)

如果两个类都在同一个文件中,那么我不知道这是怎么发生的。 OverloadConss.main被称为已定义的Box构造函数。

如果它们位于两个单独的文件中,那么我的猜测是您最近添加了Box.Box(Box)并且之后没有重新编译Box.java。 Java能够访问某些Box类,因此您无法获得ClassNotFoundException

最好的办法是删除所有.class个文件并重新编译。