`
Javaloverlover
  • 浏览: 343186 次
  • 性别: 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




分享到:
评论

相关推荐

    【05-面向对象(下)】

    名字的局部变量,就使用该变量,如果不存在,则到该方法所在的内部类中查找是否存在该名字的属性,如果存在 则使用该属性。 •总之,第一步先找局部变量,第二步,内部类的属性,第三步。外部类的属性。 ...

    Python语言基础:作用域.pptx

    02作用域的查找顺序作用域的查找顺序在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。 规则顺序:?L -> E -> G -> B。在局部找不到,便会去局部外的局部找...

    实验4 数组(4学时)

    在每次内部循环中,将matrix[i][j]赋值为(i*j)。 通过循环打印matrix中的所有元素,结果为:           4、利用二维数组实现一个矩阵类:Matrix。要求提供以下操作:(1)set(int row, int col, double ...

    java内部学习笔记.docx

    3.16内部类 26 3.17匿名类 27 3.18二维数组和对象数组 28 3.19其他注意事项 28 Java SE核心I 30 4.1 Object类 30 4.2 String类 31 4.3 StringUtils类 33 4.4 StringBuilder类 33 4.5正则表达式 34 4.6 Date类 35 4.7...

    21天学通Java-由浅入深

    240 12.2.1 创建局部内部类 240 12.2.2 在局部内部类中访问外部类成员变量 240 12.2.3 在局部内部类中访问外部类的局部变量 241 12.2.4 静态方法中的局部内部类 243 12.3 静态内部类 244 12.3.1 创建静态内部类 244 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的引用 147 6.2.3 使用点操作符的技巧 148 6.2.4 类的数组 149 6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车...

    Qt记事本功能齐全,主要实现打开、新建、保存、另存为、查找、居中、字体、颜色、剪切、复制、粘贴等功能

    运用Qt开发工具来实现一个记事本,用户图形界面操作,通过Qt提供的图形库来设计记事本的管理、应用基本窗口,主要实现打开、新建、保存、另存为、查找、居中、字体、颜色等功能设计,同时在软件内部实现对于这些功能的...

    浅谈JS封闭函数、闭包、内置对象

    函数内部访问变量时,先在内部查找是否有此变量,如果有,就使用内部,如果没有,就去外部查找 二、封闭函数封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数。 1、一般函数...

    javaSE代码实例

    15.2.3 静态方法中的局部内部类 331 15.3 静态内部类 332 15.3.1 语法规则 332 15.3.2 创建静态内部类的对象 332 15.3.3 静态/非静态内部类的区别 333 15.4 匿名内部类 334 15.4.1 基于继承的匿名内部...

    计算机二级公共基础知识

    例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    *5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    *5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...

    C学习深入学习总结

    1.1 全局变量,局部变量,,常量分别保存在内存中的什么地方? 3 1.2 不同类型的变量,你是否知道其作用域? 3 1.3 全局变量和局部变量是否可以重名?你是否在这样做? 3 1.4 局部变量在函数退出后是否有效,为什么?...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

Global site tag (gtag.js) - Google Analytics