主頁 > 後端開發 > 詳談Java中Properties配置類怎么用

詳談Java中Properties配置類怎么用

2023-05-30 07:38:38 後端開發

本文將為大家詳細講解Java中Properties配置類怎么用,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題!

文章較長,干貨滿滿,建議大家收藏慢慢學習,文末有本文重點總結,主頁有全系列文章分享,技術類問題,歡迎大家和我們一起交流討論!

前言

在前面的幾篇文章中,給大家講解了Java里的List、Set和Map等集合

所以現在我們知道,Map集合作為一個雙列集合,有keyvalue兩個值,這兩個值共同組成了key-value鍵值對的映射關系,而正是這種映射關系,使得Map集合可以解決我們在開發時遇到的組態檔問題,

所謂的組態檔問題,是指我們在開發時,經常需要讀取和修改一些配置資訊,比如資料庫、訊息佇列、Nginx、Web服務器等的配置,這些配置資訊在測驗環境、開發環境和線上環境里的值是不同的,我們經常需要在幾種環境中反復地修改配置資訊,為了便于修改這些資訊,我們可以采用Map集合來對這些資訊進行封裝和操作,尤其是給我們提供了一個Properties配置類,更是方便了我們的操作,那么今天,就給大家講一下Properties配置類是怎么回事,以及怎么使用,


全文大約【3600】 字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考...

一. Properties簡介

1. 概述

在Java開發中,我們經常需要讀取和寫入組態檔,用來存盤程式中的一些配置資訊,例如資料庫的連接資訊、郵件和Web服務器的資訊、訊息佇列的資訊等等,組態檔一般都是key-value形式,且它的key-value一般都是String-String型別的,因此我們完全可以用Map<String, String>來表示它,

但因為組態檔特別常用,所以Java集合庫給我們提供了一個Properties類來表示一組“配置”,專門用來處理key-value形式的配置資訊,Properties類可以表示一個持久的屬性集,每個鍵及其對應的值都是字串型別,它可以把配置資訊保存在一個IO流中,或是從一個IO流中加載配置資訊,因此很適合用來處理組態檔,

Properties的內部本質上是一個Hashtable,該類從Hashtable中繼承了get()和put()方法,這些方法的引數簽名是Object,但由于歷史遺留原因,Properties的設計實際上是有問題的,不過為了保持兼容性,現在已經沒法修改了,所以我們在使用Properties時,不要去呼叫這些從Hashtable繼承來的方法,而應該使用Properties自身關于讀寫配置的方法,比如getProperty()和setProperty()等方法,

2. 組態檔

既然今天我們想利用Properties類來對組態檔進行讀取,所以首先我們得認識一下什么是組態檔,在Java中,組態檔其實有多種格式,可以是 .txt、.xml、.properties、.yml、.json等格式,今天要給大家介紹的就是基于.properties格式的組態檔,

在Java中,其實默認的組態檔就是以.properties為擴展名的,該檔案中的每行資訊都是以key=value表示的,并用#進行注釋,以下是一個典型的組態檔:

# db.properties

\#資料庫的url
jdbc.url=jdbc:mysql://localhost:3306/mydb
\#用戶名
jdbc.username=root
\#密碼
jdbc.password=root

我們可以在eclipse等IDE工具中直接創建.properties檔案,然后把上面的這些配置資訊復制進去即可,

3. 常用方法

我們在使用Properties類讀寫組態檔時,常常會用到以下方法:

public synchronized void load(InputStream inStream) throws IOException
    
public synchronized void store(OutputStream out, String comments) throws IOException

其中,load()方法用于從指定的輸入流中讀取屬性串列(鍵和元素對),store()方法用于將Properties中的鍵值對存盤到指定的輸出流中,

4. 讀取步驟

在Java中利用Properties類讀取組態檔的資訊,一般要經歷如下三步:

  1. 創建 Properties 實體;
  2. 呼叫 load()方法 讀取組態檔;
  3. 呼叫 getProperty()方法 獲取具體的配置資訊,

了解了以上這些內容之后,接下來,會通過幾個例子來給大家詳細地介紹Properties的使用方法,

二. 讀寫Properties組態檔

首先我們通過一個案例,來學習如何讀取Properties組態檔里的資訊,

1. 創建Properties檔案

為了方便測驗,我們可以先在專案中創建一個.properties的組態檔,這里就把該組態檔命名為db.properties了,如下圖所示:

image.png

大家要注意,在早期的JDK中, .properties配置 檔案采用了ASCII編碼,具體來說是ISO8859-1編碼,在這種編碼中,如果檔案中存在中文,這些中文必須使用user name=\u4e2d\u6587的形式來表示,非常別扭,而從JDK 9開始, .properties配置 檔案就可以使用UTF-8編碼了,

由于load(InputStream)方法默認總是以ASCII編碼來讀取位元組流,所以會導致讀取資訊時產生亂碼,我們可以使用另一個load(Reader)多載方法來讀取:

Properties props = new Properties();
props.load(new FileReader("db.properties", StandardCharsets.UTF_8));

InputStream是位元組流,Reader是字符流,因為字符流在記憶體中已經以char型別表示了,所以不涉及到編碼問題,這樣通過以上代碼,我們就可以正常讀取包含中文的配置資訊了,

2. 讀取Properties檔案

2.1 加載組態檔

接下來我們可以使用Properties類的load()方法,來讀取上面創建的組態檔,例如:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

public class Demo23 {
	public static void main(String[] args) {
		//創建Properties物件
		Properties properties = new Properties();
		try {
			//設定db.properties組態檔,利用位元組流來加載檔案
			
			//尋找.properties檔案路徑方式一
			//從當前專案的根目錄下尋找db.properties檔案
			URL url = Demo23.class.getResource("/db.properties");
			String path = url.getPath();
			System.out.println("path="+path);
			InputStream inputStream = new FileInputStream(path);
			
			//尋找.properties檔案路徑方式二
			//InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");
			
			//加載位元組流
		    properties.load(inputStream);
		    System.out.println("properties="+properties);
		} catch (IOException e) {
		    e.printStackTrace();
		}
	}
}

在一個普通的Java專案中,如果我們想讀取.properties組態檔,可以有兩種方式:

  1. 類名.class.getResource("組態檔路徑及名稱") :該方式會得到一個URL物件,它代表了組態檔的路徑;
  2. 類名.class.getResourceAsStream("組態檔路徑及名稱") :該方式會直接得到InputStream物件,

在上面的代碼中,我們讀取到了名為db.properties的組態檔,并將其存盤在一個Properties物件中,

2.2 讀取配置資訊

在上面的代碼中,我們從組態檔中讀取了三個鍵值對,分別是jdbc.url、jdbc.usernamejdbc.password,在讀取組態檔后,接下來我們就可以通過getProperty()方法來獲取配置資訊了,如果組態檔中不存在這些鍵,getProperty()方法將會回傳null,

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

public class Demo23 {
	public static void main(String[] args) {
		//創建Properties物件
		Properties properties = new Properties();
		try {
			//設定db.properties組態檔,利用位元組流來加載檔案
			
			//尋找.properties檔案路徑方式一
			//從當前專案的根目錄下尋找db.properties檔案
			URL dbUrl = Demo23.class.getResource("/db.properties");
			String path = dbUrl.getPath();
			System.out.println("path="+path);
			InputStream inputStream = new FileInputStream(path);
			
			//尋找.properties檔案路徑方式二
			//InputStream inputStream = Demo23.class.getResourceAsStream("/db.properties");
			
			//加載位元組流
		    properties.load(inputStream);
		    System.out.println("properties="+properties);
		    
		    //從組態檔中根據指定的key來讀取配置資訊
		    String url = properties.getProperty("jdbc.url");
		    String username = properties.getProperty("jdbc.username");
		    String password = properties.getProperty("jdbc.password");
		    System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
		} catch (IOException e) {
		    e.printStackTrace();
		}
	}
}

要注意,我們在呼叫 getProperty()方法 獲取配置資訊時,如果指定的key不存在,會回傳 null ,但我們可以提供一個默認值,這樣當key不存在時會回傳一個默認值, 并且如果有多個.properties檔案,可以反復呼叫load()讀取,后讀取的key-value會覆寫已讀取的key-value,

2.3 使用默認值讀取資訊

在讀取組態檔時,如果某個鍵不存在,getProperty()方法將回傳null,為了避免出現NullPointerException,我們可以為getProperty()方法指定一個默認值,例如:

String url = properties.getProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
String username = properties.getProperty("jdbc.username", "root");
String password = properties.getProperty("jdbc.password", "root");

在以上代碼中,如果組態檔中不存在jdbc.url這個鍵,getProperty方法會回傳我們設定的默認值"jdbc:mysql://localhost:3306/mydb",

3. 寫入Properties檔案

接下來我們再通過一個案例,來學習如何把配置資訊寫入到Properties檔案里,

3.1 寫入組態檔

我們可以使用Properties類的store方法來寫入組態檔,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

public class Demo24 {
	public static void main(String[] args) {
		//設定配置資訊
		Properties properties = new Properties();
		properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
		properties.setProperty("jdbc.username", "root");
		properties.setProperty("jdbc.password", "syc");

		try {
			URL dbUrl = Demo24.class.getResource("/db.properties");
			String path = dbUrl.getPath();
			System.out.println("path="+path);
			OutputStream outputStream = new FileOutputStream(path);
			//寫入配置資訊
			properties.store(outputStream, "Database connection properties");

			// 尋找.properties檔案路徑方式二
			InputStream inputStream = Demo24.class.getResourceAsStream("/db.properties");
			// 加載位元組流
			properties.load(inputStream);
			System.out.println("properties=" + properties);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

以上代碼中,將三個鍵值對寫入到了名為db.properties的組態檔中,并添加了一行注釋“Database connection properties”

3.2 使用默認值寫入資訊

另外在Properties類中,其實本身就有一個默認的Properties物件,可以用來設定一些默認屬性值,我們可以使用Properties類的getDefaultProperties()方法來獲取默認的Properties物件,然后使用setProperty()方法來設定默認屬性值,例如:

Properties defaultProperties = Properties.getDefaultProperties();
defaultProperties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb");
defaultProperties.setProperty("jdbc.username", "root");
defaultProperties.setProperty("jdbc.password", "root");

Properties properties = new Properties(defaultProperties);

以上代碼中,我們先獲取了默認的Properties物件,然后設定了jdbc.url、jdbc.usernamejdbc.password三個默認屬性值,接著,我們創建了一個新的Properties物件,并將默認的Properties物件傳遞給它,這樣,在讀取組態檔時,如果某個鍵不存在,getProperty方法就會先在當前Properties物件中查找,如果找不到,就會在默認Properties物件中查找,

四. 讀寫XML組態檔

其實Properties類不僅可以操作.properties組態檔,也可以操作.xml格式的檔案,接下來再給大家講一下如何操作xml檔案,

1. 創建XML檔案

首先我們來創建一個xml格式的組態檔,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 宣告一個properties屬性節點 -->
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <entry key="jdbc.url">jdbc:mysql://localhost:3306/mydb</entry>
  <entry key="jdbc.username">root</entry>
  <entry key="jdbc.password">root</entry>
</properties>

大家要注意,這里我們要使用<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">陳述句來宣告一個properties根結點,大家可以根據自己的需要定義自己的節點名稱,

2. 讀取XML組態檔

要想讀取XML格式的組態檔,可以使用loadFromXML()方法從XML檔案中讀取配置資訊,例如:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Demo25 {
	public static void main(String[] args) {
		// 創建Properties物件
		Properties properties = new Properties();
		try {
			// 從當前專案的根目錄下尋找db.properties檔案
			InputStream inputStream = Demo25.class.getResourceAsStream("/config.xml");
			// 加載位元組流,從XML檔案中讀取配置資訊
			properties.loadFromXML(inputStream);

			// 從組態檔中根據指定的key來讀取配置資訊

			// 讀取資訊時設定默認值
			 String url = properties.getProperty("jdbc.url","jdbc:mysql://localhost:3306/mydb2");
			 String username = properties.getProperty("jdbc.username", "syc");
			 String password = properties.getProperty("jdbc.password", "syc");
			 System.out.println("[url]="+url+" ,[username]="+username+" ,[password]="+password);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

以上代碼讀取了名為config.xml的XML組態檔,并將其存盤在一個Properties物件中,在讀取XML格式的組態檔后,我們就可以通過getProperty方法來獲取配置資訊了,

3. 寫入XML組態檔

同時,我們也可以使用storeToXML()方法,將Properties中的鍵值對資訊存盤到XML格式的輸出流中,例如:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;

public class Demo26 {
	public static void main(String[] args) {
		// 設定配置資訊
		Properties properties = new Properties();
		properties.setProperty("jdbc.url", "jdbc:mysql://localhost:3306/mydb2");
		properties.setProperty("jdbc.username", "root");
		properties.setProperty("jdbc.password", "syc");

		try {
			URL dbUrl = Demo26.class.getResource("/config.xml");
			String path = dbUrl.getPath();
			OutputStream outputStream = new FileOutputStream(path);
			// 寫入配置資訊
			properties.storeToXML(outputStream, "Database connection properties");

			// 尋找.properties檔案路徑方式二
			InputStream inputStream = Demo26.class.getResourceAsStream("/config.xml");
			// 加載位元組流
			properties.loadFromXML(inputStream);
			System.out.println("xml=" + properties);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

在以上代碼中,我們將三個鍵值對寫入了一個名為config.xml的XML組態檔中,并添加了一行注釋“Database connection properties”


五. 結語

在本文中,為大家詳細介紹了Java中的Properties配置類,它是用來處理組態檔的一個實用工具類,該類可以從檔案系統、classpath或其他任何地方讀取.properties檔案,我們在讀寫Properties時,注意僅使用getProperty()和setProperty()方法,不要呼叫繼承而來的get()和put()等方法,

通過本文的介紹,相信大家已經掌握了Properties類的基本用法,包括讀寫組態檔、設定默認值、讀寫XML格式的組態檔等等,在實際開發中,我們可以結合Properties類來實作程式的配置功能,提高程式的靈活性和可維護性,

六、配套視頻

視頻教程:戳這里

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553719.html

標籤:Java

上一篇:JavaWeb編程面試題——MyBatis

下一篇:返回列表

標籤雲
其他(159921) Python(38178) JavaScript(25462) Java(18148) C(15233) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7215) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4578) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1949) C++(1926) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 詳談Java中Properties配置類怎么用

    本文將為大家詳細講解Java中Properties配置類怎么用,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題!文章較長,干貨滿滿,建議大家收藏慢慢學習。文末有本文重點總結,主頁有全系列文章分享。技術類問題,歡迎大家和我們一起交流討... ......

    uj5u.com 2023-05-30 07:38:38 more
  • JavaWeb編程面試題——MyBatis

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-30 07:38:33 more
  • c語言,函式的址傳遞例子

    編碼如下:#include <stdio.h> void swap(int* x,int* y ){ int tmp; tmp=*x; *x=*y; *y=tmp ; }; int main(){ int a=4; int b=5; printf("befer\n"); printf("a=%d\n ......

    uj5u.com 2023-05-30 07:37:52 more
  • 【QCustomPlot】性能提升之修改原始碼(版本 V2.x.x)

    QCustomPlot 是開源專案,原始碼撰寫十分規范,想要理解它的可視化思路不算特別困難。我在這篇隨筆中總結一下常用的原始碼修改技巧,下面的每一個技巧都是獨立的,不同技巧中添加的代碼無任何依賴關系,相互之間也不會引發任何沖突,不會影響 QCustomPlot 原生的介面。示例中使用的 QCustomP... ......

    uj5u.com 2023-05-30 07:31:05 more
  • 阿里一面:MySQL 單表資料最大不要超過多少行?為什么?這樣回答滿分!

    來源:https://my.oschina.net/u/4090830/blog/5559454 ### 1 背景 作為在后端圈開車的多年老司機,是不是經常聽到過,“mysql 單表最好不要超過 2000w”,“單表超過 2000w 就要考慮資料遷移了”,“你這個表資料都馬上要到 2000w 了,難 ......

    uj5u.com 2023-05-29 11:40:38 more
  • Tomcat處理http請求之原始碼分析

    本文將從請求獲取與包裝處理、請求傳遞給Container、Container處理請求流程,這3部分來講述一次http穿梭之旅。 ......

    uj5u.com 2023-05-29 11:40:24 more
  • Java中Collection與Collections有什么區別?Java常見面試題決議

    **本文將為大家詳細講解Java中Collection與Collections的區別點,這是我們進行開發時經常用到的知識點,也是大家在學習Java中很重要的一個知識點,更是我們在面試時有可能會問到的問題!** **文章較長,干貨滿滿,建議大家收藏慢慢學習。文末有本文重點總結,主頁有全系列文章分享。技 ......

    uj5u.com 2023-05-29 11:40:14 more
  • Spark入門看這篇就夠了(萬字長文)

    本文已收錄至Github,推薦閱讀 👉 [Java隨想錄](https://github.com/ZhengShuHai/JavaRecord) 微信公眾號:[Java隨想錄](https://mmbiz.qpic.cn/mmbiz_jpg/jC8rtGdWScMuzzTENRgicfnr91C5 ......

    uj5u.com 2023-05-29 11:40:08 more
  • 關于切片引數傳遞的問題

    前言:在 Golang 中函式之間傳遞變數時總是以值的方式傳遞的,無論是 int,string,bool,array 這樣的內置型別(或者說原始的型別),還是 slice,channel,map 這樣的參考型別,在函式間傳遞變數時,都是以值的方式傳遞,也就是說傳遞的都是值的副本。 在使用ioutil ......

    uj5u.com 2023-05-29 11:39:53 more
  • java多執行緒

    # java多執行緒 ## 行程、執行緒與多執行緒 - 行程是執行程式的一次執行程序,是一個動態的概念,是系統支援分配的單位 - 通常一個行程可以包含一個或多個執行緒。執行緒是CPU調度和執行的單位 - 執行緒就是獨立執行的路徑,由cpu調度 - 執行緒會帶來額外的開銷,如cpu調度時間,并發控制開銷 - 每個線 ......

    uj5u.com 2023-05-29 11:39:15 more