搜尋
首頁Javajava教程java嵌套類Android開發必知

嵌套類別指定義在另一個類別的內部的類,嵌套類別的存在只是為了他的外圍類別。巢狀類別有四種:靜態成員類,非靜態成員類,匿名類別,局部類別。

  • 靜態成員類別是最簡單的一種巢狀類別。最好把它看做是一個普通的類,只是剛好定義在另一個類別的內部。靜態成員類別可以存取外圍類別的所有成員,包括那些私有的變數。靜態成員類別同樣遵守可訪問性規則,如果將它定位私有,它就指在外圍類別的內部才能存取。

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
    static class ImageVH extends RecyclerView.ViewHolder {
           //代码省略
        }
    }
  1. Android中 最熟悉listview的ViewHolder我們通常使用的就是靜態成員類,通常作為一個公有的輔助類。作為Listview的緩存變數緩存view中佈局。

  2. 私人靜態成員類,用來代表外圍類別所代表的物件的元件。

    程式碼如下

  • 非靜態成員類別與靜態成員類別的語法差異在於是否有修飾符static 。儘管它們的語法很像,但是兩者的差異很大。非靜態成員類別的每個實例都隱含這與外部類別的外圍實例相關聯,非靜態成員類別實例方法內部,可以呼叫外圍實例上的方法,只有靜態成員類別的實例可以在外圍類別獨立存在,沒有外圍實例的情況下,無法建立非靜態成員類別的實例。

    當非靜態成員類別的實例創建,它與外圍實例之間的關聯也隨之被建立,而且這種關聯關係以後不能被修改。 這個關聯通常發生在外圍類別的某個實例方法呼叫了非靜態成員類別的建構器時。 這種關聯關係需要消耗非靜態成員類別實例的空間,並增加了建構的時間開銷。 如果成員類別不需要存取週邊類別實例 請加上static修飾詞

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
     class ImageVH extends RecyclerView.ViewHolder {
               // 真是对外部类的实例持有,在Android开发中很大部分activity中的context的内存泄露因为这个原因。
        }
    }
  • 匿名類別不同與JAVA的其他語法單元,匿名類別沒有名字,它不是外圍類別的一個成員,它不與其他的成員一起被申明,而是在使用的同時被聲明實例化。匿名類別可以出現在程式碼任何存在表達式的地方。只有匿名類別出現在非靜態的環境中,他才有外圍實例,即使它聲明在靜態的環境中,也不可能擁有任何靜態成員。

    imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // 代码省略
                    }
                });
  • 局部類別在任何"可以宣告局部變數"的地方宣告。同樣遵守作用域規則,1. 局部類別擁有名字,可以重複使用。 2. 與匿名類,只有當局部類別是在非靜態環境定義的時候,才有外圍實例,不能包含靜態成員。

    public class mainActivity extends Activity{ 
    private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
               // 此处同样可能引起context持有导致的内存泄露
            }
        };
      }
  •  

    以上是java嵌套類Android開發必知的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

    本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

    如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

    本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

    如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

    本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

    如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

    本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

    Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

    Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.如果您聽不到任何人,如何修復音頻
    3 週前By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25:如何解鎖Myrise中的所有內容
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境

    SublimeText3 英文版

    SublimeText3 英文版

    推薦:為Win版本,支援程式碼提示!

    Atom編輯器mac版下載

    Atom編輯器mac版下載

    最受歡迎的的開源編輯器