基础问题:final问题.高手指教!!谢谢!~~
public class test
{
public static void main(String[] args) {
innerB obj=new innerB(); //生成innerB 类对象
(1) Iner obj1=obj.d("gongchang"); //获得接口Iner 的一个引用
obj1.f(); //调用内部类中的f()
(2) obj1=obj.d("wangwei");
obj1.f();
}
}
interface Iner{ public void f( );} //接口
class innerB //类innerB
{
String s1="dd";
public Iner d(final String s2) //获取接口引用
{
return new Iner(){ //匿名内部类
public void f()
{
System.out.println(s1);
System.out.println(s2);
}
};
}
}
问题:
1.为什么s2一定要定义为final?如果不是final,会提示:cannot refer to a non-final variable inside an inner class defined in a different method
而s1没有这样的强制要求?
2.既然s2必须是final,也就是赋值之后不能再改变,为什么我可以调用两次(1)(2)?这是不是相当于给s2赋值两次?
请高手解惑!!!谢谢!~~
相关推荐
java 基础之final、finally和finalize的区别
主要介绍了java 基础之final、finally和finalize的区别的相关资料,需要的朋友可以参考下
多模态推荐工具箱实战:从环境搭建到模型训练与调优
多模态推荐系统通过融合图像、文本等异构特征与用户行为序列,提升推荐排序效果。其核心原理是利用预训练模型抽取视觉和文本特征,与协同过滤信号在统一框架中联合建模。技术价值在于解决纯ID类方法语义理解不足的问题,广泛应用于电商、短视频等图文混排场景。工程实践中,环境配置、特征对齐和显存优化是关键挑战。本文以Python和Jupyter Notebook为基础,介绍多模态推荐工具箱的使用,涵盖环境搭建、数据准备、模型训练及常见问题排查,帮助快速复现实验并落地业务。
【Java语言基础】final关键字
【Java语言基础】final关键字 修饰词:final 最终的最后的 final关键字可用于修饰符,变量和方法,用于表示它修饰的类,方法和方法不可改变。 final 最终的最后的 final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,并赋默认值。 实例变量:当创建对象时,系统会为该对象的实例属性分配内存,并赋默认值。 final修饰局部变量 可以在定义时指定默认值,则后面代码中不能再对改变量赋值。 如果在定义时没有指定默认值,则可以
详解static 和 final 和 static final区别
主要介绍了static 和 final 和 static final区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
终于明白为什么要加 final 关键字了!
作者:guanpj 链接:https://www.jianshu.com/p/acc8d9a67d0c 在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是不太相同的。 现象描述 在 Java 8 之前,匿名内部类在使用外部成员的时候,会报错并提示 “Cannot refer to a non-final variable arg inside an inner class defined in a different method”:


Java SE
