程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 內部類-java方法參數的修飾符問題

內部類-java方法參數的修飾符問題

編輯:編程綜合問答
java方法參數的修飾符問題

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修飾符是為了在匿名對象的方法中使用此變量

qq_26946497
Dzq_Boyka
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved