首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量作用域

变量作用域
EN

Stack Overflow用户
提问于 2012-10-25 05:38:53
回答 1查看 2K关注 0票数 0

我得到了一个恼人的问题,为什么当我第一次尝试使用在CameraPhone类编译器下直接声明的变量imageSize和memorySize编译这段代码时,它给了我一个逻辑错误,但当我在代码末尾声明变量时,它却工作得很好?

假设存在一个Phone类。定义一个包含两个实例变量的子类CameraPhone :一个名为imageSize的整数,表示每张图片的大小(为了简单起见,假设一个像素占用一个字节,因此兆像素等于兆字节)(即,2表示每个图像由2兆像素组成),以及一个名为memorySize的整数,表示相机内存中的千兆字节数(即,4表示4千兆字节的内存)。有一个构造函数,它接受与上述两个实例变量对应的两个整数参数,用于初始化相应的实例变量。还有一个名为numPictures的方法,它返回(以整数形式)相机内存可以保存的照片数。别忘了千兆字节就是1000兆字节。

代码语言:javascript
复制
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;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 05:49:59

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

代码语言:javascript
复制
private int imageSize;
private int memorySize;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13058193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档