Dzq_Boyka 2015-12-25 15:48 采纳率: 0%
浏览 1858
已采纳

java方法参数的修饰符问题

java在写方法时,为什么有的方法参数用final修饰?
还有就是内部类存在的意义是什么?
也就是说方法中的内部类和类中的内部类各有什么应用场景(请有实战经验的大神各自举个例子)?

//问题补充(关于方法中的内部类)
我的意思是:
pubic class TestClass{

                                                    public  void fun(){

                                                                            public  class Test1{
                                                                                            //........
                                                                            }

                                                    }

                                }
  • 写回答

6条回答 默认 最新

  • 谁用了我的英文名 2015-12-26 04:45
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行