`
Javaloverlover
  • 浏览: 347031 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

内部类中变量的查找

    博客分类:
  • java
 
阅读更多
在非静态内部类的方法中访问某个变量时,系统优先在该方法内查找是否存在该名字的局部变量,如果存在则用此局部变量;若不存在,则到该方法的内部类查找是否存在该名字的属性,若存在则用此属性;若还不存在,则到此内部类所在的外部类中进行查找,若存在,则取用,否则,报异常。
public class InnerTest {

	private int i = 2;

	private class InnerClass {
		private int i = 1;

		public void say() {
			int i = 0;
			System.out.println(i);
		}
	}
	
	public void outSay() {
		InnerClass inn = new InnerClass();
		inn.say();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new InnerTest().outSay();
	}

}

结果:0
public class InnerTest {

	private int i = 2;

	private class InnerClass {
		private int i = 1;

		public void say() {
			System.out.println(i);
		}
	}
	
	public void outSay() {
		InnerClass inn = new InnerClass();
		inn.say();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new InnerTest().outSay();
	}

}

结果:1
public class InnerTest {

	private int i = 2;

	private class InnerClass {

		public void say() {
			System.out.println(i);
		}
	}
	
	public void outSay() {
		InnerClass inn = new InnerClass();
		inn.say();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new InnerTest().outSay();
	}

}

结果:2
若将外部类中的变量去掉,则不能通过编译。
总之一个词:就近原则。
如果在第一种情况下,又想访问内部类属性,或者外部类属性。
可以用一下方法解决:
public class TestInnerClass {
	private String info = "out string";

	/**
	 * @param args
	 */
	private class InnerClass {
		private String info = "inner string";
		private void info() {
			String info = "局部变量";
			System.out.println(info);
			System.out.println(this.info);
			System.out.println(TestInnerClass.this.info);
		}
	}
	public void test() {
		InnerClass in = new InnerClass();
		in.info();
	}
	public static void main(String[] args) {
		new TestInnerClass().test();
	}

}

结果:
局部变量
inner string
out string




分享到:
评论

相关推荐

    java 利用反射获取内部类静态成员变量的值操作.docx

    本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...

    python中变量作用域及嵌套作用域.pdf

    在 Python 中,变量查找遵循 LGB 原则,即优先在局部作用域中对变量进行查找,失败则在外部作用域中进行查找,最后尝试再内建作用域内查找,如果还是未找到的话,则抛出异常。 变量名引用分为三个作用域进行查找:...

    支持含有中文变量名的表达式计算

    因为大多数编程环境不直接支持中文变量,所以需要在内部创建一个映射,将中文变量名映射到符合编程语言规范的临时变量,然后在计算时根据这个映射进行查找和替换。 在提供的文件列表中,“代码中国.txt”很可能是...

    javascript变量作用域

    在上面的代码中,我们定义了一个全局变量 rain,并在 rainman 函数中调用 inner 函数, inner 函数中没有定义 rain 变量,因此 JavaScript 会继续查找 rainman 函数中的 rain 变量,如果 rainman 函数中也没有定义 ...

    JS变量问题详解

    JavaScript中的变量是编程中一个非常基本且重要的概念,它存储各种数据类型的值,是程序中用于存储数据的容器。变量作用域的定义决定了变量可以被访问的区域,对于理解变量在不同上下文中的访问权限非常重要。 首先...

    CDT和JDT环境变量配置

    - 在“环境”选项卡中,可以添加、编辑或删除环境变量,这些配置只对Eclipse内部生效,不会影响系统全局环境。 4. 对于JDT,Eclipse通常会自动检测JAVA_HOME,但你也可以在“首选项” > “Java” > “安装详细信息...

    深入理解变量作用域

    - 如果在当前作用域找不到变量,则继续在上一层作用域中查找,依此类推,直到到达全局作用域。 - 这个查找过程确保了变量的正确访问顺序,并避免了命名冲突。 2. **示例解析** ```javascript var scope = ...

    python 函数内部修改外部变量的方法

    非局部作用域则用于在函数内部引用和修改外部嵌套函数或类中的变量。 当我们尝试在函数内部修改外部变量时,如果没有特别指定,Python默认使用局部作用域。这意味着在函数内部重新赋值一个已存在的变量时,Python会...

    Java 中包的概念,类的说明符与内部类20

    成员内部类就像是外部类的成员变量,可以访问外部类的所有成员,包括私有成员。局部内部类通常在方法或代码块中定义,其作用范围仅限于该方法或代码块。匿名内部类是在没有类名的情况下定义的类,常用于快速创建简单...

    学习python中变量作用域及嵌套作用域.pdf

    Python 中的变量名赋值会创建或者改变本地变量,全局声明将会给映射到模块文件内部的作用域的变量名赋值。 Python 中的 def、class、lambda 语句可以创建新的作用域,而 if、try、for 等语句不会产生新的作用域。 ...

    显示赋给变量的值的程序

    局部变量仅在定义它的函数或代码块内部可见,而全局变量在整个程序中都有效。变量的生命周期则指从创建到销毁的过程。 此外,了解操作符(如加减乘除、比较和逻辑操作符)如何与变量一起使用也很重要,因为这些操作...

    python中变量作用域及嵌套作用域.docx

    因此,变量查找的优先级顺序调整为:局部(Local)、外部(Enclosing)、全局(Global)和内置(Built-in)。 1. **局部作用域**:指的是在函数内部定义的变量的作用域。这些变量只能在该函数内部被访问。 2. **外部作用域...

    eclipse环境变量配置

    - **问题1**:如果在命令行中输入`java`或`javac`时出现“不是内部或外部命令”的错误提示,通常是因为PATH变量设置不正确。 - **解决方案**:检查PATH变量中是否包含了`%JAVA_HOME%\bin`和`%JAVA_HOME%\jre\bin`。...

    makefile的变量用法

    使用大写字母作为变量名是以前的习惯,但我们推荐在Makefile内部使用小写字母作为变量名,预留大写字母作为控制隐含规则参数或用户重载命令选项参数的变量名。 变量引用基础写一个美元符号后跟用圆括号或大括号括住...

    python中变量作用域及嵌套作用域扫描.pdf

    在Python中,变量的查找遵循LEGB(Local, Enclosing, Global, Built-in)原则,也就是从局部作用域开始查找,如果找不到再向外扩展到包含它的函数或类的外部作用域,接着是全局作用域,最后是内建作用域。...

    环境变量详细解释,轻松理解环境变量

    环境变量可以在操作系统级别设置,也可以在用户级别设置,甚至在某些情况下可以在程序内部动态修改。了解并正确设置环境变量对于软件开发和系统管理非常重要。 #### 二、JAVA_HOME `JAVA_HOME`是一个非常重要的...

    VS 2005变量跟踪及断点调试

    变量跟踪是指在程序调试过程中,追踪变量的值的变化,以便更好地理解程序的执行过程。断点调试则是指在程序执行过程中,设置断点,以便在特定的位置暂停程序的执行,并查看当前的变量值和程序状态。 在 VS 2005 中...

    提升效率之循环全局变量Global (1).pdf

    在循环开始前,`$ZR`指令将全局变量`^BLC("RFR", rfr)`加载到内存中,然后在循环内部使用这个引用。这种方式减少了循环中对全局变量的解析次数,从而可能提高效率。 3. **赋值变量 (Assigned Global)**: `...

    S7-1200 PLC变量表的使用-跟我学 视频.rar

    在S7-1200中,变量表提供了一种直观的方式来组织和管理程序中的输入、输出、内部寄存器以及全局变量。 1. **打开变量表**:在SIMATIC Step 7 Basic(TIA Portal)集成开发环境中,用户可以通过“视图”菜单选择...

Global site tag (gtag.js) - Google Analytics