JavaNote-概述及安裝

来源:https://www.cnblogs.com/lkztrovo-lsh/archive/2023/07/22/17573155.html
-Advertisement-
Play Games

# 1. Java語言概述 ## 1.1 Java概述 - 是`SUN`(`Stanford University Network`,斯坦福大學網路公司)1995年推出的一門高級編程語言。 - 是一種`面向Internet`的編程語言。Java一開始富有吸引力是因為Java程式可以在Web瀏覽器中運 ...


1. Java語言概述

1.1 Java概述

  • SUNStanford University Network,斯坦福大學網路公司)1995年推出的一門高級編程語言。

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

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

1.2 Java語言簡史

起步階段:

1991年,Sun公司的工程師小組想要設計一種語言,應用在家用電器的控制和通信。由於這些設備的處理能力和記憶體都很有限,並且不同的廠商會選擇不同的中央處理器(CPU),因此這種語言的關鍵是:代碼短小、緊湊且與平臺無關

Gosling團隊率先創造了這個語言,並命名為“Oak"。後因智能化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。

隨著20世紀90年代互聯網的發展,Sun公司發現該語言在互聯網上應用的前景,於是改造了Oak,於1995年5月以Java的名稱正式發佈。

發展階段:

發行版本 發行時間 備註
Java 1.0 1996.01.23 Sun公司發佈了Java的第一個開發工具包
Java 1.1 1997.02.19 JavaOne會議召開,創當時全球同類會議規模之最。
Java 1.2 1998.12.08 Java拆分成:J2SE(標準版)、J2EE(企業版)、J2ME(小型版)
Java 1.3 2000.05.08
Java1.4 2004.02.06
Java 5.0 2004.09.30 ①版本號從1.4直接更新至5.0;②平臺更名為JavaSE、JavaEE、JavaME
Java 6.0 2006.12.11 2009.04.20 Oracle宣佈收購SUN公司
2009.04.20 Oracle公司收購SUN,交易價格74億美元。
Java 7.0 2011.07.02
Java 8.0 2014.03.18 此版本是繼Java 5.0以來變化最大的版本。是長期支持版本(LTS)
Java 9.0 2017.09.22 ①此版本開始,每半年更新一次;②Java 9.0開始不再支持windows 32位系統
Java 10.0 2018.03.21
Java 11.0 2018.09.25 JDK安裝包取消獨立JRE安裝包,是長期支持版本(LTS)
Java 12.0 2019.03.19
... ...
Java17.0 2021.09 發佈Java 17.0,版本號也稱為21.9,是長期支持版本。
... ...
Java19.0 2022.09 發佈Java19.0,版本號也稱為22.9。
... ...

補充:Java之父——詹姆斯·高斯林(James Gosling)

image

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

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

1.3 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

image

註意:Android開發不等同於Java ME的開發。

2. Java開發環境搭建

2.1 什麼是JDK、JRE

  • JDK(Java Development Kit):是Java程式開發工具包,包含JRE 和開發人員使用的工具。
  • JRE(Java Runtime Environment):是Java程式的運行時環境,包含JVM 和運行時所需要的核心類庫

如下是Java 8.0 Platform:

image

image

2.2 JDK版本選擇

  • 八爺黨:堅守Java的陣地,雖然Java如今都已經進入了20年代,但是依然是一些開發環境的主陣地。
  • 革命黨:適應接受新的穩定版本。給開發者帶來更加便利高效的體驗。例如:
    • G1收集器:最受歡迎的GC演算法。Java 11及更高版本的G1收集器是預設的GC,而Java 8中並不是。
    • 框架反推著開發人員使用更高的版本。在Java 17正式發佈之前,Java開發框架Spring率先在官博宣佈,Spring Framework 6和Spring Boot 3計劃在2022年第四季度實現總體可用性的高端基線。意味著springboot3.0 是需要用java17和spring6.0為基礎建設。如果從企業選型最新springboot3.0作為架構來說,它搭配jdk17肯定是標配了。

2.3 JDK的下載

  • 下載網址(Oracle公司官網):www.oracle.com
  • 下載步驟:如圖所示,在官網底部選擇Developers開發者

image

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

image

(2)這裡展示的是最新Java版本,例如Java20。下滑到 Java SE 欄目的位置。單擊Download Oracle JDK,然後選擇具體的版本下載。

image

image

(3)選擇Download Oracle JDK按鈕後,進入Download Java界面。選擇對應版本點擊下載鏈接下載。

image

(4)如果想安裝Java 8版本的話,可以在當前頁面繼續下滑到如下位置:

image

(5)選擇Accept License Agreement,點擊下載。

image

(6)註冊或登錄後下載:

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

image

接著進行選擇下載即可。

2.4 JDK的安裝

  • 安裝說明
    • 傻瓜式安裝,下一步即可。
    • 建議:安裝路徑不要有中文或者空格等特殊符號。
    • 以JDK17版本為例。
  • 安裝步驟:

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

image

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

image

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

image

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

image

image

2.5 配置path環境變數

為什麼配置path?

  • path環境變數是window操作系統執行命令時,所要搜尋的路徑。
  • 希望在命令行使用javac.exe等工具時,任意目錄下都可以找到這個工具所在的目錄。

JDK8配置方案:配置JAVA_HOME+path(推薦)

  • 步驟:

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

image

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

image

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

image

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

image

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

image

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

image

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

image

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

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

配置classpath,用於指名class文件識別的路徑。其實是沒必要的。

小結如下:

image

JDK17配置方案:自動配置

在我們安裝完JDK17之後,理應按JDK8的方式配置path環境變數。但是,我們發現在安裝完JDK17以後,配置環境變數之前,執行CMD指令:

image

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

image

這裡建議,將JDK17安裝的路徑,設置為JAVA_HOME,並將%JAVA_HOME%\bin上移到首位。

image

image

3. Java API文檔

4. Java核心機制:JVM

4.1 Java語言的優缺點

4.1.1 優點

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

    • 通過Java語言編寫的應用程式在不同的系統平臺上都可以運行。“Write once , Run Anywhere”。
    • 原理:只要在需要運行 java 應用程式的操作系統上,先安裝一個Java虛擬機 (JVM ,Java Virtual Machine) 即可。由JVM來負責Java程式在該系統中的運行。
  • 面向對象性:面向對象是一種程式設計技術,非常適合大型軟體的設計和開發。面向對象編程支持封裝、繼承、多態等特性,讓程式更好達到高內聚低耦合的標準。

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

  • 安全性高:Java適合於網路/分散式環境,需要提供一個安全機制以防惡意代碼的攻擊。如:安全防範機制(ClassLoader類載入器),可以分配不同的命名空間以防替代本地的同名類、位元組代碼檢查。

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

  • 高性能:

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

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

4.1.2 缺點

  • 語法過於複雜、嚴謹,對程式員的約束比較多,與python、php等相比入門較難。但是一旦學會了,就業崗位需求量大,而且薪資待遇節節攀升
  • 一般適用於大型網站開發,整個架構會比較重,對於初創公司開發和維護人員的成本比較高(即薪資高),選擇用Java語言開髮網站或應用系統的需要一定的經濟實力。
  • 並非適用於所有領域。比如,Objective C、Swift在iOS設備上就有著無可取代的地位。瀏覽器中的處理幾乎完全由JavaScript掌控。Windows程式通常都用C++或C#編寫。Java在伺服器端編程和跨平臺客戶端應用領域則很有優勢。

4.2 JVM功能說明

JVMJava Virtual Machine ,Java虛擬機):是一個虛擬的電腦,是Java程式的運行環境。JVM具有指令集並使用不同的存儲區域,負責執行指令,管理數據、記憶體、寄存器。

image

4.2.1 功能1:實現Java程式的跨平臺性

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

image

使用JVM前後對比:

image

4.2.2 功能2:自動記憶體管理(記憶體分配、記憶體回收)

  • Java程式在運行過程中,涉及到運算的數據的分配存儲等都由JVM來完成
  • Java消除了程式員回收無用記憶體空間的職責。提供了一種系統級線程跟蹤存儲空間的分配情況,在記憶體空間達到相應閾值時,檢查並釋放可被釋放的存儲器空間。
  • GC的自動回收,提高了記憶體空間的利用效率,也提高了編程人員的效率,很大程度上減少了因為沒有釋放空間而導致的記憶體泄漏

即使有GC的自動回收功能,Java程式還會出現記憶體溢出和記憶體泄漏問題!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 背景 最近聽音樂的時候,看到各種動效,突然好奇這些音頻數據是如何獲取並展示出來的,於是花了幾天功夫去研究相關的內容,這裡只是給大家一些代碼實例,具體要看懂、看明白,還是建議大家大家結合相關API文檔來閱讀這篇文章。 參考資料地址:Web ...
  • 第1代圖片驗證碼 - 字母數字型 第2代滑動驗證碼 - 圖片截取型 第3代驗證碼 - 選圖型 vercode.js 結合了上面的情況下新研發的一種驗證碼。 驗證碼類型 驗證碼描述 操作性 安全性 描述 字母數字型圖片驗證碼 這是一種通過後臺隨機碼生成圖片的驗證碼。伺服器會在隨機碼生成時保存隨機碼。 ...
  • Java三大特征:封裝,繼承和多態成員變數:靜態成員變數(static)和實例成員變 訪問方法:類名.靜態成員變數;對象.實例成員變數;對象.靜態成員變數;(第三個不推薦) 套話:靜態的都可以訪問,實例的只能實例的訪問 繼承中子類不能繼承父類的構造方法,eg:父類:public People(int ...
  • # 1.網站的入口--路由和視圖 URL是網站Web服務的入口。用戶在瀏覽器輸入URL發出請求後,django會根據路由系統,運行對應的視圖函數,然後返回信息到瀏覽器中。 ## 1.1 認識路由 創建項目時,會自動生成urls.文件,文件中定義了項目的路由信息,成為項目的路由解析入口。在自建的應用中 ...
  • 操作系統 : debian 11 (bullseye,docker)、Windows10_x64 FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 Python 版本 : 3.9.2 日常工作中,有時候會遇到g729編碼的相關內容,但FreeSWITCH預設是不支持g729編 ...
  • # JVM運行時數據區之堆空間 ## 1.核心概述 一個JVM實例只存在一個堆記憶體,堆也是Java記憶體管理的核心區域。堆區在**JVM 啟動的時候即被創建**,其空間大小也就確定了,是**JVM管理的最大一塊記憶體空間**。 《Java虛擬機規範》中對Java堆的描述是:所有的對象實例以及數組都應當在 ...
  • 一個從多個父類繼承過來的子類,可以訪問所有父類的功能。並不推薦使用。 多重繼承最簡單有用的形式是mixin。假設在之前Contact類增加一個功能,允許給self.email發送一封郵件。 ```python class ContactList(list): def search(self, nam ...
  • Redis是用C語言開發的一個開源的高性能鍵值對(key-value)資料庫,官方提供測試數據,50個併發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下: > ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...