参数作用域与局部变量作用域?

2024-02-16

我正在读我的 AP cs 书,它谈到了三种类型的变量:

•实例变量

•局部变量

•参数

实例变量在整个类中都是可见的等等...... 参数只能在方法内使用,局部变量也是如此。 。 。

因此,我的问题是,如果参数和局部变量包含相同的范围,为什么他们会将参数和局部变量分类为不同类别的变量。 。 。尽管它们的用途不同。


The Java语言规范定义了7种类型的变量 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.3。他们的描述是

A 类变量是在 a 中使用关键字 static 声明的字段 类声明(第 8.3.1.1 节),或带或不带关键字 static 在接口声明中(第 9.3 节)。

类变量在其类或接口准备好时创建 (第 12.3.2 节)并初始化为默认值(第 4.12.5 节)。班上 当变量的类或接口被删除时,变量实际上不再存在 卸载(§12.7)。

An 实例变量是在类声明中声明的字段 不使用关键字 static (§8.3.1.1)。

如果类 T 有一个字段 a 是实例变量,则新的 创建实例变量 a 并初始化为默认值 (§4.12.5)作为每个新创建的 T 类对象或任何对象的一部分 类是 T 的子类(第 8.1.4 节)。实例变量 当它作为场的对象是时,它实际上不再存在 在对象的任何必要的终结之后不再被引用 (§12.6)已完成。

数组组件是未命名的变量被创建和 每当一个新对象被初始化为默认值(§4.12.5) 创建一个数组(第 10 节,第 15.10 节)。阵列组件有效 当不再引用数组时,该数组将不再存在。

方法参数(§8.4.1) 传递给方法的名称参数值。

对于方法声明中声明的每个参数,都会有一个新参数 每次调用该方法时都会创建变量(第 15.12 节)。新的 变量使用相应的参数值进行初始化 方法调用。该方法参数实际上不再存在 当方法体执行完成时。

构造函数参数(§8.8.1) 传递给 a 的名称参数值 构造函数。

对于构造函数声明中声明的每个参数,都会有一个新的 每次创建类实例时都会创建参数变量 表达式(第 15.9 节)或显式构造函数调用(第 8.8.7 节)调用 那个构造函数。新变量初始化为 来自创建表达式的相应参数值或 构造函数调用。构造函数参数有效停止 当构造函数主体执行时存在 完全的。

异常参数每次捕获异常时都会创建 try 语句的 catch 子句(第 14.20 节)。

新变量使用关联的实际对象进行初始化 例外情况(§11.3、§14.18)。异常参数有效 当执行与 catch 关联的块时不再存在 条款已完成。

局部变量由局部变量声明语句声明 (第 14.4 节)。

每当控制流进入块(§14.2)或 for 语句时 (§14.14),为每个声明的局部变量创建一个新变量 在立即包含的局部变量声明语句中 该块或 for 语句。

您还应该阅读有关变量范围 http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.3,它描述了可以在应用程序中使用某些命名实体的位置。

因此我的问题是为什么他们会对参数和本地进行分类 如果变量包含以下内容,则将其视为不同类别的变量 相同范围

从上面的描述可以看出,它们不包含相同的范围,因此需要加以区分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参数作用域与局部变量作用域? 的相关文章

随机推荐

  • C# 找不到网络路径

    我在通过网络将文件写入远程目录时遇到问题 当我尝试检查目录是否存在时 以下代码失败 if Directory Exists processingPath Directory CreateDirectory processingPath 处理
  • docker 在应该使用 v2 时却使用了 v1 注册表 api

    我正在尝试使用自托管 docker 注册表 v2 我应该能够推送 docker 映像 该映像在运行registry v2 容器的主机服务器 coreos 上本地工作 但是 在另一台机器 也是 coreos 相同版本 上 当我尝试推送到注册表
  • 使用 C# 中的静态类通过事件通知其他订阅者的简单状态机

    我一直在尝试为我的应用程序编写一个简单的静态类状态机 以便在系统状态更改时通知其他控件和代码 我想我几乎已经解决了 但我遇到了一个小问题 我不知道如何解决 这是代码 An enum denoting the 3 States public
  • 使用 Peewee 库批量更新

    我正在尝试使用更新表内的许多记录Peewee图书馆 里面一个for循环 我获取一条记录 然后更新它 但这在性能方面听起来很糟糕 所以我需要批量更新 当前代码如下所示 usernames to update get target userna
  • Android Firebase:设置值不起作用

    我正在尝试通过以下代码向 Firebase 数据库添加测试值 FirebaseDatabase database FirebaseDatabase getInstance DatabaseReference ref FirebaseData
  • 函数式 JavaScript:避免参数突变的良好实践?

    这是一个相当普遍的问题 函数式编程提倡这样的想法 程序是通过函数转换数据 并且应该避免突变 函数内可能除外 函数内被视为抽象的基本单元 但在这个程序中 function foo bar bar k1 bananas return bar v
  • 如何导入子目录中的模块,从而导入同一子目录中的另一个模块?

    在我导入的模块中 我尝试导入位于同一目录中的另一个模块 我的文件看起来像这样 project main py app foo py bar py main py import app foo as Foo foo py import bar
  • UnityWebRequest 在 iOS 中不工作

    给出的例子https docs unity3d com Manual UnityWebRequest html https docs unity3d com Manual UnityWebRequest html正如预期的那样 可以在 Wi
  • 为什么我们在使用Ajax控件时总是需要脚本管理器?

    为什么我们在使用Ajax控件时总是需要脚本管理器 脚本管理器控件是将脚本发送到客户端的控件 该控件是所有 AJAX 相关功能的核心 它管理启用 Ajax 的页面中的所有控件 它还确保部分页面更新按预期发生 http msdn microso
  • 如何从任何 Docker 存储库中提取单个映像?

    docker 存储库包含多个镜像 是否可以从存储库中提取特定图像 当我使用时 docker pull ubuntu 它会下载大约 8 10 个不同版本的 ubuntu 如果有标记的特定图像 您可以使用 tag 或 t 运算符来提取您要查找的
  • Android 加速度计过滤?

    我看到了许多关于过滤加速度计值以抵消重力 高通滤波器 的示例 但其中大多数都是一阶一阶 据说很简单 但是滞后 而且不是最好的 尽管我对滤波器或 DSP 一无所知 这里有人说有更好的解决方案用于DSP来感知运动 遗憾的是 我什至无法想象它会是
  • 无法将 JSON 对象插入 Firebase 实时数据库

    我正在尝试将用户数据存储在我的 Firebase 数据库中 这是我处理 onClick 并将数据发送到数据库的代码 public void onClickStore final View view String name binding g
  • 停止观察reactjs中的文件夹变化

    我正在开发一个反应项目 用户可以在其中上传文件 我面临的问题是当我将文件上传到服务器并将该文件保存到位于公共文件夹中的名为 uploads 的文件夹中时 然后当此过程完成页面刷新 这是因为应用程序正在监视任何更改并刷新页面 我知道我可以通过
  • 尽管安装并加载了 reshape2,但仍找不到功能“cast”

    跟随哈德利 威克姆 Hadley Wickham 探索数据和模型的实用工具 http had co nz thesis 2 4 节中的示例 铸造熔融数据我越来越Error could not find function cast 我已经安装
  • 一键运行 Javascript 2 个函数

    我使用从网上下载的 HTML 和 JS 代码来录制音频 但有一个问题 因为页面加载到屏幕上后立即出现允许麦克风的消息 正是因为window onload function init 在源代码record js中 但我想在单击按钮后显示消息
  • 在控制台应用程序中捕获 ctrl+c 事件(多线程)

    我有一个控制台应用程序的主线程 它以这种方式运行很少的外部进程 private static MyExternalProcess p1 private static MyExternalProcess p2 private static M
  • 304 未修改问题

    抱歉 标题可能有误 我正在编写一些代码来处理 If Modified Since 和 If None Match 请求作为缓存的一部分 除了 PHP 在标头后面返回一些内容 空行 之外 一切都很完美 页面内容应该为空 我正在使用的代码是
  • 是否可以将别名模板标记为好友?

    想象一下我们有这样的代码 template
  • 在字符串文字中展开宏

    我想做的是 define一个宏 define a 2 然后在字符串文字中使用它 string a 我希望该字符串不被解释为字符串 而是获取值a 即2 我没有成功 有人可以帮忙吗 define STRINGIFY2 X X define ST
  • 参数作用域与局部变量作用域?

    我正在读我的 AP cs 书 它谈到了三种类型的变量 实例变量 局部变量 参数 实例变量在整个类中都是可见的等等 参数只能在方法内使用 局部变量也是如此 因此 我的问题是 如果参数和局部变量包含相同的范围 为什么他们会将参数和局部变量分类为