Java调用跨类方法报this.p1为null空指针异常问题求助
问题根因
空指针异常是变量作用域混淆导致的:你在Cantina类里定义了p1/p2/p3三个成员变量,但在构造方法中给变量赋值时,多加了PratoDia类型声明,相当于在构造方法的局部作用域里新建了三个和成员变量同名的局部变量。
构造方法执行时,创建的PratoDia实例都赋值给了这三个临时的局部变量,构造方法运行结束局部变量就会被销毁,类的三个成员变量始终没有被赋值,保持对象类型的默认值null,后续调用实例方法自然会抛出空指针异常。
修复方案
修改Cantina类的构造方法,去掉赋值语句前多余的类型声明,直接给类的成员变量赋值即可,修正后的构造方法代码如下:
public Cantina(){ p1 = new PratoDia("Carne", 5, 100); p2 = new PratoDia("Peixe", 6, 60); p3 = new PratoDia("Dieta", 4, 40); }
其他待修复问题
- 你贴出的
PratoDia类构造方法中调用了CompraPratoDoDia()方法,但给出的代码里没有该方法的实现,直接编译会报错,需要补充对应方法的逻辑。 setPreço方法中使用了整数除法preço/100,Java中整数运算会直接舍弃小数部分,比如传入参数10时,10/100的计算结果为0,价格不会产生任何变化。如果需要处理小数金额,建议使用BigDecimal类型,或将金额单位转为分用整数存储,避免浮点精度问题。
内容的提问来源于stack exchange,提问作者nuno
相关产品推荐
相关产品推荐

