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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里