Java面向對象進階篇綜合訓練(附帶全套源代碼及逐語句分析)->基于javabeen

一、前言

面向對象這一塊也要結束了,不知道讀者們掌握的如何呢。不過面向對象的路程遠不止于此,可以利用面向對象來做一些小型的系統來鞏固一下。接下來就進入新的章節了,回顧一下這已經是第五天了,之前說的7天拿下java還是太過于理想化了。當然如果只是為了了解一下,那學習到這里已經算是結束了,不過為了后面的學習,java這部分要深入的去學,畢竟在開發方面java還是主流的編程語言。在進階篇的時候希望大家不要放棄,跟著小編的步伐就行了。一起加油!!!

建議先看完基礎 篇再來看進階篇

Java面向對象基礎篇綜合訓練(附帶全套源代碼及逐語句分析)->基于javabeen

二、案例簡介

本案例的主要目的是對學生信息的管理,可以簡單理解為簡易版的學生管理系統。主要目的還是熟練面向對象的操作。javabeen的應用一定要熟練,這對后面的學習幫助很大。雖然本案例所實現的功能并不是很多,但是對于初學者還是有一定的難度的,代碼量150行左右。感興趣的同學可以在上面進行功能的拓展。

這也算是日后一些命令行系統的模板,如果有想法的小伙伴想要去拓展功能,可以去參考一下小編之前所寫的基于C語言的一些系統。

溫馨提示一下,這些系統都能用于C語言這門學科的程序設計作業

C語言項目--企業員工管理系統(附帶全套源代碼)

C語言實戰項目--圖書管理系統(附帶全套源代碼)

C語言實戰項目-學生成績管理系統(附帶全套源代碼)

三、案例分析

1. 準備工作

//復雜對象數組練習//1.創建數組存儲學生對象Students[] s = new Students[3];//2.創建學生對象Students s1 = new Students(1, "張三", 18);Students s2 = new Students(2, "李四", 20);Students s3 = new Students(3, "王五", 21);//3.將學生對象添加到數組中s[0] = s1;s[1] = s2;s[2] = s3;

這一步和之前的沒什么區別就是簡單的創建數組存放信息

創建數組存儲學生對象:

Students[] s = new Students[3];

  • 在這行代碼中,聲明了一個名為?s?的數組,類型為?Students[],長度為 3。這意味著?s?可以存儲三個?Students?類型的對象。

創建學生對象:

Students s1 = new Students(1, "張三", 18); Students s2 = new Students(2, "李四", 20); Students s3 = new Students(3, "王五", 21);

  • 在這三行代碼中,創建了三個?Students?對象:s1s2?和?s3
  • 每個學生對象都使用?Students?類的構造方法進行初始化,分別傳入學生的ID、姓名和年齡信息。

將學生對象添加到數組中:

s[0] = s1; s[1] = s2; s[2] = s3;

  • 這三行代碼將之前創建的?Students?對象分別賦值給數組?s?的第 0、1、2 個位置。
  • 現在,數組?s?包含了三個學生對象,分別是?s1s2?和?s3,它們按照順序存儲在數組中。

2. 再添加一個學生

//4.再添加一個學生Students s4=new Students(4,"VON",18);boolean flag = contains(s,s4.getId());if(flag){//id重復System.out.println("當前id重復,請修改id");}else{int count = getCount(s);if(count==s.length){//已經存滿Students[] news = CreateNews(s);news[count] = s4;Prints(news);//遍歷所有學生信息}else{//沒有存滿s[count] = s4;Prints(s);//遍歷所有學生信息}}

創建新學生對象:

Students s4 = new Students(4, "VON", 18);

  • 創建了一個名為?s4?的新的?Students?對象,該對象的ID為 4,姓名為 "VON",年齡為 18。

檢查是否存在重復的ID:

boolean flag = contains(s, s4.getId());注:contains是下面所構造的方法

  • contains?方法用于檢查數組?s?中是否已經存在與?s4?相同的學生ID。這里假設該方法返回一個布爾值?flag,表示是否存在重復的ID。

根據情況進行處理:核心步驟

if (flag) {System.out.println("當前id重復,請修改id");
} else {int count = getCount(s);if (count == s.length) { // 數組已經存滿Students[] news = CreateNews(s); // 創建一個新的數組,通常是擴展現有數組的容量news[count] = s4; // 將新的學生對象添加到新數組的最后Prints(news); // 打印遍歷所有學生信息} else { // 數組未存滿s[count] = s4; // 將新的學生對象直接添加到數組的下一個空位Prints(s); // 打印遍歷所有學生信息}
}
  • 如果?flag?為?true,即存在重復的ID,則輸出提示信息?"當前id重復,請修改id"
  • 否則,根據當前數組?s?中已有的學生數量?count?進行判斷:
    • 如果?count?等于數組?s?的長度,表示數組已經存滿。此時調用?CreateNews(s)?方法創建一個新的數組?news,通常會擴展原有數組的容量,然后將?s4?添加到?news?的末尾,并調用?Prints(news)?方法打印遍歷所有學生的信息。
    • 如果?count?小于數組?s?的長度,表示數組未存滿。直接將?s4?添加到數組?s?的下一個空位,并調用?Prints(s)?方法打印遍歷所有學生的信息。

3. 刪除id為2的學生

//找到id在數組中對應的索引
//這一步刪除學生的id為2
int index = GetIndex(s,2);//這里是對原數組進行的操作,只有三位同學
if(index>=0){//id存在s[index] = null;Prints(s);}else{//id不存在System.out.println("當前id不存在,刪除失敗!");}System.out.println();

找到id在數組中對應的索引:

int index = GetIndex(s, 2);注:GetIndex是下面構造的方法

  • GetIndex?方法用于在數組?s?中查找具有指定ID(這里是2)的學生對象,并返回該學生對象在數組中的索引。假設?index?是這個操作的返回值。

根據索引進行刪除操作:

if (index >= 0) { // 如果找到了指定ID的學生對象s[index] = null; // 將該索引位置的學生對象置為 null,相當于刪除Prints(s); // 打印遍歷所有學生信息
} else { // 如果未找到指定ID的學生對象System.out.println("當前id不存在,刪除失敗!");
}
  • 如果?index?大于等于 0,說明找到了具有指定ID的學生對象。此時將數組?s?中該索引位置的元素設為?null,表示刪除該學生對象。
  • 然后調用?Prints(s)?方法,打印遍歷所有學生信息,顯示更新后的數組內容。
  • 如果?index?小于 0,表示未找到指定ID的學生對象,輸出?"當前id不存在,刪除失敗!"

4. 將id為1的學生年齡加一

        //方法一、找到id為1的學生的索引int index2 = GetIndex(s,1);if(index2>=0){int newage = s[index2].getAge()+1;s[index2].setAge(newage);Prints(s);}System.out.println();/*方法二、利用循環for (int i = 0; i < s.length; i++) {if(s[i]!=null){if(s[i].getId()==1){int newage = s[i].getAge()+1;s[i].setAge(newage);//注:不能寫s[i].getAge()++Prints(s);break;}}else{System.out.println("當前id不存在,修改失敗");}}*/

注:這一步中的兩種方法都能夠實現該功能

方法一分析:

int index2 = GetIndex(s, 1);
if (index2 >= 0) { // 如果找到了指定ID的學生對象int newage = s[index2].getAge() + 1; // 獲取該學生對象的年齡并加1s[index2].setAge(newage); // 設置該學生對象的年齡為新值Prints(s); // 打印遍歷所有學生信息
}
System.out.println();
  • GetIndex 方法:根據指定ID(這里是1),返回數組?s?中該學生對象的索引。
  • 如果?index2?大于等于 0,表示找到了具有指定ID的學生對象。此時獲取該學生對象的年齡并加1,然后更新學生對象的年齡。
  • 最后調用?Prints(s)?方法,打印遍歷所有學生信息,顯示更新后的數組內容。

方法二分析:

for (int i = 0; i < s.length; i++) {if (s[i] != null) { // 檢查數組元素不為空if (s[i].getId() == 1) { // 如果當前學生對象的ID等于1int newage = s[i].getAge() + 1; // 獲取該學生對象的年齡并加1s[i].setAge(newage); // 設置該學生對象的年齡為新值Prints(s); // 打印遍歷所有學生信息break; // 結束循環,因為已經找到并修改了目標學生對象}} else {System.out.println("當前id不存在,修改失敗");}
}
  • 循環遍歷:通過循環遍歷數組?s?中的每個學生對象。
  • 對于每個非空的學生對象,檢查其ID是否等于1。如果等于1,則進行年齡加1的操作,并更新學生對象的年齡。
  • 在找到并修改了目標學生對象后,調用?Prints(s)?方法打印更新后的數組內容,并使用?break?結束循環。
  • 如果某個數組元素為?null,說明對應位置沒有學生對象,輸出?"當前id不存在,修改失敗"

5.方法分析

上文中所提到的方法,方法一定要寫在主體部分的下方。

5.1 找到id在數組中對應的索引

//找到id在數組中對應的索引public static int GetIndex(Students[] s,int id){for(int i=0;i<s.length;i++){if(s[i]!=null){if(s[i].getId()==id){return i;}}}return -1;}

方法解析:

參數說明

  • s?是一個?Students?對象數組,用來存儲學生對象。
  • id?是要查找的學生對象的ID。

方法邏輯

  • 使用?for?循環遍歷數組?s?中的每個元素。
  • 在循環中,首先檢查當前索引?i?處的元素是否為?null,以避免空指針異常。
  • 如果?s[i]?不為?null,繼續判斷?s[i]?的 ID 是否等于輸入的?id
  • 如果找到了符合條件的學生對象(即?s[i].getId() == id),則立即返回當前索引?i
  • 如果循環結束仍未找到符合條件的學生對象,則返回?-1,表示未找到對應的學生對象。

返回值

  • 如果找到了對應的學生對象,則返回該對象在數組中的索引。
  • 如果未找到,則返回?-1

特性

  • 這段代碼使用簡單直接的線性搜索方式,在數組中查找指定ID的學生對象。
  • 由于可能存在?null?元素,因此在判斷?s[i]?是否為?null?時進行了額外的檢查,以避免空指針異常。
  • 返回?-1?表示未找到指定ID的學生對象,這是一種常見的約定。

5.2 遍歷數組中所有學生的信息

//遍歷數組中的所有學生信息public static void Prints(Students[] s){for(int i=0;i<s.length;i++){if(s[i]!=null){System.out.println("學號:"+s[i].getId()+"姓名:"+s[i].getName()+"年齡:"+s[i].getAge());}}}

方法邏輯

  • 使用?for?循環遍歷數組?s?中的每個元素,從索引?0?到?s.length - 1
  • 在循環體內,使用條件判斷?if (s[i] != null)?來檢查當前索引?i?處的元素是否為?null
  • 如果?s[i]?不為?null,則表示在該位置有一個有效的學生對象,將其相關信息打印出來。
  • 使用?s[i].getId()s[i].getName()?和?s[i].getAge()?分別獲取該學生對象的學號、姓名和年齡,并通過?System.out.println?方法打印出來。

注:在遍歷過程中,通過?s[i] != null?的判斷確保只有有效的學生對象被打印,避免了嘗試訪問空對象可能引發的空指針異常。

5.3 創建新數組

//創建新數組,長度=老數組+1public static Students[] CreateNews(Students[]s){Students[] news = new Students[s.length+1];for(int i=0;i<s.length;i++){news[i] = s[i];}return news;}

方法邏輯

  • 首先,根據輸入數組?s?的長度創建一個新的數組?news,其長度為?s.length + 1
  • 使用?for?循環遍歷輸入數組?s?中的每個元素。
  • 在循環體內,將輸入數組?s?中的每個元素?s[i]?賦值給新數組?news?的相同索引位置?news[i]
  • 循環結束后,新數組?news?的前?s.length?個元素與輸入數組?s?的元素完全相同。

注:這段代碼并沒有在新數組?news?的最后一個位置(即?news[s.length])添加任何元素或進行其他操作。新數組只是在原有數組的基礎上擴展了長度。如果需要在新數組中添加新的元素或對其進行進一步的操作,需要在循環外部或循環內部添加相應的邏輯。

5.4 判斷數組中存放數據個數

//檢查數組中存放了幾個數據public static int getCount(Students[] s) {int count = 0;for (int i = 0; i < s.length; i++) {if (s[i] != null) {count++;}}return count;}

方法邏輯

  • 定義一個整型變量?count,用來計數非空元素的數量,初始值為?0
  • 使用?for?循環遍歷數組?s?中的每個元素,從索引?0?到?s.length - 1
  • 在循環體內,使用條件判斷?if (s[i] != null)?檢查當前索引?i?處的元素是否不為?null
  • 如果?s[i]?不為?null,則將?count?的值增加?1,表示找到了一個非空元素。
  • 循環結束后,返回變量?count?的值,即數組中非空元素的個數。

5.5 根據id判斷學生是否存在于數組中

//根據id判斷學生是否存在public static boolean contains(Students[] s,int t) {for (int i = 0; i < s.length; i++) {if(s[i]!=null && s[i].getId()==t){return true;}}return false;}

方法邏輯

  • 使用?for?循環遍歷數組?s?中的每個元素,從索引?0?到?s.length - 1
  • 在循環體內,首先使用條件?if (s[i] != null)?來確保數組當前索引?i?處有一個有效的學生對象。
  • 如果?s[i]?不為?null,則進一步判斷?s[i].getId() == t?是否成立:
    • s[i].getId()?是獲取當前學生對象的ID。
    • t?是傳入的目標學生ID。
  • 如果上述條件都成立,則說明找到了與目標ID匹配的學生,直接返回?true
  • 如果循環結束都沒有找到與目標ID匹配的學生,則返回?false,表示數組中不存在該學生。

四、全套源代碼

Java部分

package day5;public class text2 {//主函數public static void main(String[] args) {//復雜對象數組練習//1.創建數組存儲學生對象Students[] s = new Students[3];//2.創建學生對象Students s1 = new Students(1, "張三", 18);Students s2 = new Students(2, "李四", 20);Students s3 = new Students(3, "王五", 21);//3.將學生對象添加到數組中s[0] = s1;s[1] = s2;s[2] = s3;//4.再添加一個學生Students s4=new Students(4,"VON",18);boolean flag = contains(s,s4.getId());if(flag){//id重復System.out.println("當前id重復,請修改id");}else{int count = getCount(s);if(count==s.length){//已經存滿Students[] news = CreateNews(s);news[count] = s4;Prints(news);//遍歷所有學生信息}else{//沒有存滿s[count] = s4;Prints(s);//遍歷所有學生信息}}System.out.println();//找到id在數組中對應的索引//這一步刪除學生的id為2int index = GetIndex(s,2);//這里是對原數組進行的操作,只有三位同學if(index>=0){//id存在s[index] = null;Prints(s);}else{//id不存在System.out.println("當前id不存在,刪除失敗!");}System.out.println();//5.將id為1的學生年齡加一//方法一、找到id為1的學生的索引int index2 = GetIndex(s,1);if(index2>=0){int newage = s[index2].getAge()+1;s[index2].setAge(newage);Prints(s);}System.out.println();/*方法二、利用循環for (int i = 0; i < s.length; i++) {if(s[i]!=null){if(s[i].getId()==1){int newage = s[i].getAge()+1;s[i].setAge(newage);//注:不能寫s[i].getAge()++Prints(s);break;}}else{System.out.println("當前id不存在,修改失敗");}}*/}//方法//找到id在數組中對應的索引public static int GetIndex(Students[] s,int id){for(int i=0;i<s.length;i++){if(s[i]!=null){if(s[i].getId()==id){return i;}}}return -1;}//遍歷數組中的所有學生信息public static void Prints(Students[] s){for(int i=0;i<s.length;i++){if(s[i]!=null){System.out.println("學號:"+s[i].getId()+"姓名:"+s[i].getName()+"年齡:"+s[i].getAge());}}}//創建新數組,長度=老數組+1public static Students[] CreateNews(Students[]s){Students[] news = new Students[s.length+1];for(int i=0;i<s.length;i++){news[i] = s[i];}return news;}//檢查數組中存放了幾個數據public static int getCount(Students[] s) {int count = 0;for (int i = 0; i < s.length; i++) {if (s[i] != null) {count++;}}return count;}//根據id判斷學生是否存在public static boolean contains(Students[] s,int t) {for (int i = 0; i < s.length; i++) {if(s[i]!=null && s[i].getId()==t){return true;}}return false;}
}

JavaBeen部分

package day5;public class Students {private int id;private String name;private int age;//空參public Students() {}public Students(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

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

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

相關文章

常用的Redis命令介紹

常用的Redis命令介紹 Redis 是一個高性能的鍵值存儲數據庫&#xff0c;支持多種數據結構&#xff0c;如字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;和有序集合&#xff08;S…

51單片機:使用蜂鳴器演奏《盜將行》(附代碼詳解)

一、功能實現&#xff1a; 二、代碼內容&#xff1a; 主函數.c #include <REGX52.H> #include "Delay.h" #include "Timer0.h"sbit BuzzerP2^5;#define SPEED 500 //原先默認一個四分音符延遲500ms#define P 0 //休止 #define L1 1 //低音…

LLaMA-Factory:開源的低代碼大模型訓練框架

LLaMA-Factory 是一個由零隙智能&#xff08;SeamLessAI&#xff09;開源的低代碼大模型訓練框架&#xff0c;它集成了業界最廣泛使用的微調方法和優化技術&#xff0c;并支持眾多開源模型的微調和二次訓練。 一、功能特點 支持多種開源模型&#xff1a;LLaMA-Factory支持包括…

輻射神經場算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting

輻射神經場算法——Instant-NGP / Mipi-NeRF 360 / 3D Gaussian Splatting 1. Instant-NGP1. MultiResolution Hash Encoding1.2 Accelerated Ray Marching1.3 實驗結果 2. Mip-NeRF 3602.1 場景參數化2.2 在線蒸餾2.3 失真正則化2.4 實驗結果 3. 3D Gaussian Splatting3.1 Dif…

krpano開啟日志公能

<krpano version"1.21" title"博物館" debugmode"true" > 之后鼠標右鍵菜單欄最后一行 點擊&#xff08;開啟后會發生變化&#xff09;。

汽車預約維修小程序的設計

管理員賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;技師管理&#xff0c;技師信息管理&#xff0c;用戶預約管理&#xff0c;取消預約管理&#xff0c;訂單信息管理&#xff0c;系統管理 微信端賬號功能包括&#xff1a;系統首頁&#xff0c;技師信息&a…

新開發的軟件老被系統攔截有什么辦法解決嗎?

一套新開發的軟件要想在windows操作系統暢通無阻&#xff0c;那就需要使用代碼簽名證書&#xff0c;只要是對軟件進行實名從而證明軟件發布者身份&#xff0c;確保該軟件是一個合法有效的主體開發的&#xff0c;也是讓這個軟件開發者承擔相應的責任。 特別主要如果要獲得即時性…

【深度學習入門篇 ③】PyTorch的數據加載

【&#x1f34a; 易編橙&#xff1a;一個幫助編程小伙伴少走彎路的終身成長社群&#x1f34a; 】 大家好&#xff0c;我是小森( &#xfe61;?o?&#xfe61; ) &#xff01; 易編橙終身成長社群創始團隊嘉賓&#xff0c;橙似錦計劃領銜成員、阿里云專家博主、騰訊云內容共創…

【漏洞復現】宏景HCM-LoadOtherTreeServlet SQL注入

聲明&#xff1a;本文檔或演示材料僅用于教育和教學目的。如果任何個人或組織利用本文檔中的信息進行非法活動&#xff0c;將與本文檔的作者或發布者無關。 一、漏洞描述 宏景HCM人力資源信息管理系統是一個全面的人力資源管理軟件&#xff0c;它覆蓋了人力資源管理的各個模塊…

報錯:python擴展中的調試器不再支持小于3.7的python版本(debugpy)

報錯&#xff1a;python擴展中的調試器不再支持小于3.7的python版本 原因1&#xff1a; debugpy的版本問題原因2 原因1&#xff1a; debugpy的版本問題 是debugpy和你vscode安裝的python解釋器不匹配&#xff0c;根據你使用的python解釋器的版本重新安裝一個debugpy。 原因2 …

華為官方出品:《應用現代化實踐指南》電子書,可免費下載

本期云享書庫為各位開發者帶來了應用現代化方面的技術內容。 在數字化時代&#xff0c;企業面臨著前所未有的機遇與挑戰。隨著技術的飛速發展&#xff0c;特別是云計算、大數據、人工智能&#xff08;AI&#xff09;和機器學習&#xff08;ML&#xff09;的興起&#xff0c;正…

Python爬蟲速成之路(1):獲取網頁源代碼

hello hello~ &#xff0c;這里是絕命Coding——老白~&#x1f496;&#x1f496; &#xff0c;歡迎大家點贊&#x1f973;&#x1f973;關注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;個人主頁&#xff1a;絕命Coding-CSDN博客 &a…

C#面:簡述什么是中間件(Middleware)?

中間件是組裝到應?程序管道中以處理請求和響應的軟件。 每個組件&#xff1a; 選擇是否將請求傳遞給管道中的下?個組件。 可以在調?管道中的下?個組件之前和之后執??作。 請求委托&#xff08;Request delegates&#xff09;?于構建請求管道&#xff0c;處理每個HTTP請…

Threadlocal使用獲取最后更新人信息

Threadlocal 的作用范圍是一個線程&#xff0c;tomcat啟動默認開啟一個線程 首先點擊登錄&#xff0c;登錄方法會返回token 拿到token后放在請求頭中發送商品的插入請求&#xff0c;在插入是設置拿到token中的nickName&#xff08;花名&#xff09;放入&#xff08;lastUpdate…

windows系統長時間不用,無法喚醒

問題背景 在我們使用windows系統的時候&#xff0c;有這樣一種情況&#xff0c;就是電腦長時間不不操作&#xff0c;就會“睡死”過去。此時再用鼠標鍵盤都無法將其喚醒。沒辦法只能長按電源鍵強制關機&#xff0c;再重啟。那么該如何解決這種問題呢&#xff1f; 原因分析 系…

PLSQL Day7

--9.用戶鍵盤輸入5個數字&#xff0c;將數字按從小到大的順序存入集合中&#xff1a;declare declare type num_type is table of number; n_tab num_type; temp_n number ; begin n_tab: num_type(&n1,&n2,&n3,&n4,&n5); for i in 1..n_tab.co…

高可用hadoop分布式節點的擴容

解決方案 修改hdfs-site.xml 文件 原xml文件 <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (th…

編程參考 - 在C++類成員函數聲明中使用const關鍵字

在 C 中&#xff0c;可以在類成員函數聲明中使用 const 關鍵字來表示函數不修改對象的狀態。這就是所謂的 "const 成員函數"。將成員函數聲明為 const 時&#xff0c;意味著該函數承諾不更改對象的任何成員變量&#xff08;標記為可變的變量除外&#xff09;。 In C,…

福克斯波羅 FOXBORO FBM201模塊 控制器 處理器

福克斯波羅 FOXBORO FBM201 控制器具有緊湊和堅固的設計&#xff0c;使其非常適合在惡劣的工業環境中使用。它可以承受極端的溫度&#xff0c;濕度和振動&#xff0c;并且以最少的維護來實現持久的性能。 控制器配備了先進的控制算法&#xff0c;使其能夠快速準確地響應過程條…

Python: 從 2.7 升級到 3,我比 vue 慢了一點點

小破站搜索云前端&#xff0c;查看視頻版 2024 年 7 月 7 日&#xff0c;據一位長期的Python觀察者爆料&#xff0c;Fedora 41 系統最終將停止支持 Python 2.7。這是Python 2系列的最后一個版本&#xff0c;Python 2.7在Fedora Linux 41中將被退役且不再替代。除了PyPy之外&…