java在写方法时,为什么有的方法参数用final修饰?
还有就是内部类存在的意义是什么?
也就是说方法中的内部类和类中的内部类各有什么应用场景(请有实战经验的大神各自举个例子)?
//问题补充(关于方法中的内部类)
我的意思是:
pubic class TestClass{
public void fun(){
public class Test1{
//........
}
}
}
为了实现一些内容,常常需要这么玩:
public void test() {
Comparable c = new Comparable(){
@Override
public int compareTo(Object o) {
return 0;
}
};
}
你所看到的是实现了一个接口(用Comparable为例)的匿名类,现在,提出了一个需求:方法中有一个局部变量a,这个匿名类需要实现将别的值和这个方法中的局部变量值作比较。
这样的方法使用存在着固有问题:
public void test() {
String str = new String("进行比较");
Comparable<String> c = new Comparable<String>(){
public Object comparing;
@Override
public int compareTo(String o) {
return str.compareTo(o);
}
};
str = new String("值改变了");
c.compareTo("进行比较");
}
//警告:这是一段错误的代码
这其中的逻辑漏洞在于:方法中的局部变量已经改变了指向,调用方法时的那个str是该指向"进行比较"还是"值改变了"呢?
c语言的指针用法可以很明确的传达这些信息,但Java抛弃了指针,这个问题就必须用另一种方式进行明确。
final 修饰符的含义是,这个变量所指向的信息是不可修改的。也就是说
` final String str = new String("进行比较");
str = new String("值改变了");`
//警告:这是一段错误的代码
这两条语句本身就是矛盾的,编译器会直接阻止这种赋值语法。
这样,匿名内部类的方法中取用的变量就一定是定义时的那个值,也就不再害怕因为变量改变指向导致语法逻辑不清晰。
同样的,final修饰符也可以挂在参数上,意义和局部变量是一样的。
简单地说,final修饰符是为了在匿名对象的方法中使用此变量
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。