找到 343 篇文章 關於 Java 程式設計

如何防止序列化破壞單例類模式?

Arjun Thakur
更新於 2020-06-23 14:38:06

561 次瀏覽

單例模式規定一個類只能有一個例項,並且不允許建立多個例項。為此,我們將類的建構函式設為私有,並透過靜態方法返回一個例項。但是,使用序列化,我們仍然可以建立類的多個例項。請參見下面的示例 - 示例 - 破壞單例 線上演示import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Tester{    public static void main(String[] args)    throws ClassNotFoundException, IOException{       A a = A.getInstance();       A b ... 閱讀更多

如何防止反射破壞單例類模式?

Chandu yadav
更新於 2020-06-23 14:43:37

746 次瀏覽

單例模式規定一個類只能有一個例項,並且不允許建立多個例項。為此,我們將類的建構函式設為私有,並透過靜態方法返回一個例項。但是,使用反射,我們仍然可以透過修改建構函式作用域來建立類的多個例項。請參見下面的示例 - 示例 - 破壞單例 線上演示import java.io.Serializable; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class Tester {    public static void main(String[] args) throws    InstantiationException, IllegalAccessException,    IllegalArgumentException, InvocationTargetException{       A a = A.getInstance();     ... 閱讀更多

如何防止克隆破壞單例類模式?

George John
更新於 2020-06-23 14:27:50

1K+ 次瀏覽

單例模式規定一個類只能有一個例項,並且不允許建立多個例項。為此,我們將類的建構函式設為私有,並透過靜態方法返回一個例項。但是,使用克隆,我們仍然可以建立類的多個例項。請參見下面的示例 - 示例 - 破壞單例public class Tester{    public static void main(String[] args)    throws CloneNotSupportedException {       A a = A.getInstance();       A b = (A)a.clone();       System.out.println(a.hashCode());       System.out.println(b.hashCode());    } } ... 閱讀更多

如何在 Java 中防止類的物件被垃圾回收?

Ankith Reddy
更新於 2020-06-23 14:30:45

228 次瀏覽

如果一個物件不再被活動引用所引用,那麼它就具備了被垃圾回收的資格。請參見下面的示例 - 示例public class Tester{    public static void main(String[] args) {       test();    }    public static void test(){       A a = new A();    } } class A {}當 test() 方法執行完成時,a 物件不再被引用,並且具備了被垃圾回收的資格。Java 垃圾回收器將在其執行時釋放該物件。為了防止垃圾回收,我們可以建立一個物件的靜態引用,然後 ... 閱讀更多

Java 程式檢查字串中每個字元的出現次數

Chandu yadav
更新於 2024-09-05 11:23:51

21K+ 次瀏覽

要查詢字串中每個字元出現的次數,我們可以使用 Java 的 Map 工具。在 Map 中,鍵不能重複,因此將字串的每個字元都作為 Map 的鍵,併為每個鍵提供初始值為 1(如果該字元之前未插入到 Map 中)。現在,當一個字元作為鍵重複插入 Map 時,將其值增加 1。對每個字元都執行此操作,直到所有字串字元都插入為止。問題陳述用 Java 編寫程式 檢查字串中每個字元出現的次數 ... 閱讀更多

如何在 Java 中解析 JSON?

Arushi
更新於 2020-06-22 11:30:03

3K+ 次瀏覽

本文介紹如何使用 Java 程式語言對 JSON 物件進行編碼和解碼。讓我們從準備環境開始,開始使用 Java 進行 JSON 程式設計。環境在使用 Java 對 JSON 進行編碼和解碼之前,您需要安裝任何可用的 JSON 模組。在本教程中,我們下載並安裝了 JSON.simple,並將 json-simple-1.1.1.jar 檔案的位置新增到環境變數 CLASSPATH 中。JSON 和 Java 實體之間的對映JSON.simple 在解碼或解析時將左側的實體對映到右側,並在編碼時將右側的實體對映到左側。JSONJava字串java.lang.String數字java.lang.Number真|假java.lang.Boolean空null陣列java.util.List物件java.util.Map在解碼時, ... 閱讀更多

如何在 Java 中測量函式執行時間?

Arushi
更新於 2020-06-22 11:30:52

304 次瀏覽

java.lang.System.currentTimeMillis() 方法可用於計算 Java 中函式的執行時間。技巧很簡單。使用 currentTimeMillis() 獲取方法呼叫前的時間和呼叫後的時間,其中呼叫前的時間是呼叫方法時的時間,呼叫後的時間是方法執行完成時的時間。請參見下面的示例 - 示例 線上演示public class Tester{    public static void main(String[] args) {       long startTime = System.currentTimeMillis();       longRunningMethod();       long endTime = System.currentTimeMillis();       System.out.println("Time taken: " + (endTime -startTime) + " ms");    }    private static void longRunningMethod() {       try {          Thread.sleep(1000);       } catch (InterruptedException e) {          e.printStackTrace();       }    } }輸出Time taken: 1000 ms

如何在 Java 中比較兩個陣列?

Paul Richard
更新於 2020-06-22 11:31:37

13K+ 次瀏覽

可以使用以下方法在 Java 中比較陣列使用 Arrays.equals(array1, array2) 方法 - 此方法遍歷陣列的每個值,並使用 equals 方法進行比較。使用 Arrays.deepEquals(array1, array2) 方法 - 此方法遍歷陣列的每個值,並使用任何重寫 equals 方法進行深度比較。對陣列使用 == 不會產生預期結果,它會將它們作為物件進行比較。請參見下面每個比較方式的示例。示例 線上演示import java.util.Arrays; public class Tester{    public static void main(String[] args) {       int[] array1 = {1, 2, 3};       int[] ... 閱讀更多

如何在 Java 中使物件具備垃圾回收資格?

Fendadis John
更新於 2019-07-30 22:30:23

177 次瀏覽

Java 垃圾回收器跟蹤活動物件,並將不再需要的物件標記為垃圾回收物件。它使開發人員無需考慮記憶體分配/釋放問題。JVM 使用堆進行動態分配。在大多數情況下,作業系統會預先分配堆,然後在程式執行期間由 JVM 管理。它以以下方式提供幫助:由於不再需要每個物件的 OS 級同步,因此物件建立速度更快。物件分配佔用一些記憶體並增加偏移量。當不再需要某個物件時,垃圾回收器…… 閱讀更多

Java 為什麼嚴格按值傳遞?

Arushi
更新於 2020-06-22 11:32:45

242 次瀏覽

按值呼叫是指使用值作為引數呼叫方法。透過這種方式,引數值會被傳遞給形參。而按引用呼叫是指使用引用作為引數呼叫方法。透過這種方式,引數引用會被傳遞給形參。在按值呼叫中,對傳遞的引數所做的修改不會反映在呼叫方的作用域中,而在按引用呼叫中,對傳遞的引數所做的修改是持久的,並且更改會反映在呼叫方的作用域中。但是 Java 僅使用按值傳遞。它會建立引用的副本並傳遞…… 閱讀更多

廣告