0

我有一个烦人的问题,为什么当我第一次尝试使用在 CameraPhone 类编译器下立即声明的变量 imageSize 和 memorySize 编译此代码时给了我一个逻辑错误,但是当我在代码末尾声明变量时却可以正常工作???

假设存在一个电话类。定义一个包含两个实例变量的子类 CameraPhone:一个名为 imageSize 的整数,表示以百万像素为单位的大小(为简单起见,假设一个像素占用一个字节,因此百万像素等于兆字节)(即,2 表示每张图像是由 2 兆像素组成)和一个名为 memorySize 的整数,表示相机内存中的千兆字节数(即 4 表示 4 千兆字节的内存)。有一个构造函数,它接受与上述两个实例变量对应的两个整数参数,用于初始化各自的实例变量。还有一个名为 numPictures 的方法,它返回(作为整数)相机内存可以容纳的图片数量。不要忘记一千兆字节是 1,000 兆字节。

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;

}
4

1 回答 1

1

你得到的“逻辑错误”是什么?如果您在问题中复制并粘贴代码,它将毫无问题地工作,您哪里声明属性(也称为“实例变量”)并不重要 - 在开始时,在结束时,它都是一样的正如您在某处实际声明初始化它们一样。我的意思是,只要这些行出现在类声明中的任何位置(不是在方法中,请注意),代码就会编译:

private int imageSize;
private int memorySize;

this此外,在构造函数中使用是完全合法的,这不会导致错误。属性可以在你声明它们的地方直接初始化,也可以在构造函数中初始化。

于 2012-10-24T21:49:59.067 回答