<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # `serialVersionUID`的用途是什么 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/use-serialversionuid/](https://javabeginnerstutorial.com/core-java-tutorial/use-serialversionuid/) 在這里,我將討論在可序列化類中使用的變量`serialVersionUID`的重要性。 下面是一個使您了解變量的確切用法的示例。 ## 示例代碼 `Employee.java` ```java package com.jbt; import java.io.Serializable; public class Employee implements Serializable { public String firstName; public String lastName; private static final long serialVersionUID = 5462223600l; } ``` `SerializaitonClass.java`(此類將用于序列化) ```java package com.jbt; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class SerializaitonClass { public static void main(String[] args) { Employee emp = new Employee(); emp.firstName = "Vivekanand"; emp.lastName = "Gautam"; try { FileOutputStream fileOut = new FileOutputStream("./employee.txt"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(emp); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in ./employee.txt file"); } catch (IOException i) { i.printStackTrace(); } } } ``` `DeserializationClass.java`(此類將用于反序列化) ```java package com.jbt; import java.io.*; public class DeserializationClass { public static void main(String[] args) { Employee emp = null; try { FileInputStream fileIn = new FileInputStream("./employee.txt"); ObjectInputStream in = new ObjectInputStream(fileIn); emp = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); return; } System.out.println("Deserializing Employee..."); System.out.println("First Name of Employee: " + emp.firstName); System.out.println("Last Name of Employee: " + emp.lastName); } } ``` 現在執行“`SerializationClass.java`”,然后執行“`DeserializationClass.java`”。 它將首先創建一個具有`Employee`對象狀態的文件,然后在反序列化時從同一文件創建一個對象。 輸出將如下所示。 ```java Serialized data is saved in ./employee.txt file ``` ```java Deserializing Employee... First Name of Employee: Vivekanand Last Name of Employee: Gautam ``` 現在讓我們嘗試從`Employee.java`文件中刪除“`serialVersionUID`”變量,然后再次運行“`SerializationClass.java`”文件。 它將再次創建帶有對象狀態的“`employee.txt`”文件。 現在讓我們在`Employee`類中假設字符串地址中添加一個新變量。 `Employee.java` ```java package com.jbt; import java.io.Serializable; public class Employee implements Serializable { public String firstName; public String lastName; public String Address; //Variable is commented // private static final long serialVersionUID = 5462223600l; } ``` 現在運行“`DeserializationClass.java`”并查看輸出。 ```java java.io.InvalidClassException: com.jbt.Employee; local class incompatible: stream classdesc serialVersionUID = 5462223600, local class serialVersionUID = -3607530122250644586 at java.io.ObjectStreamClass.initNonProxy(Unknown Source) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at com.jbt.DeserializationClass.main(DeserializationClass.java:11) ``` 它將引發不兼容的異常。 因為給定的類`Employee.java`在序列化和反序列化過程之間進行了更改。 因此,系統無法識別它仍然是同一類。 為了使我們的系統了解到它是同一類,您必須在一個類中使用`serialVersionUID`變量。 您可以嘗試執行上述步驟,但保持`serialVersionUID`不變,并查看輸出。 反序列化過程將正常進行。 ### 項目要點 * 在可序列化類中定義`serialVersionUID`字段不是必需的。 * 如果可序列化的類具有顯式的`serialVersionUID`,則此字段的類型應為`long`,并且必須是靜態且最終的。 * 如果沒有明確定義的`serialVersionUID`字段,則序列化運行時將計算該類的默認值。 該值可以根據編譯器的實現而變化。 因此,建議定義`serialVersionUID`。 * 建議對`serialVersionUID`使用私有訪問修飾符。 * 不同的類可以具有相同的`serialVersionUID`。 * 數組類無法聲明顯式的`serialVersionUID`,因此它們始終具有默認的計算值,但是對于數組類,無需匹配`serialVersionUID`值。 * 如果已加載的接收器類的`serialVersionUID`與相應的發送器類之間存在差異,則將引發`InvalidClassException`。 * 如果要禁止序列化同一類舊版本的新類,則應對同一類的不同版本使用不同的`serialVersionUID`。 ## `@SuppressWarnings("serial")` 如果您沒有在應該序列化的類中提供`serialVersionId`,則編譯器將給出有關該序列的警告消息。 如果要覆蓋此警告,則可以使用給定的注解。 使用后,編譯器將不再報錯缺少的`serialVersionUID`。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看