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

假设存在Phone类。定义一个子类CameraPhone,它包含两个实例变量:一个名为imageSize的整数,表示每张图片的大小(以百万像素为单位)(为简单起见,假设一个像素占用一个字节-因此,百万像素等于兆字节)(即2表示每个图像由2兆像素组成),以及一个名为memorySize的整数,表示相机内存中的千兆字节数(即4表示4 GB内存)。有一个构造函数,它接受与上述两个实例变量相对应的两个整数参数,并用于初始化各自的实例变量。还有一个名为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;

}

最佳答案

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

private int imageSize;
private int memorySize;


另外,在构造函数中使用this是完全合法的,这不会导致错误。并且可以直接在声明它们的位置或在构造函数中初始化属性。

关于java - 可变范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13058193/

10-10 13:34