我得到了一个恼人的问题,为什么当我第一次尝试使用在CameraPhone类编译器下直接声明的变量imageSize和memorySize编译这段代码时,它给了我一个逻辑错误,但当我在代码末尾声明变量时,它却工作得很好?
假设存在一个Phone类。定义一个包含两个实例变量的子类CameraPhone :一个名为imageSize的整数,表示每张图片的大小(为了简单起见,假设一个像素占用一个字节,因此兆像素等于兆字节)(即,2表示每个图像由2兆像素组成),以及一个名为memorySize的整数,表示相机内存中的千兆字节数(即,4表示4千兆字节的内存)。有一个构造函数,它接受与上述两个实例变量对应的两个整数参数,用于初始化相应的实例变量。还有一个名为numPictures的方法,它返回(以整数形式)相机内存可以保存的照片数。别忘了千兆字节就是1000兆字节。
public class CameraPhone extends Phone {
public CameraPhone(int imageSize, int memorySize) {
this.imageSize = imageSize;
this.memorySize = memorySize;
}
public int numPictures() {
return memorySize * 1000 / imageSize;
}
private int imageSize; private int memorySize;
}发布于 2012-10-25 05:49:59
你得到的“逻辑错误”是什么?如果你复制并粘贴问题中的代码,它将不会出现问题,那么你在哪里声明属性(也就是。“实例变量”)--在开始和结束时,只要你在某个地方实际声明和初始化了它们,一切都是一样的。我的意思是,只要这些行出现在类声明中的任何地方(请注意,不是在方法中),代码就会编译:
private int imageSize;
private int memorySize;此外,在构造函数中使用this是完全合法的,这不会导致错误。属性可以直接在声明它们的地方初始化,也可以在构造函数中初始化。
https://stackoverflow.com/questions/13058193
复制相似问题