java 匿名内部类的方法参数需要final吗?

内部类通常都含有回调,引用那个匿名内部类的函数执行完了就没了,所以内部类中引用外面的局部变量需要是final的,这样在回调的时候才能找到那个变量,而如果是外围类的成员变量就不需要是final的,因为内部类本身都会含有一个外围了的引用(外围类.this),所以回调的时候一定可以访问到。

来自知乎http://www.zhihu.com/question/21395848

时间: 2024-10-05 00:37:52

java 匿名内部类的方法参数需要final吗?的相关文章

Java中的方法重写 与 final关键字

Java中的方法重写 与 final关键字 以下程序是否存在错误? class Base { private final void method() { System.out.println("In Base..."); } } class Sub extends Base { public void method() { System.out.println("In Sub..."); } } 答案 正确的. 使用final关键字可以声明类.成员变量和成员方法,一

java如何获取方法参数名

在java中,可以通过反射获取到类.字段.方法签名等相关的信息,像方法名.返回值类型.参数类型.泛型类型参数等,但是不能够获取方法的参数名.在实际开发场景中,有时需要根据方法的参数名做一些操作,比如像spring-mvc中,@RequestParam.@PathVariable注解,如果不指定相应的value属性,默认就是使用方法的参数名做为HTTP请求的参数名,它是怎么做到的呢? 在这样情况下,有两种方法获取方法来解决这种需求,第一种方法是使用注解,在注解中指定对应应的参数名称,在需要使用参数

Java中的方法参数传递方式

最近在系统学习Core Java,Java中的数据类型分为两种,第一种是基本数据类型(数字型和布尔型),第二种是类类型(即对象),起初,我以为第一种类型的参数是按值传递,第二种是按引用传递,但在学习Core Java的过程中,我发现这是错误的,先抛出最终结论:在Java中,所有的方法参数都是按值传递的!!!下面来进行解释. 第一种类型的参数是按值调用很好理解,主要是要说明第二种类型的参数也是按值调用的,看下面的一段程序: 1 public static void swap(A x, A y) 2

Java数据类型和方法参数

目录 [tpc] Java数据类型 Java变量类型可以分为两种,一种是存储在堆栈中的基本数据类型,一种是存储在堆里的Java对象. 基本数据类型有9种,4种整型,2种浮点型,1种Unicode字符型,1种布尔类型,1种void类型. void类型用于方法返回值,表示没有返回值. 基本类型 大小(字节) 包装器类型 byte 1 Byte short 2 Short int 4 Integer long 8 Long float 4 Float double 8 Double char 2 Ch

JAVA 类中方法参数与返回值

无参无返回值的方法,用public void 方法名,来声明: 有参无返回值的方法,用public void 方法名,来声明: 有参有返回值的方法,用public int 方法名(int i,int n),来声明(int 是参数的数据类型指定,也可以是其它数据类型,例如:String.char.double.int). 实例: //定义类 public class Test{ //无参无返回值的方法 public void eat(){ System.out.println("我在吃饭.&quo

java 匿名内部类 js 闭包

最近在看js,看到closure(闭包)这一块儿的时候就想到了 java的匿名内部类 两者都有涉及到变量/参数的引用问题. 先说java的匿名内部类,他的定义我就不多做说明了,可以参考地址 http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html .我们今天主要说: 1.Why cannot an anonymous class access local variables in its enclosing

Java函数(方法)的默认值问题

Java不能为函数(方法)设置默认参数. 原因是“默认参数”和“方法重载”同时支持的话有二义性的问题,但使用“方法重载”可以间接地实现”默认参数“的效果,例如: public class A{ public void doA(int a){ } public void doA(){ this.doA(0);//这里默认传入0,可以近似认为通过重载实现了默认值的设置 } } 参考: 1)java 能为方法参数设置默认参数吗 原文地址:https://www.cnblogs.com/GjqDream

JAVA方法中的参数用final来修饰的效果

很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改变的,但是如果修饰的是引用类型的变量,那么就需要注意了,引用类型变量所指的引用是不能够改变的,但是引用类型变量的值是可以改变的. 如下面的代码: package com.jd.test; public class Test{ public static vo

java 里定义的方法参数 (final String... args)

定义成final是为了防止在方法类里面修改参数,final String... args 为JDK新的特性,为可变长参数.编译的时候被解释为:public DCMException(final String id, final String[] args), 但是在编程中你可以给方法参数为 DCMException("id","arg1","arg2","arg3"....)这样编程人员更为方便,不必再次组装数组作为参数.