Java 方法上的空指针异常
这是我的第一个java项目,一切都很顺利,我的程序已经编译好了。 我的屏幕上有一个3D物体。Java 方法上的空指针异常,java,Java,这是我的第一个java项目,一切都很顺利,我的程序已经编译好了。 我的屏幕上有一个3D物体。 但是当我使用moveTo(intx,inty)方法时,我得到了一个空指针异常。 我查过了,这对很多人来说显然是个大问题。 但我仍然无法理解它的概念,也无法理解对其他人有效的任何修复方法 似乎不符合我的计划。 我曾尝试使用if语句来检查null之类的东西,但我无法获得正确的语法或其他东西。 例如,基底是一个椭圆,ellipse类有一个moveTo(x,y)方法。但是当我使用base.moveTo(x,y)
但是当我使用moveTo(intx,inty)方法时,我得到了一个空指针异常。 我查过了,这对很多人来说显然是个大问题。 但我仍然无法理解它的概念,也无法理解对其他人有效的任何修复方法 似乎不符合我的计划。 我曾尝试使用if语句来检查null之类的东西,但我无法获得正确的语法或其他东西。 例如,基底是一个椭圆,ellipse类有一个moveTo(x,y)方法。但是当我使用base.moveTo(x,y)调用它时,我得到了错误。 有人能帮忙吗? 气缸1.移动到(8,8); 发生异常。 java.lang.NullPointerException 位于Cylinder3D.moveTo(Cylinder3D.java:57) 这就是你所说的堆栈跟踪吗? 下面是rectangle类中moveTo方法的代码。 公共无效移动到(整数x,整数y) { xPosition=x; yPosition=y; 使可见(); draw(); }
构造函数不会触及任何成员变量
top
、base
和wall
,因为在构造函数中声明的局部变量会隐藏您可能要初始化的成员变量
因此,它们保持
null
,并尝试在moveTo
抛出中调用成员函数。“我得到一个空指针异常”--请发布stacktraceWhat doesRectangle wall=new Rectangle()
在你的构造函数中,如果你已经声明了一个同名的实例变量,那么你应该怎么做呢?也可以发布wall.moveto()的代码。它可能试图使用一些未初始化的变量在你的成员函数(例如构造函数)中定义局部变量隐藏类变量是一件坏事。这会导致很多错误,比如这里。谢谢你们的帮助,伙计们,我已经用更多的信息更新了这个问题。Sortirios我认为它只是为我创建了一个矩形,构造函数似乎工作正常。+1但你说话就像一个有经验的程序员。我敢打赌OP现在正在拿出一本字典来理解你刚才写的东西……我不太确定你的评论是什么意思。如果你能用lamens的术语为我把它分解,那就太好了。Java在调用构造函数之前将所有对象归零。然后,构造函数应该适当地设置所有成员变量。您的不会,因为您在构造函数中定义了一个同名的局部变量,并将其赋值,而不是赋值给您的成员。局部阴影覆盖成员,因此保持为零,也就是指针的null
。在需要对象的地方使用null
会导致NullPointerException
。谢谢大家。我设法修复了代码,你现在说的有道理。为我修复它的代码行是。this.top=新椭圆();等我现在知道我正在创建一个局部变量top,现在可以在该方法之外看到它。
public class Cylinder3D
{
private int diameter;
private int height;
private Ellipse top;
private Ellipse base;
private Rectangle wall;
int xPosition;
int yPosition;
public Cylinder3D(int diameter, int height)
{
int x = 0;
int y = 0;
Ellipse top = new Ellipse();
int xdiameter=diameter;
int ydiameter=diameter/2;
int xPosition = 0;
int yPosition = 0;
top.setState(xdiameter,ydiameter,xPosition,yPosition,"black");
Ellipse base = new Ellipse();
int yPositionBase = yPosition + height;
base.setState(xdiameter,ydiameter,xPosition,yPositionBase,"black");
Rectangle wall = new Rectangle();
int xSideLenght = diameter;
int ySideLenght = height;
int yPositionWall = yPosition + (diameter/4);
wall.setState(xSideLenght,ySideLenght,xPosition,yPositionWall,"black");
//....
}
public void moveTo(int x, int y)
{
wall.moveTo(x,y); //here is where I get the error.
base.moveTo(x,y);
top.moveTo(x,y);
}
}