內部類的序列化問題;靜態變數不能被序列化的問題
1.父類序列化,則內部類也要序列化,不然會報錯。
2.靜態變數不能被序列化,得到的值一直是最新的值。
比如:
類 Test 中 有一個靜態變數 count ,我們的操作如下:
1.Test test1 = new Test() , test1.count = 10 ; 把Test寫入檔案a.txt中
2.Test test2 = new Test() , test2.count = 100 ;把Test寫入檔案b.text中
3.讀取a.txt的Test物件
4.讀取b.txt的Test物件
結果輸出的是 :
a.txt的Test物件的count = 100;
b.txt的Test物件的count = 100;
因為count沒有沒序列化,所以我們得到的一直都是Test類的靜態變數count的值(靜態變數是所有的物件共享的一個變數)
相關推薦
Java序列化之排除被序列化欄位(transient/靜態變數)
我們都知道一個物件只要實現了Serilizable介面,這個物件就可以被序列化,java的這種序列化模式為開發者提供了很多便利,我們可以不必關係具體序列化的過程,只要這個類實現了Serilizable介面,這個類的所有屬性和方法都會自動序列化。 然而在實際
C# 靜態內部類單例模式-靜態變數何時初始化
對於一個類的靜態變數何時初始化,大家都有一個普遍的共識,那就是第一次使用該類時,初始化該類的所有靜態變數和靜態方法。 /// <summary> /// 只有在第一次使用到Test1的時候,才會初始化Test1.x //
匿名內部類可以訪問的變數---靜態成員變數和final修飾的區域性變數
在學習多執行緒的時候用到了匿名內部類,匿名內部類可以訪問static靜態成員變數或者final修飾的區域性變數。 匿名內部類在編譯之後會生成class檔案,比如Test內的第一個匿名內部類編譯之後就是Test$1.class; 匿名內部類中訪問的final修飾的區域性變數在生成Test$1.c
static{}(即static塊),會在類被載入的時候執行且僅會被執行一次,一般用來初始化靜態變數和呼叫靜態方法
這裡是一個工具類,因為連線配置資訊只需要執行一次就行所以採用static塊 static塊會最先執行 package com.my.jedis; import java.io.IOException; import java.io.InputStream; import
靜態變數的初始化,靜態變數在類內定義,在類外進行初始化。
靜態變數的初始化,只能在類外進行,靜態變數在類外初始化要加上::,同時不能加上static 關鍵了。 為什麼不在類內進行初始化,因為靜態變數是公共的,不依賴與每個物件,所以它是獨立的,所以靜態變數
靜態內部類和非靜態內部類的區別
依賴 table width idt 靜態屬性 bsp 訪問 實例化 外部 靜態屬性和方法 訪問外部類的屬性和方法 實例化 靜態內部類 有 只能訪問靜態的 依賴於外部類的實例 非靜態內部類 無 所有 可以直接實例化 靜態內部類和非靜態內部類的區別
Javaz中,成員內部類的常見修飾符及應用 && 成員內部類不是靜態的,訪問的格式
pri http col 格式 png log 註意 color 必須 成員內部類的常見修飾符及應用: private 為了保證數據的安全性 static 為了方便訪問數據 註意:靜態的內部類訪問外部類的數據時,外部類的數據必須用靜態修
Java的內部類(無靜態內部類)
package tgjavaday5; import org.omg.CORBA.PUBLIC_MEMBER; /** * * @author asus Tiger * 對四大內部類的實現 */ //成員內部類 interface inter1{ void interFun()
Java的靜態內部類與非靜態內部類的區別
1 static 靜態修飾符 在程式中任何變數或者程式碼都是在編譯時由系統自動分配記憶體來儲存的。 static修飾表示靜態的,在類載入時JVM會把它放到方法區,被本類以及本類中所有例項所公用。在編譯後所分配的記憶體會在一直存在,直到程式退出記憶體才會釋放這個空間。如果一個被所有例項
靜態內部類和非靜態內部類之間的區別
靜態內部類和非靜態內部類之間的區別 /* * https://blog.csdn.net/xiaomogg/article/details/78231356 */ class OuterClass { public static class StaticInnerClass {
靜態內部類和非靜態內部類
結論: 1.靜態內部類只能夠訪問外部類的靜態成員,非靜態內部類可以訪問外部類的所有成員。 2.靜態內部類能有靜態成員(方法、屬性),非靜態內部類不能有靜態成員(方法、屬性)。 3.靜態內部類和非靜態內部類在建立時有區別。靜態內部類即使外部類沒有被建立時依然存在。非靜態內部類必須通過外部物
全域性變數、類靜態變數及函式區域性靜態變數的初始化順序
What is the lifetime of class static variables in C++? First the list of possibilities. Namespace Static Class Static Local Static
“全棧2019”Java第七十七章:抽象內部類與抽象靜態內部類詳解
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第七十七章:抽象內部類與抽象靜態內部類詳解 下一章 “全棧2019”Java第七十八章:內部
使用外部類呼叫內部類的方法和變數
public class Test { public static void main(String[] args) { //第一種方式: Outter outter = new Outt
非靜態內部類、非靜態匿名內部類會持有外部物件的引用
3、適當的考慮下是否應該使用執行緒.Android應用框架設計了許多的類來簡化執行後臺任務,我們可以使用與Activity生命週期相關聯的Loaders來執行簡短的後臺查詢任務。如果一個執行緒不依賴與Activity,我們還可以使用Service來執行後臺任務,然後用BroadcastReceive
JAVA 在外部類外部訪問內部類,靜態內部類和非靜態內部類的區別
在外部類外部訪問非靜態類內部類: package a; class Wai{ class Nei{ int i=3; } } public class test{ public
細說匿名內部類方式建立執行緒、初始化HashMap
先來看看使用匿名內部類建立執行緒和初始化HashMap的示例程式碼: 使用匿名內部類建立執行緒: new Thread() { public void run() { System.out.println("匿名內部類建立執行緒並啟動
Java基礎,外部類能夠訪問內部類的私有靜態欄位。
外部類能夠訪問內部類的私有靜態欄位。 public class Singleton { private Singleton() { } public static Singleton getInstance() { retur
匿名內部類訪問方法成員變數需要加final的原因及證明
在java程式設計中,沒用的類定義太多對系統來說也是一個負擔,這時候我們可以通過定義匿名內部類來簡化程式設計,但匿名內部類訪問外部方法的成員變數時都要求外部成員變數新增final修飾符,final修飾
內部類中引用的變數必須要宣告為final的原因
查了下看到有人說原因如下: 區域性匿名類在原始碼編譯後也是要生成對應的class檔案的(一般會是A$1.class這種形式的檔案),那麼這個二進位制檔案是獨立於其外圍類(A.class)的,就是說它無法知道A類中方法的變數。但是A$1.class又確實要訪問A類對應方法的區域性變數的值。。。怎麼辦呢?