变量范围

时间:2012-10-24 21:38:53

标签: java variables syntax attributes scope

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

假设存在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;

}

1 个答案:

答案 0 :(得分:1)

你得到的“逻辑错误”是什么?如果你复制并粘贴问题中的代码它将毫无问题地工作, at all 并不重要yo声明了属性(又名“实例变量”) - 在开始时,结束时只要您实际声明在某处初始化它们就完全相同。我的意思是,只要这些行出现在类声明中的任何位置(不在方法内部,请注意)代码将编译:

private int imageSize;
private int memorySize;

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