c++之通訊錄管理系統

1,系統需求

通訊錄是一個記錄親人,好友信息的工具

系統中需要實現的功能如下:

1,添加聯系人:向通訊錄中添加新人,信息包括(姓名,性別,年齡,聯系電話,家庭住址)最多記錄1000個人

2,顯示聯系人:顯示通訊錄中所有的聯系人信息

3,刪除聯系人:按照姓名進行刪除指定聯系人

4,查找聯系人:按照姓名查找指定聯系人信息

5,修改聯系人:按照名字重新修改指定聯系人

6,清空聯系人:清空通訊錄所有信息

7,退出通訊錄:退出當前使用的通訊錄

2,創建項目

創建項目步驟如下:

打開軟件

點擊創建新項目

?

點擊空項目和下一步?

在前兩行包含頭文件?

3,菜單功能

功能描述:用戶選擇功能的界面

步驟:創建函數void showMenu(),并在int main()中調用

#include<iostream>
using namespace std;//菜單界面
void showMenu()
{cout << "**********************" << endl;cout << "*****1,添加聯系人*****" << endl;cout << "*****2,顯示聯系人*****" << endl;cout << "*****3,刪除聯系人*****" << endl;cout << "*****4,查找聯系人*****" << endl;cout << "*****5,修改聯系人*****" << endl;cout << "*****6,清空聯系人*****" << endl;cout << "*****0,退出通訊錄*****" << endl;cout << "**********************" << endl;cout << endl;
}int main()
{showMenu();system("pause");return 0;
}

結果顯示:?

4,退出功能

功能描述:退出通訊錄系統

思路:根據用戶不同的選擇,進入不同的功能,可以選擇switch分支結構,將整個框架進行搭建

當前用戶選擇0的時候,執行退出,選擇其他先不做操作,也不會退出程序

代碼展示:

	int select = 0;//創建用戶輸入變量while (1){//調用菜單showMenu();int select = 0;cin >> select;switch (select){case 1://1,添加聯系人break;case 2://2, 顯示聯系人break;case 3://3,刪除聯系人break;case 4://4,查找聯系人break;case 5://5,修改聯系人break;case 6://6,清空聯系人break;case 0://0,退出通訊錄cout << "歡迎下次使用!" << endl;system("pause");break;default:break;}}system("pause");return 0;
}

5,添加聯系人

功能描述:實現添加聯系人功能,聯系人上限為1000人,聯系人信息包括(姓名,性別,年齡,聯系電話,家庭住址)

步驟:設計聯系人結構體

? ? ? ? ? 設計通訊錄結構體

? ? ? ? ? main()函數中創建通訊錄

? ? ? ? ??封裝添加聯系人函數

? ? ? ? ? 測試添加聯系人函數

5.1??設計聯系人結構體

聯系人信息包括(姓名,性別,年齡,聯系電話,家庭住址)

設計如下:

#include<string>//頭文件信息
//聯系人結構體
struct Person
{string name;//姓名int m_sex;//性別int m_age;//年齡string m_phont;//電話string m_address;//住址
};

5.2??設計通訊錄結構體

//通訊錄結構體
struct Addressbooks
{struct Person personArray[MAX];//通訊錄保存聯系人信息int m_size;//通訊錄中人員個數
};

5.3? main()函數中創建通訊錄

Addressbooks abs;//創建通訊錄變量

5.4???封裝添加聯系人函數

void addPerson(Addressbooks * abs)
{//先判斷通訊錄是否已滿,如果滿了后不再添加if (abs->m_size == MAX){cout << "通訊錄已滿,無法添加!" << endl;return;}else{//添加聯系人//姓名string name;cout << "請輸入名字:" << endl;cin >> name;abs->personArray[abs->m_size].m_name = name;//性別cout << "請輸入性別" << endl;cout << "1----男" << endl;cout << "2----女" << endl;int sex = 0;while (1){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}cout << "輸入有誤,請重新輸入" << endl;}abs->personArray[abs->m_size].m_sex = sex;//年齡cout << "請輸入年齡" << endl;int age = 0;cin >> age;abs->personArray[abs->m_size].m_age = age;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[abs->m_size].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[abs->m_size].m_address = address;//更新通訊錄人數abs->m_size++;cout << "添加成功" << endl;system("pause");//按任意鍵繼續system("cls");//清屏操作}
}

5.5??測試添加聯系人函數

case 1://1,添加聯系人addPerson(&abs);//利用地址傳參,可以修飾實參break;

5.6 結果展示?

6,顯示聯系人

功能描述:顯示通訊錄已有的聯系人信息

顯示聯系人實現步驟:

? ? ? ? *封存顯示聯系人函數

? ? ? ? *測試顯示聯系人功能

6.1 封存顯示聯系人函數

思路:判斷如果當前通訊錄中沒有人員,就提示記錄為空,人數大于0,顯示通訊錄中信息

代碼如下:

//顯示聯系人
void showPerson(Addressbooks* abs)
{//判斷如果當前通訊錄中沒有人員,就提示記錄為空//人數大于0,顯示通訊錄中信息if (abs->m_size == 0){cout << "當前記錄為空" << endl;}else{for (int i = 0; i < abs->m_size; i++){cout << "姓名:" << abs->personArray[i].m_name << "\t";cout << "性別:" << abs->personArray[i].m_sex << "\t";cout << "年齡:" << abs->personArray[i].m_age << "\t";cout << "電話:" << abs->personArray[i].m_phone << "\t";cout << "地址:" << abs->personArray[i].m_address << endl;}}system("pause");//按任意鍵繼續system("cls");//清屏操作
}
}

6.2 測試顯示聯系人功能

case 2://2, 顯示聯系人showPerson(&abs);break;

6.3 結果展示?

7,刪除聯系人

功能描述:按照姓名進行刪除指定聯系人

步驟:

7.1封裝檢測聯系人是否存在

思路:刪除聯系人前,我們需要先判斷用戶輸入的聯系人是否存在,如果存在就刪除,不存在則提示用戶沒有要刪除的聯系人

因此我們可以把檢測聯系人是否存在封裝成一個函數,如果存在,返回聯系人在通訊錄中的位置,不存在則返回-1

int isExist(Addressbooks * abs,string name)
{for (int i = 0; i < abs->m_size ; i++){//找到用戶姓名if (abs->personArray[i].m_name  == name){//返回這個人的下標return i;}return -1;//如果遍歷結果都沒有找到,則返回-1}
}
case 3://3,刪除聯系人
{cout << "請輸入刪除聯系人的姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查無此人" << endl;}else{cout << "找到此人" << endl;}
}

7.2封裝刪除聯系人函數

void deletePerson(Addressbooks * abs, string name)
{int ret = isExist(abs, name);//ret==-1  未查到//ret != 1  查到了if (ret != -1){//查到人,要進行刪除操作for (int i = 0; i < abs->m_size; i++){//數據遷移//刪除:就是將后面每個人的信息的位置替換前一個人的信息abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;cout << "刪除成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}

7.3測試刪除聯系人功能

case 3://3,刪除聯系人
{cout << "請輸入刪除聯系人的姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查無此人" << endl;}else{cout << "找到此人" << endl;}deletePerson(&abs, name); 
}

8,查找聯系人

功能描述:按照姓名查找聯系人信息

8.1封裝查找聯系人信息

void findPerson(Addressbooks * abs)
{cout << "輸入您要查找的聯系人" << endl;string name;cin >> name;//判斷聯系人是否在通訊錄中int ret = isExist(abs, name);if (ret != -1)//找到聯系人{cout << "姓名:" << abs->personArray[ret].m_name << "\t";cout << "性別:" << (abs->personArray[ret].m_sex == 1 ? "男" : "女") << "\t";cout << "年齡:" << abs->personArray[ret].m_age << "\t";cout << "電話:" << abs->personArray[ret].m_phone << "\t";cout << "地址:" << abs->personArray[ret].m_address << endl;}else {cout << "查無此人" << endl;}system("pause");system("cls");
}

8.2 測試查找指定聯系人

case 4://4,查找聯系人findPerson(&abs);break;

?

9,修改聯系人

功能描述:按照名字修改指定聯系人

9.1 封裝修改聯系人函數

實現思路:查找用戶輸入的聯系人,如果查找成功進行修改操作,查找失敗提示查無此人

void modifyPerson(Addressbooks* abs)
{cout << "輸入您要修改的聯系人" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1)//找到聯系人{//姓名string name;cout << "請輸入名字:" << endl;cin >> name;abs->personArray[ret].m_name = name;//性別cout << "請輸入性別" << endl;cout << "1----男" << endl;cout << "2----女" << endl;int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[ret].m_sex = sex;break;}cout << "輸入有誤,請重新輸入" << endl;}//年齡cout << "請輸入年齡" << endl;int age = 0;cin >> age;abs->personArray[ret].m_age = age;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[ret].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[ret].m_address = address;cout << "修改成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}

9.2 測試修改聯系人功能

case 5://5,修改聯系人modifyPerson(&abs);break;

?

10,清空聯系人

功能描述:

10.1 封存清空聯系人函數

void cleanPerson(Addressbooks* abs)
{abs->m_size = 0;cout << "通訊錄已經清空" << endl;system("pause");system("cls");
}

10.2 測試清空聯系人功能

case 6://6,清空聯系人cleanPerson(&abs);break;

?

11,整體實現

#include<iostream>
using namespace std;
#include<string>//頭文件信息
#define MAX 1000//聯系人結構體
struct Person
{string m_name;//姓名int m_sex;//性別int m_age;//年齡string m_phone;//電話string m_address;//住址
};//通訊錄結構體
struct Addressbooks
{struct Person personArray[MAX];//通訊錄保存聯系人信息int m_size;//通訊錄中人員個數
};//菜單界面
void showMenu()
{cout << "**********************" << endl;cout << "*****1,添加聯系人*****" << endl;cout << "*****2,顯示聯系人*****" << endl;cout << "*****3,刪除聯系人*****" << endl;cout << "*****4,查找聯系人*****" << endl;cout << "*****5,修改聯系人*****" << endl;cout << "*****6,清空聯系人*****" << endl;cout << "*****0,退出通訊錄*****" << endl;cout << "**********************" << endl;cout << endl;
}//添加聯系人
void addPerson(Addressbooks * abs)
{//先判斷通訊錄是否已滿,如果滿了后不再添加if (abs->m_size  == MAX){cout << "通訊錄已滿,無法添加!" << endl;return;}else{//添加聯系人//姓名string name;cout << "請輸入名字:" << endl;cin >> name;abs->personArray[abs->m_size].m_name = name;//性別cout << "請輸入性別" << endl;cout << "1----男" << endl;cout << "2----女" << endl;int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[abs->m_size].m_sex = sex;break;}cout << "輸入有誤,請重新輸入" << endl;}//年齡cout << "請輸入年齡" << endl;int age = 0;cin >> age;abs->personArray[abs->m_size].m_age = age;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[abs->m_size].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[abs->m_size].m_address = address;//更新通訊錄人數abs->m_size++;cout << "添加成功" << endl;}system("pause");//按任意鍵繼續system("cls");//清屏操作
}//顯示聯系人
void showPerson(Addressbooks* abs)
{//判斷如果當前通訊錄中沒有人員,就提示記錄為空//人數大于0,顯示通訊錄中信息if (abs->m_size == 0){cout << "當前記錄為空" << endl;}else{for (int i = 0; i < abs->m_size; i++){cout << "姓名:" << abs->personArray[i].m_name << "\t";cout << "性別:" << (abs->personArray[i].m_sex == 1 ? "男" : "女" )<< "\t";cout << "年齡:" << abs->personArray[i].m_age << "\t";cout << "電話:" << abs->personArray[i].m_phone << "\t";cout << "地址:" << abs->personArray[i].m_address << endl;}}system("pause");//按任意鍵繼續system("cls");//清屏操作
}//如果存在,返回聯系人在通訊錄中的位置,不存在則返回 - 1
//參數1  通訊錄   參數2   對比姓名
int isExist(Addressbooks * abs,string name)
{for (int i = 0; i < abs->m_size ; i++){//找到用戶姓名if (abs->personArray[i].m_name  == name){//返回這個人的下標return i;}return -1;//如果遍歷結果都沒有找到,則返回-1}
}void deletePerson(Addressbooks * abs, string name)
{int ret = isExist(abs, name);//ret==-1  未查到//ret != 1  查到了if (ret != -1){//查到人,要進行刪除操作for (int i = 0; i < abs->m_size; i++){//數據遷移//刪除:就是將后面每個人的信息的位置替換前一個人的信息abs->personArray[i] = abs->personArray[i + 1];}abs->m_size--;cout << "刪除成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}void findPerson(Addressbooks * abs)
{cout << "輸入您要查找的聯系人" << endl;string name;cin >> name;//判斷聯系人是否在通訊錄中int ret = isExist(abs, name);if (ret != -1)//找到聯系人{cout << "姓名:" << abs->personArray[ret].m_name << "\t";cout << "性別:" << (abs->personArray[ret].m_sex == 1 ? "男" : "女") << "\t";cout << "年齡:" << abs->personArray[ret].m_age << "\t";cout << "電話:" << abs->personArray[ret].m_phone << "\t";cout << "地址:" << abs->personArray[ret].m_address << endl;}else {cout << "查無此人" << endl;}system("pause");system("cls");
}void modifyPerson(Addressbooks* abs)
{cout << "輸入您要修改的聯系人" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret != -1)//找到聯系人{//姓名string name;cout << "請輸入名字:" << endl;cin >> name;abs->personArray[ret].m_name = name;//性別cout << "請輸入性別" << endl;cout << "1----男" << endl;cout << "2----女" << endl;int sex = 0;while (true){cin >> sex;if (sex == 1 || sex == 2){abs->personArray[ret].m_sex = sex;break;}cout << "輸入有誤,請重新輸入" << endl;}//年齡cout << "請輸入年齡" << endl;int age = 0;cin >> age;abs->personArray[ret].m_age = age;//聯系電話cout << "請輸入電話" << endl;string phone;cin >> phone;abs->personArray[ret].m_phone = phone;//家庭住址cout << "請輸入地址" << endl;string address;cin >> address;abs->personArray[ret].m_address = address;cout << "修改成功" << endl;}else{cout << "查無此人" << endl;}system("pause");system("cls");
}void cleanPerson(Addressbooks* abs)
{abs->m_size = 0;cout << "通訊錄已經清空" << endl;system("pause");system("cls");
}int main()
{Addressbooks abs;//創建通訊錄結構體變量abs.m_size = 0;//初始化當前人數個數int select = 0;//創建用戶輸入變量while (1){//調用菜單showMenu();cout << "請輸入:" << endl;int select = 0;cin >> select;switch (select){case 1://1,添加聯系人addPerson(&abs);//利用地址傳參,可以修飾實參break;case 2://2, 顯示聯系人showPerson(&abs);break;case 3://3,刪除聯系人{cout << "請輸入刪除聯系人的姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查無此人" << endl;}else{cout << "找到此人" << endl;}deletePerson(&abs, name); }break;case 4://4,查找聯系人findPerson(&abs);break;case 5://5,修改聯系人modifyPerson(&abs);break;case 6://6,清空聯系人cleanPerson(&abs);break;case 0://0,退出通訊錄cout << "歡迎下次使用!" << endl;system("pause");break;default:break;}}system("pause");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717365.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構建高效的接口自動化測試框架思路

在選擇接口測試自動化框架時&#xff0c;需要根據團隊的技術棧和項目需求來綜合考慮。對于測試團隊來說&#xff0c;使用Python相關的測試框架更為便捷。無論選擇哪種框架&#xff0c;重要的是確保 框架功能完備&#xff0c;易于維護和擴展&#xff0c;提高測試效率和準確性。今…

IntelliJ IDEA 的常用快捷鍵

IntelliJ IDEA 的常用快捷鍵非常多&#xff0c;這些快捷鍵可以幫助你更高效地編寫代碼。以下是一些常用的快捷鍵總結&#xff1a; 基礎操作 CtrlN&#xff1a;查找類CtrlShiftN&#xff1a;查找文件CtrlAltL&#xff1a;格式化代碼AltInsert&#xff1a;生成代碼&#xff08;…

信息安全技術第1章——信息網絡安全基本概念

課程介紹 網絡信息安全是醫學信息工程專業的限選課。主要圍繞計算機網絡安全所涉及的主要問題進行講解&#xff0c;內容包括&#xff1a;對稱密碼與公鑰密碼的基本原理、相關算法及應用。電子郵件的安全&#xff0c;IP安全&#xff0c;Web安全&#xff0c;惡意軟件及防火墻等內…

UI自動化-(web端窗口截圖文件上傳-實操入門)

1、窗口截圖 1. UI自動化中&#xff0c;為什么需要進行窗口截圖&#xff1f; 調試和故障排除&#xff1a;截圖可以直觀地查看界面的狀態&#xff0c;快速識別和解決問題。當自動化過程中出現錯誤或異常時&#xff0c;通過查看截圖可以確定是否是界面元素的問題&#xff0c;例…

C++ opencv 學習

文章目錄 1、創建窗口2、讀取圖片3、視頻采集4、Mat的使用5、異或操作6、通道分離&#xff0c;通道合并7、色彩空間轉換8、最大值、最小值9、繪制圖像10、多邊形繪制11、隨機數12、鼠標實時繪制矩形13、歸一化14、resize操作15、旋轉翻轉16、視頻操作17、模糊操作18、高斯模糊操…

SpringBoot整合MyBatis實現增刪改查

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內容: SpringBoot整合MyBatis實現增刪改查 ??個人知識庫: Leo知識庫,歡迎大家訪…

mysql之 case when

1 簡單 case 函數&#xff0c;IF函數 格式&#xff1a; CASE input_expression WHEN when_expression THENresult_expression [...n ] [ ELSEelse_result_expression ENDIF(條件,True結果,False結果)2 條件表達式 可嵌套多層&#xff0c;類似于 if … else if … else … end…

Java進階-IO(1)

進入java IO部分的學習&#xff0c;首先學習IO基礎&#xff0c;內容如下。需要了解流的概念、分類還有其他一些如集合與文件的轉換&#xff0c;字符編碼問題等&#xff0c;這次先學到字節流的讀寫數據&#xff0c;剩余下次學完。 一、IO基礎 1、背景 1.1 數據存儲問題 變量…

代碼隨想錄day11(1)字符串:反轉字符串中的單詞 (leetcode151)

題目要求&#xff1a;給定一個字符串&#xff0c;將其中單詞順序反轉&#xff0c;且每個單詞之間有且僅有一個空格。 思路&#xff1a;因為本題沒有限制空間復雜度&#xff0c;所以首先想到的是用split直接分割單詞&#xff0c;然后將單詞倒敘相加。 但如果想讓空間復雜度為O…

芯來科技發布最新NI系列內核,NI900矢量寬度可達512/1024位

參考&#xff1a;芯來科技發布最新NI系列內核&#xff0c;NI900矢量寬度可達512/1024位 (qq.com) 本土RISC-V CPU IP領軍企業——芯來科技正式發布首款針對人工智能應用的專用處理器產品線Nuclei Intelligence(NI)系列&#xff0c;以及NI系列的第一款AI專用RISC-V處理器CPU IP…

反向迭代器

反向迭代器 以list為例,我們完全可以再添加一個__list_reverse_iterator結構體,只需要修改和–的邏輯 template <class T, class Ref, class Ptr> struct __list_reverse_iterator {...self& operator(){_node _node->_prev;return *this;}self operator(int){…

Android 14.0 Launcher3定制化之桌面分頁橫線改成圓點顯示功能實現

1.前言 在14.0的系統rom產品定制化開發中&#xff0c;在進行launcher3的定制化中&#xff0c;在雙層改為單層的開發中&#xff0c;在原生的分頁 是橫線&#xff0c;而為了美觀就采用了系統原來的另外一種分頁方式&#xff0c;就是圓點比較美觀&#xff0c;接下來就來分析下相關…

網絡爬蟲部分應掌握的重要知識點

目錄 一、預備知識1、Web基本工作原理2、網絡爬蟲的Robots協議 二、爬取網頁1、請求服務器并獲取網頁2、查看服務器端響應的狀態碼3、輸出網頁內容 三、使用BeautifulSoup定位網頁元素1、首先需要導入BeautifulSoup庫2、使用find/find_all函數查找所需的標簽元素 四、獲取元素的…

基于springboot+vue的健身房管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

●139.單詞拆分 ● 關于多重背包,你該了解這些! ●背包問題總結篇!

●139.單詞拆分 物品&#xff1a;wordDict里面的單詞&#xff1b;背包容量&#xff1a;s.size()。 1.dp[j]含義。dp[j]true表示字符串前j個可以拆分成字典中的單詞。dp[s.size()] 就是最后的結果&#xff0c;整個字符串能&#xff08;true&#xff09;不能&#xff08;false…

Docker 創建容器并指定時區

目錄 1. 通過環境變量設置時區&#xff08;推薦&#xff09;2. 掛載宿主機的時區文件到容器中3. 總結 要在 Docker 容器中指定時區&#xff0c;可以通過兩種方式來實現&#xff1a; 1. 通過環境變量設置時區&#xff08;推薦&#xff09; 在 Docker 運行時&#xff0c;可以通…

NumPy數據處理詳解的筆記1

NumPy數據處理詳解的筆記1 第1章NumPy基礎 NumPy是用于處理多維數組的數值運算庫&#xff0c;不僅可用于 機器學習&#xff0c;還可以用于圖像處理&#xff0c;語言處理等任務。 1.1 NumPy的基礎與安裝方法 1.1.1 NumPy入門 NumPy是Python中進行科學計算所必備的基礎軟件庫…

CentOS安裝Docker(黑馬學習筆記)

Docker 分為 CE 和 EE 兩大版本。CE 即社區版&#xff08;免費&#xff0c;支持周期 7 個月&#xff09;&#xff0c;EE 即企業版&#xff0c;強調安全&#xff0c;付費使用&#xff0c;支持周期 24 個月。 Docker CE 分為 stable test 和 nightly 三個更新頻道。 官方網站上…

文件底層的理解之緩沖區

目錄 一、緩沖區的初步認識 二、向文件中寫數據的具體過程 三、緩沖區刷新的時機 一、緩沖區的初步認識 緩沖區其實就是一塊內存區域&#xff0c;采用空間來換時間&#xff0c;可以提高使用者的效率。我們一直說的緩沖區其實是語言層面上的緩沖區&#xff0c;其實操作系統內部…

JVM 第一部分 JVM兩種解釋器 類加載過程和類加載器

JVM是跨平臺跨語言的虛擬機&#xff0c;不直接接觸硬件&#xff0c;位于操作系統的上一層 跟字節碼文件直接關聯&#xff0c;和語言沒有關系 一次編譯成字節碼文件&#xff0c;多次執行 虛擬機可以分成三部分&#xff1a;類加載器&#xff0c;運行時數據區&#xff0c;執行引…