Java运行Car类报NoClassDefFoundError: string错误求助
Java程序运行报错排查
问题背景
开发Java程序时遇到运行报错,排查受阻,需要明确问题原因与修复方向。
程序需要实现的功能要求:
- 设计对应访问器方法,用于获取对象
yearModel、make、speed三个字段的存储值 accelerate方法每次被调用时,将speed字段的值加5brake方法每次被调用时,将speed字段的值减5
问题代码
public class Car { private int yearModel; private string make; private int speed; public Car() { this.yearModel = 2015; this.make = "Tesla"; this.speed = 40; } // Constructor public Car(int yearModel, string make, int speed) { this.yearModel = yearModel; this.make = make; this.speed = speed; } // Getters public int getYearModel() { return yearModel; } public string getMake() { return make; } public int getSpeed() { return speed; } // Setters public void accelerate() { speed += 5; } public void brake() { speed -= 5; } public string toString() { return "Car: " + yearModel + " " + make + " " + speed; } public static void main(String[] args) { Car myCar = new Car(); System.out.println(myCar); myCar.accelerate(); System.out.println(myCar); myCar.brake(); System.out.println(myCar); Car myCar2 = new Car(2015, "Tesla", 40); System.out.println(myCar2); } }
运行报错信息
Error: Unable to initialize main class Car Caused by: java.lang.NoClassDefFoundError: string
问题原因
Java是严格大小写敏感的编程语言,JDK提供的字符串类型正确类名是java.lang.String,首字母必须大写。
代码中所有声明字符串类型的位置都错误使用了全小写的string,虚拟机无法找到名为string的类定义,因此抛出NoClassDefFoundError,导致主类初始化失败。
错误位置共4处:
- 成员变量声明:
private string make; - 带参构造方法参数定义:
public Car(int yearModel, string make, int speed) getMake方法返回值声明:public string getMake()toString方法返回值声明:public string toString()
修复方案
将代码中所有小写的string替换为大写开头的String即可,额外建议给重写的toString方法加上@Override注解标记,避免重写时的签名错误。
修复后可正常运行的完整代码:
public class Car { private int yearModel; private String make; private int speed; public Car() { this.yearModel = 2015; this.make = "Tesla"; this.speed = 40; } public Car(int yearModel, String make, int speed) { this.yearModel = yearModel; this.make = make; this.speed = speed; } // 访问器方法 public int getYearModel() { return yearModel; } public String getMake() { return make; } public int getSpeed() { return speed; } // 加速方法 public void accelerate() { speed += 5; } // 刹车方法 public void brake() { speed -= 5; } @Override public String toString() { return "Car: " + yearModel + " " + make + " " + speed; } public static void main(String[] args) { Car myCar = new Car(); System.out.println(myCar); myCar.accelerate(); System.out.println(myCar); myCar.brake(); System.out.println(myCar); Car myCar2 = new Car(2015, "Tesla", 40); System.out.println(myCar2); } }
修复后程序运行输出如下:
Car: 2015 Tesla 40 Car: 2015 Tesla 45 Car: 2015 Tesla 40 Car: 2015 Tesla 40
内容的提问来源于stack exchange,提问作者Pius Kimathi
相关产品推荐
相关产品推荐

