开发者社区> 问答> 正文

java方法参数的修饰符问题

java在写方法时,为什么有的方法参数用final修饰?
还有就是内部类存在的意义是什么?
也就是说方法中的内部类和类中的内部类各有什么应用场景(请有实战经验的大神各自举个例子)?
//问题补充(关于方法中的内部类)
我的意思是:
pubic class TestClass{

 public  void fun(){
    
     public  class Test1{
   //........
     }

}
}

展开
收起
蛮大人123 2016-03-25 17:03:34 2291 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    为了实现一些内容,常常需要这么玩:

     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修饰符是为了在匿名对象的方法中使用此变量

    2019-07-17 19:14:44
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载