Java 內部類呼叫外部類方法的一個注意點
今天在寫程式碼的時候,涉及到使用一個內部類去呼叫外部類方法的問題,總是得不到我想要的結果,後經過DEBUG,才發現哪裡出現了問題。現寫了一個簡單的程式碼,來重現這個問題。
打印出來的結果為:
a: 20
a: 0
a: 20
為什麼是這麼一個結果呢?我想,對第一個 20,大家應該沒有任何意見吧。那麼第二個為什麼是 0 呢?我一開始一直以為打印出來的應該是 20,所以一直沒想通,但看了以下兩張 DEBUG 的圖之後,大家應該明白為什麼了吧。請注意圖中的斷點,與相應的 InnerClassDemo 的 id。
回過頭來看第一張圖: ② 對應的 InnerClass 中的 test() 方法實際上呼叫的是 ① 對應的 InnerClassDemo 的 print(),且此時它的 a 的值仍為 0, 而 ④ 對應的InnerClass 中的 test() 方法實際上呼叫的是 ③ 對應的 InnerClassDemo 的 print(),而它的 a 的值已經經過 setA() 被賦值為了 20。所以,才會出現上面的列印結果。
相關推薦
Java 內部類呼叫外部類方法的一個注意點
今天在寫程式碼的時候,涉及到使用一個內部類去呼叫外部類方法的問題,總是得不到我想要的結果,後經過DEBUG,才發現哪裡出現了問題。現寫了一個簡單的程式碼,來重現這個問題。 打印出來的結果為: a: 20 a: 0 a: 20 為什麼是這麼一個結果呢?我想,對第一個 20
內部類呼叫外部類方法時傳參的問題
上問題程式碼 public class SettingActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {
內部類呼叫外部類屬性(new 物件,屬性重新初始化)
package com.example.myapplication; import android.app.Activity; import android.os.Bundle; import a
呼叫內部類的私有方法,其中內部類和外部類的構造器都是私有的
1.首先類如下: package test; public class Outer { private Outer() { } private void eat(String food) { System.o
Java內部類引用外部類中的局部變量為何必須是final問題解析
lib soft 編譯器 art http word tail ace 軟件 今天編寫一個多線程程序,發現在方法內定義內部類時,如果內部類調用了方法中的變量,那麽該變量必須申明為final類型,百思不得其解,後來想到應該是生命周期的原因,因為方法內定義的變量是局部變量,
Java內部類持有外部類的引用詳細分析與解決方案
調用 lai urn star keyword inner android get sta 在Java中內部類的定義與使用一般為成員內部類與匿名內部類,他們的對象都會隱式持有外部類對象的引用,影響外部類對象的回收。 GC只會回收沒有被引用或者根集不可到達的對象(取決於GC算
java關於類(內部類,外部類,匿名類)的相關面試題
一個“.java”原始檔中是否可以包含多個類(不是內部類)?有什麼限制? 答:可以,但一個原始檔中最多隻能有一個公開類(public class)而且檔名必須和公開類的類名完全保持一 致。 Anonymous Inner Class(匿名內部類)是否可以繼承其它類?是否可以實現介面
java提高篇——內部類和外部類的區別與聯絡
定義在一個類內部的類叫內部類,包含內部類的類稱為外部類。 連結:https://www.cnblogs.com/aademeng/articles/6192954.html https://www.cnblogs.com/yzssoft/p/7156809.html http://www.
“全棧2019”Java第七十二章:靜態內部類訪問外部類成員
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第七十二章:靜態內部類訪問外部類成員 下一章 “全棧2019”Java第七十三章:外部類裡多
“全棧2019”Java第七十五章:內部類持有外部類物件
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第七十五章:內部類持有外部類物件 下一章 “全棧2019”Java第七十六章:靜態、非靜態內
Java內部類和外部類互相訪問問題
今天在分析android的AMS的時候,發現在AMS中出現了內部類訪問外部類私有方法的操作,一時之間覺得有些奇怪:為毛private的方法可以被訪問??之前的認識是private方法是不可以通過物件方式呼叫的,但是現在的程式碼確實這麼做了!!為什麼呢? 帶著這
關於Java的一些小總結-內部類、外部類
內部類: 內部類一般來說共分為4種:常規內部類、靜態內部類、區域性內部類、匿名內部類 一.常規內部類:常規內部類沒有用static修飾且定義在在外部類類體中。 1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。 2
Java 內部類與外部類的關係
由於方法中的宣告的變數,它是在方法執行時,載入到棧記憶體中,隨著方法執行結束就會被銷燬釋放。而匿名內部類是類成員的一種,它的生命週期跟外部類是一致的,這就導致方法中的變數被銷燬後,匿名內部類物件還可以訪問它,這顯然不符合邏輯。所以java這樣解決,使用final修飾,首先讓大家都不要再改動,然後匿名內部
java中的內部類和外部類的區別
由於方法中的宣告的變數,它是在方法執行時,載入到棧記憶體中,隨著方法執行結束就會被銷燬釋放。而匿名內部類是類成員的一種,它的生命週期跟外部類是一致的,這就導致方法中的變數被銷燬後,匿名內部類物件還可以訪問它,這顯然不符合邏輯。所以java這樣解決,使用final修飾,首先讓大家都不要再改動,然後匿名內部
再續:匿名內部類呼叫父類方法或訪問父類成員
public class Fat { protected String x="hi";
java連結串列 分別用內部類和外部類實現
在這裡我將使用外部類和內部類兩種方法來實現java的連結串列,參考了java老師上課講過的程式碼~ 主要思想是:首先要有一個Node類(節點類),其成員變數為String 型別的name,還有一個Node型別的next,作為指向下一個節點的指
Java中靜態內部類與外部類關係說明
先貼程式碼:public class AccessStaticInnerClass {private int prop1=1;private static int prop2=2;static class StaticInnerClass{private static
java內部類引用外部類中的變數 必須是final
@Test//資料庫連線池DBCPpublic void testDBCP(){//建立連線池BasicDataSource ds=new BasicDataSource();//給連線池新增必要的屬性//可以將這些屬性去掉set首字母小寫,寫在.properties檔案中ds.setUsername("ro
匿名內部類訪問外部類方法中的區域性變數
匿名內部類不能訪問外部類方法中的區域性變數,除非變數被宣告為final型別 1. 這裡所說的“匿名內部類”主要是指在其外部類的成員方法內定義,同時完成例項化的類,若其訪問該成員方法中的區域性變數,區域性變數必須要被final修飾。 2. 原因是編
Java內部類引用外部類中的區域性變數為何必須是final問題解析
今天編寫一個多執行緒程式,發現在方法內定義內部類時,如果內部類呼叫了方法中的變數,那麼該變數必須申明為final型別,百思不得其解,後來想到應該是生命週期的原因,因為方法內定義的變數是區域性變數,離開該方法,變數就失去了作用,也就會自動被消除,而內部類卻不會