如果特定范围(例如内部类或方法定义)中的类型声明(例如成员变量或参数名称)与封闭范围中的另一个声明具有相同的名称,则该声明会隐藏封闭范围中的声明。您不能仅通过名称来引用影子声明。以下示例 ShadowTest 演示了这一点:

public class ShadowTest {public int x = 0;class FirstLevel {public int x = 1;void methodInFirstLevel(int x) {System.out.println("x = " + x);System.out.println("this.x = " + this.x);System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);}}public static void main(String... args) {ShadowTest st = new ShadowTest();ShadowTest.FirstLevel fl = st.new FirstLevel();fl.methodInFirstLevel(23);}
}

以下是此示例的输出:

x = 23
this.x = 1
ShadowTest.this.x = 0

本例定义了三个名为x的变量:ShadowTest类的成员变量、内部类FirstLevel的成员变量、方法methodInFirstLevel中的参数。定义为方法methodInFirstLevel 的参数的变量 x 隐藏了内部类FirstLevel 的变量 x。因此,当您在方法methodInFirstLevel 中使用变量 x 时,它指的是方法参数。要引用内部类 FirstLevel 的成员变量,使用关键字 this 来表示封闭范围:

System.out.println("this.x = " + this.x);

引用通过它们所属的类名包围更大范围的成员变量。例如,以下语句从方法 methodInFirstLevel 访问类 ShadowTest 的成员变量:

System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);

Java Shadowing 影子变量 影子声明相关推荐

  1. Java数据类型及变量作业_day02、Java变量与数据类型

    02_Java变量与数据类型 第二章 变量与数据类型 变量 变量的概述 变量是指内存中的一个存储区域,该区域要有自己的名称(变量名).类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值 ...

  2. JAVA基础之变量(数据类型及其转换)

    变量 变量的概念: 内存中的一个存储区域: 该区域的数据可以在同一类型范围内不断变化: 变量是程序中最基本的存储单元.包含变量类型.变量名和存储的值. 变量的作用: 用于在内存中保存数据. 使用变量注 ...

  3. Java 基本 语法变量与运算符

    一.关键字与保留字 关键字(keyword)的定义和特点 定义:被 被Java 语言赋予了特殊含义,用做专门用途的字符串(单词) 特点: 关键字中所有字母都为 小写 官方地址: https://doc ...

  4. tensorflow tf.train.ExponentialMovingAverage().variables_to_restore()函数 (用于加载模型时将影子变量直接映射到变量本身)

    variables_to_restore函数,是TensorFlow为滑动平均值提供.之前,也介绍过通过使用滑动平均值可以让神经网络模型更加的健壮.我们也知道,其实在TensorFlow中,变量的滑动 ...

  5. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  6. 这是什么操作?java中的变量竟然可以先使用后声明?

    相信大家在看到标题之后,是疑惑的点进来看内容的. 在看到标题之后,大家肯定会怀疑,我赵某人用java写了好几年的代码了,还真就没见过java中的变量能先用在声明,今天就是进来看看你在没有声明变量的前提 ...

  7. java怎么申请变量_java怎么声明变量

    在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明变量的名字.下面演示了变量的声明方式. double salary; int age; Bo ...

  8. Java新职篇:声明一个变量

    变量是Java程序的一个基本存储单元.变量由一个标识符,类型及一个可选初始值的组合定义.此外,所有的变量都有一个作用域,定义变量的可见性,生存期.接下来讨论变量的这些元素. 声明一个变量 在Java中 ...

  9. java的八种基本数据类型以及变量的声明

    变量的使用 1.java定义变量的格式:数据类型 变量名 = 变量值; 2.说明: 变量必须先声明,后使用 同一个作用域内不能出现两个同名的变量 变量都定义在其作用域内,在作用域内,他是有效的,换句话 ...

最新文章

  1. Developerkit Link Develop Demo 环境配置指南
  2. Sql Injection 注入攻击
  3. openwrt satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod: * 问题解决
  4. 自定义LocaleResolver实现页面中英文切换
  5. android应用程序开发_深圳app开发公司:跨平台应用程序开发工具有哪些?
  6. .NET中生成动态验证码
  7. python3调用java_Python3-JPype调用Java代码
  8. TiDB DM部署及使用
  9. 机器学习篇—大厂笔试题
  10. JavaScript刷新页面,不重复提交
  11. 在centos7中安装nodejs(npm )
  12. Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
  13. vba调用二维码ocx
  14. 零基础如何学习视频制作?超全干货!手把手教你好上手的视频制作技巧
  15. 七大行星排列图片_太阳系八大行星大小及排列顺序
  16. 2022 社招 | 趋势科技 Linux开发 面经
  17. git fatal: The remote end hung up unexpectedly 错误
  18. 国产嵌入式操作系统发展思考 | 何小庆
  19. 马斯克:需要300T电池
  20. ajax实现登录成功后设置cookie,使用jquery的cookie实现登录页记住用户名和密码的方法...

热门文章

  1. 《转》关于ath5k网卡驱动中beacon的发送过程(特别是timestamp字段)
  2. 如何冻结Excel中的行
  3. 《武则天正传》——林语堂版本,读后感
  4. KuPlay:社区运营会是下一个风口吗?
  5. open stack——Nove计算服务
  6. Typora基本使用Markdown基本语法:精炼且详细
  7. VB如何使用API直接操作打印机
  8. XBL用于防治botnet
  9. 毛毛雨 2007-11
  10. PDF预览、支持ie、谷歌等主流浏览器