Java語言概述及保姆級入門教程(JDK 17版本)

筆記來自尚硅谷老師-康老師
學習教程:https://www.bilibili.com/video/BV1PY411e7J6/?spm_id_from=333.337.search-card.all.click

1、Java基礎全程脈絡圖

Java基礎全程脈絡圖

1.1 本章專題與脈絡

第1階段:Java基本語法-第01章

2. 抽絲剝繭話Java

2.1 當前大學生就業形勢

  • 麥可思研究院發布了《2022年中國大學生就業報告》,針對2021屆畢業生收入較高的本科專業排行榜:

img

  • 麥可思研究院發布過《2021年中國大學生就業報告》,應屆本科畢業生就業數量較大的前十位行業類的就業質量:

jiuyezhiliang1

  • 報告還對畢業三年后的2017屆畢業生所在十大行業進行了統計:

jiuyezhiliang2

  • 從國家統計局發布的2021年全國平均工資來看,不管在城鎮非私營單位還是私營單位,IT``業均為最高

2.2 IT互聯網是否依舊靠譜

過去不能代表未來!互聯網是否依舊靠譜?!

image-20220523002428542

2014 年至 2018 年間,我國網民規模從 6.49 億增長為 8.29 億,增幅為 27.5%。同一時間段,全國移動互聯網接入的流量卻從 20.6EB 增長到了 711.1EB,增幅達 3352%(獲取和處理的信息量大幅增加)。

隨著 5G 技術進一步拓寬移動互聯網的速度和容量,產業互聯網將在消費型流量的基礎上創造生產型流量,根據報告的預測,至 2024 年,全國移動互聯網的接入流量將達到 127663.8EB, 流量規模達到``2018``年的``179.5``倍

當下,5G、物聯網、人工智能、產業互聯網都是國家政策大方向,需要大量能與機器對話的中高端人才。

2.3 IT行業崗位分析

image-20220522234544537

軟件開發,是進入互聯網IT圈最好的選擇之一!

  • 起始薪資高

  • 工作環境好

  • 漲薪幅度高

  • 行業更公平

2.4 軟件開發之Java開發

移動應用領域(集成Android平臺):Java在Android端是主要開發的語言,占有重要的地位。

image-20220511092649122

20220608_160310

企業級應用領域(JavaEE后臺):用來開發企業級的應用程序,大型網站如淘寶、京東、12306,以及各大物流、銀行、金融、社交、醫療、交通、各種OA系統等都是用JavaEE技術開發的。

  • image-20220511090528043

大數據分析、人工智能領域:流行的大數據框架,如Hadoop、Flink都是用Java編寫的。Spark使用Scala編寫,但可以用Java開發應用。image-20220511091647358

Eversoft公司在提到2022年Java發展趨勢時寫道:

  • Java ``是用于開發大數據項目的最主流的語言。我們可以輕松地預測它也將在之后繼續主導大數據

**游戲領域、桌面應用、嵌入式領域:**很多大型游戲的后臺、桌面應用等也是Java開發的。

2.5 到底多少人在用Java

2020年,根據 IDC 的報告“Java Turns 25”顯示,超過 900 ``萬名開發人員(全球專職開發人員中的 69%)在使用 Java——比其他任何語言都多。該報告指出,大多數企業業務服務都依靠 Java 來實現。

… Java 一直是開發人員中最流行的編程語言,被譽為“宇宙第一語言”。

我想告訴大家:

“市場的需求比較大,市場的供給比較大”

“如果你在Java領域里持續積累5-7年以上,那么你至少會成為這個行業的一個專家!”

2.6 八卦一下程序員

image-20220602105134523

還可以是:

2.7 Java系列課程體系

見02_學習路線圖之《Java中高級程序員全程學習路線圖.xmind》

2.8 Java職業晉升路線圖

薪資數據統計來源:拉勾網

3. 計算機的硬件與軟件

3.1 計算機組成:硬件+軟件

3.2 CPU、內存與硬盤

CPU(Central Processing Unit,中央處理器)

  • 人靠大腦思考,電腦靠CPU來運算、控制。

硬盤(Hard Disk Drive)

  • 計算機最主要的存儲設備,容量大,斷電數據不丟失。

  • 正常分類:機械硬盤(``HDD``)固態硬盤(``SSD``)以及混合硬盤(``SSHD``)

  • 固態硬盤在開機速度和程序加載速度遠遠高于機械硬盤,缺點就是貴,所有無法完全取代機械硬盤。

內存(Memory)

  • 負責硬盤上的數據與CPU之間數據交換處理

  • 具體的:保存從硬盤讀取的數據,提供給CPU使用;保存CPU的一些臨時執行結果,以便CPU下次使用或保存到硬盤。

  • 斷電后數據丟失。

3.3 輸入設備:鍵盤輸入

熟悉指法

image-20220517100223784

不熟悉鍵盤的小伙伴,可以“金山打字通”走起了。堅決杜絕二指禪!!

image-20220517100543176

4. 軟件相關介紹

4.1 什么是軟件

軟件,即一系列按照特定順序組織的計算機數據指令的集合。有系統軟件應用軟件之分。

Pascal之父Nicklaus Wirth: “Programs = Data Structures + Algorithms”

系統軟件:

應用軟件:

4.2 人機交互方式

圖形化界面(Graphical User Interface,GUI),這種方式簡單直觀,使用者易于接受,容易上手操作。

命令行方式(Command Line Interface,CLI),需要在控制臺輸入特定的指令,讓計算機完成一些操作。需要記憶一些指令,較為麻煩。

  • img

4.3 常用的DOS命令

DOS(Disk Operating System,磁盤操作系統)是Microsoft公司在Windows之前推出的一個操作系統,是單用戶、單任務(即只能執行一個任務)的操作系統。現在被Windows系統取代。

對于Java初學者,學習一些DOS命令,會非常有幫助。

進入DOS操作窗口:

按下Windows+R鍵盤,打開運行窗口,輸入cmd回車,進入到DOS的操作窗口。

  • image-20220520100110104

常用指令:

操作``1``:進入和回退

操作說明
盤符名稱:盤符切換。E:回車,表示切換到E盤。
dir列出當前目錄下的文件以及文件夾
cd 目錄進入指定單級目錄。
cd 目錄1\目錄2\…進入指定多級目錄。cd atguigu\JavaSE
cd …回退到上一級目錄。
cd \ 或 cd /回退到盤符目錄。

操作``2``:增、刪

操作說明
md 文件目錄名創建指定的文件目錄。
rd 文件目錄名刪除指定的文件目錄(如文件目錄內有數據,刪除失敗)

操作``3``:其它

操作說明
cls清屏。
exit退出命令提示符窗口。
← →移動光標
↑ ↓調閱歷史操作命令
Delete和Backspace刪除字符

5. 計算機編程語言

5.1 計算機語言是什么

**語言:**是人與人之間用于溝通的一種方式。例如:中國人與中國人用普通話溝通。而中國人要和英國人交流,可以使用英語或普通話。

**計算機編程語言:**就是人與計算機交流的方式。人們可以使用編程語言對計算機下達命令,讓計算機完成人們需要的功能。

計算機語言有很多種。如:C 、C++、Java、Go、JavaScript、Python,Scala等。

體會:語言 = 語法 + 邏輯

5.2 計算機語言簡史

第一代:機器語言(相當于人類的石器時代)

  • 1946年2月14日,世界上第一臺計算機ENAC誕生,使用的是最原始的穿孔卡片。這種卡片上使用的是用二進制代碼表示的語言,與人類語言差別極大,這種語言就稱為機器語言。比如一段典型的機器碼:

?

1.	0000,0000,000000010000 代表 LOAD A, 162.	0000,0001,000000000001 代表 LOAD B, 13.	0001,0001,000000010000 代表 STORE B, 16
  • 這種語言本質上是計算機能識別的唯一語言,人類很難理解。可以大膽想象"此時的程序員``99.9%``都是異類!"

第二代:匯編語言(相當于人類的青銅&鐵器時代)

使用英文縮寫的助記符來表示基本的操作,這些助記符構成了匯編語言的基礎。比如:LOADMOVE等,使人更容易使用。因此,匯編語言也稱為符號語言

  • 優點:能編寫高效率的程序

  • 缺點:匯編語言是面向機器的,不同計算機機型特點不同,因此會有不同的匯編語言,彼此之間不能通用。程序不易移植,較難調試。

image-20220309223725671

比起機器語言,匯編大大進步了,是機器語言向更高級的語言進化的橋梁。目前仍然應用于工業電子編程領域、軟件的加密解密、計算機病毒分析等。

第三代:高級語言(相當于人類的信息時代)

高級語言發展于20世紀50年代中葉到70年代,是一種接近于人們使用習慣的程序設計語言。它允許程序員使用接近日常英語的指令來編寫程序,程序中的符號和算式也與日常用的數學式子差不多,接近于自然語言和數學語言,容易為人們掌握。比如:

高級語言獨立于機器,有一定的通用性;計算機不能直接識別和執行用高級語言編寫的程序,需要使用編譯器或者解釋器,轉換為機器語言才能被識別和執行。

image-20211218092630678

此外,高級語言按照程序設計方法的不同,又分為:面向過程的語言面向對象的語言

  1. C、Pascal、Fortran面向過程的語言

  2. C++面向過程/面向對象

  3. Java跨平臺的純面向對象的語言

  4. C#、Python、JavaScript、Scala…

目前以及可預見的將來,計算機語言仍然處于“第三代高級語言”階段。但是不管是什么語言,最后都要向機器語言靠近,因為CPU只認識0和1。

5.3 計算機語言排行榜

TIOBE (https://www.tiobe.com/tiobe-index/)是一個流行編程語言排行,每月更新。排名權重基于世界范圍內 工程師數量,Google、Bing、Yahoo! 、Wikipedia、Amazon、Youtube和百度這些主流的搜索引擎,也將作為排名權重的參考指標。

計算機語言走勢

5.4 編程語言,該學哪個?

image-20220310151657860

網傳的編程語言鄙視鏈:

C語言:萬物之源

  • 誕生于1972``年,由AT&T公司旗下貝爾實驗室創建完成,用于構建Unix操作系統。

  • 偏向計算機底層操作(操作系統、網絡、硬件驅動等)。

  • 優勢:幾乎所有現代編程語言都脫胎于C

  • 劣勢:相當陡的學習曲線;不支持面向對象編程

C++語言:難學的語言

  • 誕生于1983年,作為C語言的增強方案、升級版本。C++是C語言的超集,C語言的大部分知識也適用于C++。

  • 用途:windows 或 MacOS UI、office全家桶、主流的瀏覽器、Oracle、MySQL、著名的游戲引擎(如星際爭霸、魔獸世界)等

  • 優勢:很多公司都用 C++ 開發核心架構,如 Google、騰訊、百度、阿里云等;面向對象性

  • 劣勢:體系極為龐大,這是世界目前來說最復雜也是最難的編程語言。

  • C#語言:背靠大樹的語言

  • 誕生于2000``年,一款強大而靈活的編程語言。靠著微軟這棵大樹,是多年來windows平臺的一門主流編程語言。

  • 用途:windows桌面應用開發、Windows Azure、游戲開發

PHP語言:最好的語言?

  • 誕生于1994年,一款服務器端腳本語言。最初表示個人主頁(Personal Home Page)

  • PHP語法和C類似,有很多的模板和框架,簡單易懂,也許你可以在短短幾天做出web app。它主要用于web端,快速建站網絡開發

  • 劣勢:學習門檻太低;其代碼運行速度低于大部分編程語言黨爭對手

Python:易學的語言

  • 誕生于1991年,一種面向對象的語言,雖然運行效率不高,但是開發效率非常高

  • Python被稱為膠水語言,哪里都可以用。

JavaScript語言:前端為王

  • 誕生于1995年,網景公司開發完成。

  • JavaScript是JavaScript 是目前所有主流瀏覽器上唯一支持的腳本語言。在前端開發中,占有不可替代的地位。

Java語言:需求旺盛

  • 創建于1995年,Java是一種面向對象、基于類的編程語言。

  • Java可能是目前運用最廣的項目語言。代碼穩定性超過 C 和 C++,生產力遠超 C 和 C++。有 JVM 在,可以輕松地跨平臺。

  • 具有強大的開源開發工具,大量的開源共享庫。

  • Java擁有世界上數量最多的程序員,最不缺人。

Go語言:夾縫中生存

  • Go 語言現在很受關注,它是取代 C 和 C++ 的另一門有潛力的語言。

    • C 語言太原始了,C++ 太復雜了,Java 太高級了,所以 Go 語言就在這個夾縫中出現了。
  • Go語言已成為云計算領域事實上的標準語言,尤其是在 Docker/Kubernetes 等項目中。

  • Go 語言語法特別簡單,你有了 C 和 C++ 的基礎,學習 Go 的學習成本基本為零。

  • Go社區從Java社區移植了各種優秀的框架或庫。

總結:

  • 程序設計語言有很多種,每種語言都是為了實現某個特定的目的而發明的。

  • 沒有“最好”的語言,只有在特定場景下相對來說,最適合的語言而已。

  • 如果你掌握了一種編程語言,也會更容易上手其它的編程語言。關鍵是學習如何使用程序設計方法來解決問題。這也是本套課程的主旨。

  • Talk is cheap,Show me the code。

6. Java語言概述

6.1 Java概述

  • SUN(Stanford University Network,斯坦福大學網絡公司 ) 1995``年推出的一門高級編程語言。

  • 是一種面向Internet的編程語言。Java一開始富有吸引力是因為Java程序可以在Web``瀏覽器中運行。這些Java程序被稱為Java``小程序(applet),內嵌在HTML代碼中。

  • 伴隨著互聯網的迅猛發展,以及Java技術在web方面的不斷成熟,已經成為Web應用程序的首選開發語言。

6.2 Java語言簡史

起步階段:

1991年,Sun公司的工程師小組想要設計一種語言,應用在電視機電話鬧鐘烤面包機等家用電器的控制和通信。由于這些設備的處理能力內存都很有限,并且不同的廠商會選擇不同的中央處理器(CPU),因此這種語言的關鍵是代碼短小緊湊與平臺無關(即不能與任何特定的體系結構捆綁在一起)。

Gosling團隊率先創造了這個語言,并命名為“Oak"(起名的原因是因為他非常喜歡自己辦公室外的橡樹)。后因智能化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。

隨著20世紀90年代互聯網的發展,Sun公司發現該語言在互聯網上應用的前景,于是改造了Oak,于1995年5月以Java的名稱正式發布。(Java是印度尼西亞爪哇島的英文名稱,因盛產咖啡而聞名。)

發展階段:

發行版本發行時間備注
Java 1.01996.01.23Sun公司發布了Java的第一個開發工具包
Java 1.11997.02.19JavaOne會議召開,創當時全球同類會議規模之最。
Java 1.21998.12.08Java拆分成:J2SE(標準版)、J2EE(企業版)、J2ME(小型版)
Java 1.32000.05.08
Java1.42004.02.06
Java 5.02004.09.30①版本號從1.4直接更新至5.0;②平臺更名為JavaSE、JavaEE、JavaME
Java 6.02006.12.112009.04.20 Oracle宣布收購SUN公司
2009.04.20Oracle公司收購SUN,交易價格74``億美元。
Java 7.02011.07.02
Java 8.02014.03.18此版本是繼Java 5.0以來變化最大的版本。是長期支持版本(LTS)
Java 9.02017.09.22①此版本開始,每半年更新一次;②Java 9.0開始不再支持windows 32位系統
Java 10.02018.03.21
Java 11.02018.09.25JDK安裝包取消獨立JRE安裝包,是長期支持版本(LTS)
Java 12.02019.03.19
Java17.02021.09發布Java 17.0,版本號也稱為21.9,是長期支持版本。
Java19.02022.09發布Java19.0,版本號也稱為22.9。

6.3 Java之父

image-20220310152923961

  • 詹姆斯``·``高斯林``(James Gosling)先生以“Java 技術之父”而聞名于世。他是Java 技術的創始人,他親手設計了Java語言,并開發了Java編譯器和Java虛擬機,使Java成為了世界上最流行的開發語言。

  • James Gosling于1984 年加入Sun公司,并一直服務于Sun公司,直至2010年前后,Sun被Oracle并購而加入Oracle,擔任客戶端軟件集團的首席技術官; 2010年4月從Oracle離職。

6.4 公司八卦

SUN 與 Oracle

SUN是一家極具創新能力的公司,2001年 “9.11”以前,SUN公司市值超過``1000``億美元。 但是沒能利用Java構建一個強有力、可變現的生態系統,沒打好Java這張牌。此后,互聯網泡沫破裂,硬件需求大幅減少,它的市值在一個月之內跌幅超過90%。SUN公司的成長用了20年,而衰落只用了1年!

image-20220309230923533

Oracle 與 Google

Google和Oracle的侵權事件:

2010 年 8 月,Oracle 起訴 Google 的 Android 系統侵權,要求賠償 26 億美元。

  • Oracle認為Google的代碼中使用了Java的37``個``API,并且認為Google是故意為之,因為這樣做的好處是可以讓更多的Java程序員更容易接受Android的代碼。

  • Oracle認為Android 中有9``行代碼直接抄襲了Java的實現。這9行牛氣哄哄的代碼都出自一人之手,他就是Java 大牛------Joshua Bloch

2018 年 3 月,美國聯邦巡回上訴法院裁決,谷歌侵犯了甲骨文的版權,支付高達88``億美元的賠償金。

2021 年 4 月,美國最高法院給出了最終裁決:谷歌勝訴,其代碼屬于“合理使用”的范疇。為期十多年的軟件行業“第一版權案”落幕。

//Code In OpenJDK / Android :
1. private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
2.    if (fromIndex > toIndex)
3.        throw new IllegalArgumentException("fromIndex(" + fromIndex +
4.                   ") > toIndex(" + toIndex+")");
5.    if (fromIndex < 0)
6.        throw new ArrayIndexOutOfBoundsException(fromIndex);
7.    if (toIndex > arrayLen)
8.        throw new ArrayIndexOutOfBoundsException(toIndex);
9. }

6.5 Java技術體系平臺

Java SE(Java Standard Edition)標準版

  • 支持面向桌面級應用(如Windows下的應用程序)的Java平臺,即定位個人計算機的應用開發。

  • 包括用戶界面接口AWT及Swing,網絡功能與國際化、圖像處理能力以及輸入輸出支持等。

  • 此版本以前稱為J2SE

Java EE(Java Enterprise Edition)企業版

  • 為開發企業環境下的應用程序提供的一套解決方案,即定位在服務器端的``Web``應用開發

  • JavaEE是JavaSE的擴展,增加了用于服務器開發的類庫。如:Servlet能夠延伸服務器的功能,通過請求-響應的模式來處理客戶端的請求;JSP是一種可以將Java程序代碼內嵌在網頁內的技術。

  • 版本以前稱為J2EE

Java ME(Java Micro Edition)小型版

  • 支持Java程序運行在移動終端(手機、機頂盒)上的平臺,即定位在消費性電子產品的應用開發

  • JavaME是JavaSE的內伸,精簡了JavaSE 的核心類庫,同時也提供自己的擴展類。增加了適合微小裝置的類庫:javax.microedition.io.*等。

  • 此版本以前稱為J2ME

注意:Android開發不等同于Java ME的開發

7. Java開發環境搭建(掌握)

7.1 什么是JDK、JRE

JDK (Java Development Kit):是Java程序開發工具包,包含JRE 和開發人員使用的工具。

JRE (Java Runtime Environment) :是Java程序的運行時環境,包含JVM 和運行時所需要的核心類庫

如下是Java 8.0 Platform:

image-20220310200731185

小結:

JDK = JRE + 開發工具集(例如Javac編譯工具等)

JRE = JVM + Java SE標準類庫

7.2 JDK版本選擇

image-20221108221057540

  • 自Java 8版本發布以來,其后的每次更新,都會有小伙伴高呼:Java8 YYDS!

  • 論壇的聲音:“你發任你發,我用Java 8`!”

數據說話1:

JRebel 于2022年4月前后發布了《2022 年Java生態系統狀況報告》,報告中提到使用Java11 的占比最多,Java 8 緊隨其后,如下圖。而此前2020年的報告顯示,Java8占比達到了84.48%

我的分析:

G1是最受歡迎的GC算法。Java 11及更高版本的G1收集器是默認的GC,而Java 8中并不是。出于對G1的喜愛,很多開發者才會選擇拋棄Java 8。

數據說話2:

此外,某美國軟件開發商在對近千名專業的Java開發者調研后,發布的《2022年Java開發者生產力報告》稱:八年前發布的Java 8依然是Java中應用最廣泛的版本,占比 37%,其次是 Java 11,占比29%

高斯林說話:

image-20220428151952049

Spring框架說話:

在Java 17正式發布之前,Java開發框架Spring率先在官博宣布,Spring Framework 6和Spring Boot 3計劃在2022年第四季度實現總體可用性的高端基線:

  • Java 17+(來自 Spring Framework 5.3.x 線中的 Java 8-17)

  • Jakarta EE 9+(來自Spring框架5.3.x 線中的 Java EE 7-8)

Spring 官方說明:https://spring.io/blog/2022/01/20/spring-boot-3-0-0-m1-is-now-available

意味著:springboot3.0 是需要用java17和spring6.0為基礎建設。如果從企業選型最新springboot3.0作為架構來說,它搭配jdk17肯定是標配了。

7.3 JDK的下載

  • 下載網址(Oracle公司官網):www.oracle.com

  • 下載步驟:如圖所示,在官網底部選擇Developers開發者

(1)在Developers頁面中間的技術分類部分,選擇Java,單擊進入,如圖所示:

image-20211019110551338

(2)這里展示的是最新Java版本,例如Java17。單擊Download Java,然后選擇具體的版本下載。

image-20211019110843394

(3)選擇Download Java按鈕后

(4)如果想安裝Java8 可以選擇如下位置:

image-20211019111150970

(5)選擇Accept License Agreement,

image-20211019111252989

(6)注冊或登錄后下載:

image-20211019111922387

(7)如果需要安裝其它版本,可以選擇Java archive:

image-20220801004606762

接著進行選擇下載即可:

image-20220801004648997

7.4 JDK的安裝

安裝說明:

傻瓜式安裝,下一步即可。

建議:安裝路徑不要有中文或者空格等特殊符號。

本套課程會同時安裝JDK8 和 JDK17,并以JDK17為默認版本進行講解。

安裝步驟:

(1)雙擊jdk-17_windows-x64_bin.exe文件,并單擊下一步,如圖所示:

(2)修改安裝路徑,單擊更改,如圖所示:

(3)將安裝路徑修改為D:\develop_tools\jdk\jdk-17.0.2\,并單擊下一步,如圖所示:

(4)稍后幾秒,安裝完成,如圖所示:

7.5 配置path環境變量

7.5.1 理解path環境變量

什么是path環境變量?

答:window操作系統執行命令時,所要搜尋的路徑。

為什么配置path?

答:希望在命令行使用javac.exe等工具時,任意目錄下都可以找到這個工具所在的目錄。

以JDK為例演示

我們在C:\Users\songhk目錄下使用javac命令,結果如下:

我們在JDK的安裝目錄的bin目錄下使用javac命令,結果如下:

image-20220607113708022

我們不可能每次使用java.exe,javac.exe等工具的時候都進入到JDK的安裝目錄下,太麻煩了。這時就需要配置path環境變量。

7.5.2 JDK8配置方案1:只配置path

步驟:

(1)打開桌面上的計算機,進入后在左側找到此電腦,單擊鼠標右鍵,選擇屬性,如圖所示:

(2)選擇高級系統設置,如圖所示:

(3)在高級選項卡,單擊環境變量,如圖所示:

(4)在系統變量中,選中Path 環境變量,雙擊或者點擊編輯 ,如圖所示:

(5)點擊新建,填入D:\develop_tools\jdk\jdk1.8.0_271\bin ,并將此值上移到變量列表的首位。如圖所示:

  • 編輯模式1:

image-20220607114102135

  • 編輯模式2:(注意,結尾需要有英文模式下的;)

(6)環境變量配置完成,重新開啟DOS命令行,在任意目錄下輸入javacjava命令或java -version,運行成功。

image-20220607114432286

image-20220607114517652

7.5.3 JDK8配置方案2:配置JAVA_HOME+path(推薦)
  • 步驟:

(1)打開桌面上的計算機,進入后在左側找到計算機,單擊鼠標右鍵,選擇屬性,如圖所示:

(2)選擇高級系統設置,如圖所示:

(3)在高級選項卡,單擊環境變量,如圖所示:

(4)在系統變量中,單擊新建 ,創建新的環境變量,如圖所示:

image-20220310225245208

(5)變量名輸入JAVA_HOME,變量值輸入 D:\develop_tools\jdk\jdk1.8.0_271 ,單擊確定,如圖所示:

image-20220607114800372

(6)選中Path 環境變量,雙擊或者點擊編輯 ,如圖所示:

(7)在變量值的最前面,鍵入%JAVA_HOME%\bin。如圖所示:

image-20220607114953758

注意:強烈建議將%JAVA_HOME%\bin聲明在path環境變量中所有變量的最前面!

(8)環境變量配置完成,重啟DOS命令行,在任意目錄下輸入javacjava命令或java -version,運行成功。

image-20220607114432286

image-20220607114517652

我想說:

有的書籍、論壇、視頻上還提到配置classpath,用于指名class文件識別的路徑。其實是沒必要的,反而建議大家如果配置了classpath環境變量,要刪除。對于初學者,反而不友好。

小結如下:

7.5.4 JDK17配置方案:自動配置

不管大家有沒有提前安裝JDK8或其它版本JDK,在我們安裝完JDK17之后,理應按JDK8的方式配置path環境變量。但是,我們發現在安裝完JDK17以后,配置環境變量之前,執行CMD指令:

image-20220607115700870

竟然成功了!而且是17.0.2版本。因為JDK17在安裝之后,自動進行了環境變量的配置。如下:

image-20220607115840388

這里建議,將JDK17安裝的路徑,設置為JAVAHOME,并將`%JAVAHOME%\bin`上移到首位。image-20221110142710972

image-20221110142734279

思考:如果你仍然希望在JDK8下開發Java程序?如何做呢?

8. 開發體驗:HelloWorld(掌握)

JDK安裝完畢,我們就可以開發第一個Java程序了,習慣性的稱為:HelloWorld。

8.1 開發步驟

Java程序開發三步驟:編寫編譯運行

  • 將 Java 代碼編寫到擴展名為 .java 的源文件中

  • 通過 javac.exe 命令對該 java 文件進行編譯,生成一個或多個字節碼文件

  • 通過 java.exe 命令對生成的 class 文件進行運行

8.2 編寫

(1)在D:\JavaSE\chapter01 目錄下新建文本文件,完整的文件名修改為HelloWorld.java,其中文件名為HelloWorld,后綴名必須為.java

image-20220801010222222

(2)用記事本或editplus等文本編輯器打開(雖然記事本也可以,但是沒有關鍵字顏色標識,不利于初學者學習)

(3)在文件中輸入如下代碼,并且保存:

class HelloChina {public static void main(String[] args) {System.out.println("HelloWorld!!");}
}
  • 友情提示1:每個字母和符號必須與示例代碼一模一樣,包括大小寫在內。

  • 友情提示2:

image-20220310230618659

image-20220521173215013

第一個HelloWord 源程序就編寫完成了,但是這個文件是程序員編寫的,JVM是看不懂的,也就不能運行,因此我們必須將編寫好的Java``源文件 編譯成JVM可以看懂的字節碼文件 ,也就是.class文件。

8.3 編譯

在DOS命令行中,進入D:\JavaSE\chapter01目錄,使用javac 命令進行編譯。

使用文件資源管理器打開D:\JavaSE\chapter01目錄,然后在地址欄輸入cmd。

image-20220801010435144

命令:

javac Java源文件名.后綴名java

舉例:

javac HelloWorld.java

image-20220801010840640

編譯成功后,命令行沒有任何提示。打開D:\JavaSE\chapter01目錄,發現產生

了一個新的文件 HelloChina.class,該文件就是編譯后的文件,是Java的可運

行文件,稱為字節碼文件,有了字節碼文件,就可以運行程序了。

8.4 運行

在DOS命令行中,在字節碼文件目錄下,使用java 命令進行運行。

命令:

java 主類名字

主類是指包含main方法的類,main方法是Java程序的入口:

public static void main(String[] args){}

舉例:

java HelloChina

錯誤演示:

java HelloChina.class

image-20220801011104381

9. Java開發工具

9.1 都有哪些開發Java的工具

級別一:文本開發工具

image-20220513185907022

級別二:集成開發環境(Integrated Development Environment,IDE)

把代碼編寫,編譯,執行,調試等多種功能綜合到一起的開發工具。

image-20220513190655773

9.2 如何選擇

前期我們先使用文本開發工具,培養代碼感,利于公司筆、面試。

后期我們使用IDE,提供更強大的功能支持

10. HelloWorld案例常見錯誤

10.1 拼寫問題

  • 單詞拼寫問題

    • 正確:class 錯誤:Class

    • 正確:String 錯誤:string

    • 正確:System 錯誤:system

    • 正確:main 錯誤:mian

  • Java語言是一門嚴格區分大小寫的語言

  • 標點符號使用問題

    • 不能用中文符號,英文半角的標點符號(正確)

    • 括號問題,成對出現

10.2 編譯、運行路徑問題

舉例1:

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 源文件名不存在或者寫錯

  • 當前路徑錯誤

  • 后綴名隱藏問題

舉例2:

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 類文件名寫錯,尤其文件名與類名不一致時,要小心

  • 類文件不在當前路徑下,或者不在classpath指定路徑下

10.3 語法問題

舉例1:

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

聲明為public的類應與文件名一致,否知編譯失敗。

舉例2:

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

編譯失敗,注意錯誤出現的行數,再到源代碼中指定位置改錯

10.4 字符編碼問題

當cmd命令行窗口的字符編碼與.java源文件的字符編碼不一致,如何解決?

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

解決方案一:

  • 在Notepad++等編輯器中,修改源文件的字符編碼:

1557881271819

  • 在EditPlus中可以將Java源文件另存為ANSI編碼方式(中文操作系統下即為GBK字符集)

1658810752424

解決方案二:

在使用javac命令式,可以指定源文件的字符編碼
javac -encoding utf-8 Review01.java

10.5 建議

  • 注意縮進!

    • 一定要有縮進。縮進就像人得體的衣著一樣!

    • 只要遇到{}就縮進,縮進的快捷鍵tab鍵。

  • 必要的空格

    • 變量類型、變量、賦值符號、變量值之間填充相應空格,更美觀。比如: int num = 10;

11. HelloWorld小結

11.1 Java程序的結構與格式

結構:

類{方法{語句;}
}

格式:

(1)每一級縮進一個Tab鍵

(2){}的左半部分在行尾,右半部分單獨一行,與和它成對的"{"的行首對齊

11.2 Java程序的入口

Java程序的入口是main方法

public static void main(String[] args){}

11.3 兩種常見的輸出語句

  • 換行輸出語句:輸出內容,完畢后進行換行,格式如下:

?

  • System.out.println(輸出內容);

?

  • 直接輸出語句:輸出內容,完畢后不做任何處理,格式如下

?

  • System.out.print(輸出內容);

注意事項:

換行輸出語句,括號內可以什么都不寫,只做換行處理

直接輸出語句,括號內什么都不寫的話,編譯報錯

11.4 源文件名與類名

(1)源文件名是否必須與類名一致?public呢?

如果這個類不是public,那么源文件名可以和類名不一致。但是不便于代碼維護。如果這個類是public,那么要求源文件名必須與類名一致。否則編譯報錯。我們建議大家,不管是否是public,都與源文件名保持一致,而且一個源文件盡量只寫一個類,目的是為了好維護。

(2)一個源文件中是否可以有多個類?public呢?

一個源文件中可以有多個類,編譯后會生成多個.class字節碼文件。但是一個源文件只能有一個public的類。

12. 注釋(comment)

image-20220610113151774

什么是注釋?

  • 源文件中用于解釋、說明程序的文字就是注釋。

注釋是一個程序員必須要具有的良好編程習慣。實際開發中,程序員可以先將自己的思想通過注釋整理出來,再用代碼去體現。

  • 程序員最討厭兩件事:

    一件是自己寫代碼被要求加注釋

    另一件是接手別人代碼,發現沒有注釋

?

  • 不加注釋的危害

?

?

  • Java中的注釋類型:

    • 單行注釋

    ?

    • //注釋文字

    ?

    • 多行注釋

    ?

    • /*
      注釋文字1
      注釋文字2
      注釋文字3
      */

    ?

    • 文檔注釋 (Java特有)

    ?

    • /**
      @author 指定java程序的作者
      @version 指定源文件的版本
      */
  • 注釋的作用

    • 它提升了程序的可閱讀性。(不加注釋的危害性,見圖。)

    • 調試程序的重要方法。

具體使用1:單行注釋、多行注釋

  • 對于單行和多行注釋,被注釋的文字,不會不會出現在字節碼文件中,進而不會被JVM(java虛擬機)解釋執行。

  • 多行注釋里面不允許有多行注釋嵌套。

  • 一個段子

?

  • A:嘿 //是什么意思啊?
    B:嘿.
    A:呃 我問你//是什么意思?
    B:問吧.
    A:我剛才不是問了么?
    B:啊?
    A:你再看看記錄…
    B:看完了.
    A:…所以//是啥?
    B:所以什么?
    A:你存心耍我呢吧?
    B:沒有啊 你想問什么?
    ……
    不斷循環之后,A一氣之下和B絕交,自己苦學程序。
    N年之后,A終于修成正果,回想起B,又把聊天記錄翻出來看,這時,他突然發現B沒有耍他……
    而他自己也不知道當年他問B的究竟是什么問題……

具體使用2:文檔注釋(Java特有)

  • 文檔注釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁文件形式體現的該程序的說明文檔。

  • 操作方式。比如:

?

  • javadoc -d mydoc -author -version HelloWorld.java

image-20220310232527578

案例:

//單行注釋
/*
多行注釋
*/
/**
文檔注釋演示。這是我的第一個Java程序!^_^
@author songhk
@version 1.0
*/
public class HelloWorld{/**Java程序的入口@param args main方法的命令參數*/public static void main(String[] args){System.out.println("hello");}
}

13. Java API文檔

  • API (Application Programming Interface,應用程序編程接口)是 Java 提供的基本編程接口。

  • Java語言提供了大量的基礎類,因此 Oracle 也為這些基礎類提供了相應的說明文檔,用于告訴開發者如何使用這些類,以及這些類里包含的方法。大多數Java書籍中的類的介紹都要參照它來完成,它是編程者經常查閱的資料。

  • Java API文檔,即為JDK使用說明書、幫助文檔。類似于:

新華字典

新華字典

  • 下載API文檔:

    • 在線看:https://docs.oracle.com/en/java/javase/17/docs/api/index.html

    • 離線下載:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html

14. Java核心機制:JVM

14.1 Java語言的優缺點

Java確實是從C語言和C++語言繼承了許多成份,甚至可以將Java看成是類C語言發展和衍生的產物。“青出于藍,而勝于藍”。

14.1.1 優點

**跨平臺性:**這是Java的核心優勢。Java在最初設計時就很注重移植和跨平臺性。比如:Java的int永遠都是32位。不像C++可能是16,32,可能是根據編譯器廠商規定的變化。

  • 通過Java語言編寫的應用程序在不同的系統平臺上都可以運行。“Write once , Run Anywhere”。

  • 原理:只要在需要運行 java 應用程序的操作系統上,先安裝一個Java虛擬機 (JVM ,Java Virtual Machine) 即可。由JVM來負責Java程序在該系統中的運行。

JVM的跨平臺性

JVM的跨平臺性

面向對象性:

  • 面向對象是一種程序設計技術,非常適合大型軟件的設計和開發。面向對象編程支持封裝、繼承、多態等特性,讓程序更好達到高內聚低耦合的標準。

**健壯性:**吸收了C/C++語言的優點,但去掉了其影響程序健壯性的部分(如指針、內存的申請與釋放等),提供了一個相對安全的內存管理和訪問機制。

安全性高:

  • Java適合于網絡/分布式環境,需要提供一個安全機制以防惡意代碼的攻擊。如:安全防范機制(ClassLoader類加載器),可以分配不同的命名空間以防替代本地的同名類、字節代碼檢查。

簡單性:

  • Java就是C++語法的簡化版,我們也可以將Java稱之為“C++--”。比如:頭文件,指針運算,結構,聯合,操作符重載,虛基類等。

高性能:

  • Java最初發展階段,總是被人詬病“性能低”;客觀上,高級語言運行效率總是低于低級語言的,這個無法避免。Java語言本身發展中通過虛擬機的優化提升了幾十倍運行效率。比如,通過JIT(JUST IN TIME)即時編譯技術提高運行效率。

  • Java``低性能的短腿,已經被完全解決了。業界發展上,我們也看到很多C++應用轉到Java開發,很多C++程序員轉型為Java程序員。

14.1.2 缺點
  • 語法過于復雜、嚴謹,對程序員的約束比較多,與python、php等相比入門較難。但是一旦學會了,就業崗位需求量大,而且薪資待遇節節攀升

  • 一般適用于大型網站開發,整個架構會比較重,對于初創公司開發和維護人員的成本比較高(即薪資高),選擇用Java語言開發網站或應用系統的需要一定的經濟實力。

  • 并非適用于所有領域。比如,Objective C、Swift在iOS設備上就有著無可取代的地位。瀏覽器中的處理幾乎完全由JavaScript掌控。Windows程序通常都用C++或C#編寫。Java在服務器端編程和跨平臺客戶端應用領域則很有優勢。

14.2 JVM功能說明

JVMJava Virtual Machine ,Java虛擬機):是一個虛擬的計算機,是Java程序的運行環境。JVM具有指令集并使用不同的存儲區域,負責執行指令,管理數據、內存、寄存器。

image-20220310165805739

14.2.1 功能1:實現Java程序的跨平臺性

我們編寫的Java代碼,都運行在JVM 之上。正是因為有了JVM,才使得Java程序具備了跨平臺性。

image-20220513191856727

使用JVM前后對比:

14.2.2 功能2:自動內存管理(內存分配、內存回收)
  • Java程序在運行過程中,涉及到運算的數據的分配存儲等都由JVM來完成

  • Java消除了程序員回收無用內存空間的職責。提供了一種系統級線程跟蹤存儲空間的分配情況,在內存空間達到相應閾值時,檢查并釋放可被釋放的存儲器空間。

  • GC的自動回收,提高了內存空間的利用效率,也提高了編程人員的效率,很大程度上減少了因為沒有釋放空間而導致的內存泄漏

面試題:

Java程序還會出現內存溢出和內存泄漏問題嗎? Yes!

15. 章節案例

案例1:個人信息輸出

class Exercise1{public static void main(String[] args){System.out.println("姓名:康師傅");System.out.println();//換行操作System.out.println("性別:男");System.out.println("家庭住址:北京程序員聚集地:回龍觀");}
}

案例2:輸出:心形

結合\n(換行),\t(制表符),空格等在控制臺打印出如下圖所示的效果。

方式一:

//方式一:
class Exercise2{public static void main(String[] args){System.out.print("\t");System.out.print("*");System.out.print("\t");System.out.print("\t");System.out.print("\t");System.out.print("\t");System.out.print("\t");System.out.print("\t");System.out.print("\t");System.out.println("*");

?
? System.out.print(““);
? System.out.print(”\t");
? //System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“I love java”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.println("
”);

?
? System.out.print(“\t”);
? System.out.print(““);
? System.out.print(”\t");
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
?
? System.out.println("
”);

?
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(““);
? System.out.print(”\t");
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
?
? System.out.println("
”);

?
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(““);
? System.out.print(”\t");
? System.out.print(“\t”);
? System.out.print(“\t”);
?
? System.out.println("
”);

?
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(““);
? System.out.print(”\t");
?
? System.out.println("
”);

?
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(“\t”);
? System.out.print(" “);
? System.out.print(”*");
?
? }
?

}

方式二:

class Exercise3{public static void main(String[] args){                                                                                                   System.out.print("\t"+"*"+"\t\t\t\t\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");System.out.print("*"+"\t\t"+"*"+"\t\t\t\t"+"I love Java"+"\t\t\t\t"+"*"+"\t\t\t"+"*"+"\n");System.out.print("\t"+"*"+"\t\t\t\t\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");System.out.print("\t\t"+"*"+"\t\t\t\t\t\t\t\t\t\t"+"*"+"\t\t"+"\n");System.out.print("\t\t\t"+"*"+"\t\t\t\t\t\t\t\t"+"*"+"\t"+"\n");System.out.print("\t\t\t\t"+"*"+"\t\t\t\t\t\t"+"*"+""+"\t"+"\n");System.out.print("\t\t\t\t\t"+"*"+"\t\t\t\t"+"*"+""+"\t\t"+"\n");System.out.print("\t\t\t\t\t\t"+"*"+"\t\t"+"*"+""+"\t\t"+"\n");System.out.print("\t\t\t\t\t\t\t"+"*"+"\n");}}

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

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

相關文章

TCP 和UDP 到底有啥區別

TCP&#xff08;傳輸控制協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;是互聯網上常用的兩種傳輸層協議&#xff0c;它們在數據傳輸方式和特性上有顯著的區別。下面是TCP和UDP的主要區別&#xff1a; 連接性: TCP 是一種面向連接的協議。在數據傳輸前&#xf…

C#圖像處理OpenCV開發指南(CVStar,09)——邊緣識別之Scharr算法的實例代碼

1 邊緣識別之Scharr算法 算法文章很多&#xff0c;不再論述。 1.1 函數原型 void Cv2.Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType&#xff09; 1.2 參數說明 src 代表原始圖像。dst 代表目標圖像。ddepth 代表輸出圖像的深度。CV_16Sdx 代表x方向上的求導階數…

uniApp應用軟件在運行時,不符合華為應用市場審核標準。解決方案合集!

&#xff08;暫時用不到的也建議收藏一下&#xff0c;因為文章持續更新中&#xff09; 最新更改時間&#xff1a;20023-12-10 第一次做App應用開發相信大家一定都遇到過華為應用市場審核的“駁回”&#xff01; 有些問題一看就明白可以立馬修改&#xff0c;而有一些問題修改意…

Dubbo入門直接上手,結合微服務詳解

Dubbo 高性能、輕量級的 Java RPC 框架 RPC&#xff1a; Remote Procedure Call 遠程過程調用&#xff0c;簡單來說就是它允許一個計算機程序通過網絡請求調用另一個計算機上的程序&#xff0c;就像本地調用一樣。有非常多的協議和技術來都實現了RPC的過程&#xff0c;比如&a…

Elasticsearch 8.9 refresh刷Es緩沖區的數據到Lucene,更新segemnt,使數據可見

一、相關API的handler1、接受HTTP請求的hander(RestRefreshAction)2、往數據節點發送刷新請求的action(TransportRefreshAction)3、數據節點接收主節點refresh傳輸的action(TransportShardRefreshAction) 二、在IndexShard執行refresh操作1、根據入參決定是使用lucene提供的阻塞…

【華為數據之道學習筆記】3-8以確保合規遵從為核心的外部數據管理

一、以確保合規遵從為核心的外部數據管理 外部數據是指華為公司引入的外部組織或者個人擁有處置權利的 數據&#xff0c;如供應商資質證明、消費者洞察報告等。外部數據治理的出發點是合規遵從優先&#xff0c;與內部數據治理的目的不同。 外部數據的治理主要遵循以下原則。 1&…

【設計模式--創建型--原型模式】

設計模式--創建型--原型模式 原型模式概述結構實現結果 案例代碼結果使用場景 擴展&#xff08;深\淺克隆&#xff09;淺克隆演示&#xff1a;結果&#xff1a;使用深克隆&#xff08;利用對象流&#xff09;結果 原型模式 概述 用一個已經創建的實例作為原型&#xff0c;通過…

Go簡單了解

0.一直很好奇,go是不是像傳說中的速度快,解決了多線程問題,快速進行了解了解,和java進行對比,他是怎么解決語言發展的問題的…,所有語言都是差不多的,只是熟練程度不同而已 1.go圖標是土撥鼠,2009發行 docker使用go,解決了并發問題 google facebook 騰訊 百度 七牛云 京東 小米…

Spring Cloud Gateway + Nacos + LoadBalancer實現企業級網關

1. Spring Cloud Gateway 整合Nacos、LoadBalancer 實現企業級網關 前置工作&#xff1a; 創建 SpringBoot 多模塊項目創建網關&#xff08;gateway-service&#xff09;、用戶&#xff08;user-service&#xff09;模塊用戶模塊添加 Nacos discovery 支持以及 Spring Web&am…

gitbash下載安裝

參考教程 零、下載 官網地址 2.43.0win64 鏈接&#xff1a;https://pan.baidu.com/s/16urs_nmky7j20-qNzUTTkg 提取碼&#xff1a;7jaq 一、安裝 圖標組件&#xff08;Additional icons&#xff09;&#xff1a;選擇是否創建桌面快捷方式&#xff1b;桌面瀏覽&#xff08;Win…

設計模式--命令模式的簡單例子

引入&#xff1a;以一個對數組的增刪改查為例。通過命令模式可以對數組進行增刪改查以及撤銷回滾。 一、基本概念 命令模式有多種分法&#xff0c;在本文中主要分為CommandMgr、Command、Receiver. CommandMgr主要用于控制命令執行等操作、Command為具體的命令、Receiver為命…

逸迅科技丁紅陽:三種能力幫助企業打造GBI “護城河”

大數據產業創新服務媒體 ——聚焦數據 改變商業 近日&#xff0c;由上海市經濟和信息化委員會、上海市科學技術委員會指導&#xff0c;數據猿與上海大數據聯盟聯合主辦的“2023企業數智化轉型升級發展論壇”在上海舉行。本次論壇以“釋放數字價值驅動智能升級”為主題&#xf…

piakachu越權漏洞

水平越權 首先打開這一關&#xff0c;在右側有一些提示&#xff0c;我們可以看到 然后我們隨便輸入一組信息即可&#xff0c;可以在url中看到這樣的字段 當我們嘗試在url中直接更換另一個用戶名時可以發現&#xff0c;直接切換到了另一個用戶的身份 垂直越權 這里可以看到右邊…

QML和C++交互中,實現C++中connect到qml的信號,再從qml發射信號傳遞數據給C++的一種方式

1.需求&#xff1a; 假設我們有一個需求&#xff0c;要求在用戶點擊列表中的項目時&#xff0c;不僅在控制臺上輸出項目的名稱&#xff0c;還要在C端進行一些處理。我們希望在C端能夠接收到用戶點擊的項目名稱&#xff0c;并進行相應的處理。 2.分析&#xff1a; 在這種情況…

Android 10.0 系統framework修改低電量關機值為2%

1.前言 在10.0的系統產品開發中,在系統關于低電量關機的值,每個平臺都不同,根據實際開發底層硬件的要求看實際情況來調整這個值, 所以需要分析相關的電量變化執行的代碼流程,來實現這個功能 2.系統framework修改低電量關機值為2%的核心類 frameworks\base\services\cor…

一文學會使用 PyInstaller 將 Python 腳本打包為 .exe 可執行文件

文章目錄 前言PyInstaller特點跨平臺支持自動依賴項處理單文件發布支持圖形用戶界面&#xff08;GUI&#xff09;和命令行界面&#xff08;CLI&#xff09;應用支持多種打包選項 基本用法常用參數其它參數 版本 & 環境實現步驟安裝 PyInstaller創建 Python 腳本使用 PyInst…

Strange-Towers-of-Hanoi

title: Strange Towers of Hanoi date: 2023-12-11 03:20:05 tags: 遞推 categories: 算法進階指南 題目大意 解出 n n n 個盒子 4 4 4 座塔的漢諾塔問題最少需要多少次&#xff1f; 思路 首先考慮 n n n 個盒子 3 3 3 座塔的經典漢諾塔問題&#xff0c;設 d [ n ] d[n] …

第三十章 控制到 XML 模式的映射 - Array of Classname

文章目錄 第三十章 控制到 XML 模式的映射 - Array of ClassnameArray of Classname 第三十章 控制到 XML 模式的映射 - Array of Classname Array of Classname 本部分顯示了從啟用 XML 的類生成的XML 架構的一部分&#xff0c;此時該類包含定義為類名數組的屬性。例如&…

【SpringBoot教程】SpringBoot 創建定時任務(配合數據庫動態執行)

作者簡介&#xff1a;大家好&#xff0c;我是擼代碼的羊駝&#xff0c;前阿里巴巴架構師&#xff0c;現某互聯網公司CTO 聯系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我進群&#xff0c;大家一起學習&#xff0c;一起進步&#xff0c;一起對抗…

transformer模型結構|李宏毅機器學習21年

來源&#xff1a;https://www.bilibili.com/video/BV1Bb4y1L7FT?p4&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目錄 概述seq2seqtransformerEncoderDecoderAutoregressive&#xff08;AT&#xff09;self-attention與masked-self attentionmodel如何決定輸出的長度…