`
Suzh.Q
  • 浏览: 19542 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

java匿名内部类访问外部变量要用final 修饰

    博客分类:
  • java
阅读更多
public void insert(User user) {
 	   final String name = user.getName();
 	   final int age = user.getAge().intValue();
 	   jdbcTemplate.update(
 	      "INSERT INTO user (name,age) VALUES(?,?)",
 	      new PreparedStatementSetter() {
 	            public void setValues(PreparedStatement ps) 
 	                                   throws SQLException {
 	               ps.setString(1, name);
 	               ps.setInt(2, age);
 	            }
 	         });
 	}

 

解释:在java中,方法是一种状态,是不能被存储的,对象才是真正被存储在堆内存中的。匿名内部类是在内部,是局部的,它所处的外部环境即方法,在执行完后就不存在了,但是内部类作为一个对象,是有可能被存储下来的。而局部变量也是如此,局部变量时存在于栈内存中的,使用完了就立即被消灭掉了,而匿名内部类访问局部变量,也是对它的一个拷贝而已;那么试想,局部变量都没了,匿名内部类还存在,这个匿名内部类要去哪找这个变量呢???只能让虚拟机报警了(编译失败)。所以就要将这个局部变量变为永久的常量才行。

分享到:
评论

相关推荐

    java 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

    Java 匿名内部类

    虽然标题没有明确指出,但值得注意的是,匿名内部类也可以作为类的成员,不过在这种情况下,它通常与外部类有密切的关系,可能访问外部类的成员变量和方法,包括private的。 5. **构造器**: 匿名内部类可以有...

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

    总结来说,局部内部类和匿名内部类只能访问final或等效final的局部变量,这是为了保证代码的可读性和内存管理的正确性。通过使用final关键字,我们可以确保内部类所使用的变量在创建后不会被意外地修改,从而避免了...

    Java为什么匿名内部类参数引用需要用final进行修饰?

    Java匿名内部类参数引用需要用final进行修饰的原因分析 Java中的匿名内部类参数引用需要用final进行修饰,这是因为内部类中使用的外部变量需要延长其生命周期,以便在回调时能够找到该变量。下面是详细的分析: ...

    Java语法总结 - 内部类

    方法内部类可以访问外部类的外部变量,但是不能访问外部类的外部方法。 匿名内部类 匿名内部类是指没有名字的内部类。匿名内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。匿名内部类可以使用在...

    匿名内部类核心重点知识讲解和经典例子讲解

    - **局部内部类**:在方法或作用域内定义,只能访问该作用域内的变量(需final修饰)和外部类的静态成员。 3. **匿名内部类与接口** - **实现接口**:匿名内部类可以直接实现一个接口,并提供接口中所有方法的...

    Java基础权限控制与final,内部类

    final修饰的内容包括类、方法和变量。final类不能被继承,这意味着一旦final类被定义,其他类就不能继承它。final方法不能被重写,即在子类中不能有相同签名的方法。final变量不能被重新赋值,这适用于局部变量、...

    Java内部类.pdf

    - 局部内部类:定义在方法或者作用域块中,不能有访问权限修饰符,只能访问方法中被final修饰的局部变量。 - 匿名内部类:没有类名的局部内部类,通常用在需要创建一个对象时,且仅需使用一次的场合。 - 静态内部类...

    使用内部和匿名类优化Java代码

    因此,应谨慎选择何时使用内部类和匿名类,确保它们的使用符合设计原则和代码规范,同时避免常见的错误,如未正确处理内部类与外部类的引用关系,以及在不必要的情况下使用匿名类。通过理解这些特性的工作原理和适用...

    java内部类的讲解

    - **更精细的访问控制**:内部类可以访问外部类的私有成员,这提供了更精细的封装和数据隐藏能力。 #### 三、示例解析 在提供的代码片段中,`JobIterator1.java`展示了内部类的实际应用。其中`Employee`类包含了一...

    JAVA内部类总结

    4. **内部类访问外部类**:非静态成员内部类可以通过`this`关键字访问外部类中的成员变量和方法。如果外部类的方法中存在同名变量,则可以通过`外部类.this.变量`的方式访问外部类的成员变量。 #### 三、静态成员...

    Java内部类访问规则.doc

    - 如果局部内部类要访问其所在方法的局部变量,该变量必须声明为`final`,否则无法访问。 5. **匿名内部类**: - 匿名内部类是没有名称的内部类,常用于简洁地实现单个接口或继承单个类的情况。 - 匿名内部类...

    Java内部类总结

    - **静态内部类**:也称为静态嵌套类,这种内部类通过`static`关键字修饰,不能直接访问外部类的实例成员,只能访问外部类的静态成员。 - **局部内部类**:是在一个方法或构造器内部定义的类,可以访问该方法或构造...

    Java 干货之深入理解Java内部类(学习资料)

    与成员内部类相似,局部内部类可以访问外部类的所有成员,但要求外部方法或作用域内的变量如果是非 final 的,则在 JDK 1.8 及以后版本中需要是 effectively final。局部内部类主要用于临时封装逻辑或创建一次性使用...

    13_Java面向对象_第5天(static、final、匿名对象、内部类、包、修饰符、代码块)_讲义

    本讲义主要涵盖了Java中的几个核心概念,包括`static`、`final`、匿名对象、内部类、包、修饰符以及代码块。下面将逐一详细阐述这些知识点。 1. **`static`关键字**: `static`关键字在Java中用于声明类级别的变量...

    局部变量用final的讨论

    2. **匿名内部类与final**:在Java中,如果一个局部变量要在匿名内部类中使用,那么它必须是`final`或effectively final(实际上相当于只赋值一次)。这是因为内部类可以访问外部类的final或effectively final变量,...

    java类修饰词和内部类详解

    - **非静态成员内部类**:非静态内部类是与外部类的一个实例关联的,可以通过外部类的实例来访问。非静态成员内部类可以访问外部类的所有成员,包括私有成员。同时,它可以拥有自己的实例变量和方法,但不能声明静态...

    内部类分类及应用

    外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。 二、静态嵌套类 静态嵌套类是指使用static关键字修饰的内部类。静态嵌套类可以访问外部类的静态成员变量,但不能访问非静态成员变量。...

Global site tag (gtag.js) - Google Analytics