`

为什么AnonymousInnerClass只能访问final型非同一方法局部变量

阅读更多
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

public class Test {

	public static void main(String[] args) throws IOException {
		new Test().go();
	}
	
	public void go() {
		int period = 2000;
		int delay = 2000;

		double lastPrice = 0;
		double price = 0;
		
		Timer timer = new Timer();

		timer.scheduleAtFixedRate(new TimerTask() {
			public void run() {
				lastPrice = price;
			}
		}, delay, period);
	}

}

 

若如此使用,myeclipse会提示“Cannot refer to a non-final variable price inside an inner class defined in a different method”,可见多半不同方法的局部变量非final的不行,类的成员变量是可以的,经试验,的确如此~但为什么只能访问final型局部变量呢,仅仅是因为有可能造成在局部变量死亡后还有可能去引用局部变量吗?

 

参考:

http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-different

分享到:
评论

相关推荐

    java易混淆概念Anonymous Inner Class

    Java编程语言中存在一些易混淆的概念,今天我们将探讨 Anonymous Inner Class、final、finally、finalize 的区别,Static Nested Class 和 Inner Class 的不同,&和&&的区别,HashMap 和 Hashtable 的区别,...

    Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc

    ### Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释 #### 背景介绍 在Java编程语言中,局部内部类(Local Inner Class)是一种特殊的内部类形式,它被定义在某个方法或构造器的内部。...

    final修饰成员变量和局部变量.md

    本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行

    局部变量用final的讨论

    标题中的“局部变量用final”的讨论主要聚焦于Java编程语言中的一个特性,即使用`final`关键字修饰局部变量。在Java中,`final`关键字有多种用途,包括但不限于定义不可变对象、创建常量以及限制变量的赋值次数。在...

    局部内部类和匿名内部类使用局部变量为什么要final1

    然而,一个重要的限制是,这些内部类只能访问在其作用域内的final或者实际上等效于final的局部变量。这是因为内部类可能在外部方法结束后仍然存活并访问这些变量,而普通的局部变量在方法执行完毕后就被销毁了。以下...

    Java面试题,他会给你很好的Java面试准备,第一,谈谈final, finally, finalize的区别,第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    另外,在Java面试中,Anonymous Inner Class(匿名内部类)也是一个重要的知识点。匿名内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 在Java中,还有...

    final类,方法,变量

    同样,在Java 8及更高版本中,`final`局部变量可以作为lambda表达式的捕获变量,保证了lambda表达式只能读取而不能修改这些变量。 在工具方面,IDEs如Eclipse和IntelliJ IDEA提供了很好的支持来使用`final`关键字。...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    局部变量只能在声明它的代码块内访问。 4. 初始化:成员变量有默认初始值,类变量在类加载时初始化,局部变量必须在声明时或使用前初始化。 5. 是否共享:成员变量和类变量可能被多个对象共享,而局部变量仅在声明它...

    ClassFinal-java class文件安全加密工具

    Java ClassFinal是一款针对Java类文件的安全加密工具,主要用于保护开发者编写的Java代码不被轻易反编译和篡改,从而增强软件的安全性。在Java应用开发中,源代码的保护至关重要,因为Java的字节码(class文件)是可...

    day11 04 final关键字用于修饰局部变量

    day11_04_final关键字用于修饰局部变量

    ClassFinal是一款java class文件安全加密工具

    ClassFinal正是为解决这些问题而设计的一款Java类文件安全加密工具。这款工具能够对编译后的`.class`文件进行加密处理,使得未经授权的用户无法轻易读取或反编译代码,从而提高代码的安全性。 ClassFinal的特点在于...

    final和static用法详解JAVA

    final 关键字是 Java 中的一种访问修饰符,用于修饰类、方法和变量,以确保它们不能被修改或继承。下面是 final 关键字的详细解释: 1. final 类 final 类不能被继承,也就是说,final 类不能有子类。final 类中的...

    ClassFinal是一款java_class文件安全加密工具,支持直接加密jar包或war包

    ClassFinal是一款专业的Java字节码加密工具,它的主要功能是提供对Java编译后生成的.class文件的安全加密处理,保障Java应用程序代码的安全性。该工具具备直接加密jar包或war包的能力,这是因为它能够处理Java应用...

    java final变量详解

    在变量中,final 变量只能被赋值一次,赋值后值不再改变。在方法中,final 方法不能被子类方法覆盖,但可以被继承。在类中,final 类不能被继承,没有子类,final 类中所有方法都是 final 的。 final 变量的内存...

    动力节点老杜Java基础入门视频教程——final修饰局部变量

    012-JavaSE进阶-final修饰局部变量

    2022常见JAVA面试题一.docx

    本文将对 Java 面试题进行详解,涵盖 final、finally、finalize、Anonymous Inner Class、Static Nested Class、Inner Class、& 和&&、HashMap 和 Hashtable、Collection 和 Collections 等知识点。 一...

    深入解析Java编程中final关键字的作用

    对于引用类型,final变量只能指向一个对象,但对象的内容可以修改,除非对象本身也是final的。 - 对于局部变量,final的使用可以创建匿名内部类时的final局部变量,例如在lambda表达式中。 3. **final方法**: - ...

    Java中inner_class内部类

    2. 局部内部类:定义在方法内部的类,其作用域仅限于该方法,因此它不能访问方法外部的局部变量,除非这些变量是final的。 3. 匿名内部类:没有名字的内部类,通常用于快速实现接口或抽象类的一个简单版本,常用于...

    JavaSE之final关键字与成员变量的类型

    `final`关键字也可以修饰局部变量,这意味着一旦给局部变量赋值后,它的值就不可改变。例如: ```java public class DemoFinal { public static void main(String[] args) { final int num1 = 30; // num1 = ...

Global site tag (gtag.js) - Google Analytics