初學Java時沒有理解的一些概念

来源:https://www.cnblogs.com/reashal/archive/2022/04/17/16156725.html
-Advertisement-
Play Games

背景 之前學Java屬於趕鴨子上架,草草學習基礎語法便直接做課程作業,許多概念問題仍不清楚,故在此梳理一下,主要參考廖雪峰和互聯網資料。 Java運行方式與JVM Java是介於編譯型語言(C++)和解釋型語言(Python)之間的。所有Java代碼先被編譯為.class文件,然後在Java虛擬機( ...


背景

之前學Java屬於趕鴨子上架,草草學習基礎語法便直接做課程作業,許多概念問題仍不清楚,故在此梳理一下,主要參考廖雪峰和互聯網資料。

Java運行方式與JVM

Java是介於編譯型語言(C++)和解釋型語言(Python)之間的。所有Java代碼先被編譯為.class文件,然後在Java虛擬機(JVM)中運行,跨系統(一次開發,隨時可用)。

JDK,JRE,JVM的聯繫和區別

  • JDK(Java Development Kit):開發工具包

    • 包含JRE+編譯器、調試器等開發工具
  • JRE(Java Runtime Environment):Java運行時環境

    • 包含JVM+核心類庫
  • JVM(Java Virtual Machine):Java虛擬機

    • Java跨平臺最核心的部分

幾個可執行文件的意義

  • java:即JVM,運行Java程式,就是啟動JVM,然後讓JVM執行指定的編譯後的代碼;
  • javac:Java的編譯器,把Java源碼文件(.java)編譯為Java位元組碼文件(.class);
  • jar:把一組.class文件打包成一個.jar文件,便於發佈;
  • javadoc:從Java源碼中自動提取註釋並生成文檔;
  • jdb:Java調試器,用於開發階段的運行調試。

jar包相關概念

本貼參考知乎用戶:慕課網 的文章《jar包的一些事兒》

什麼是jar包

這裡要啰嗦一遍概念,jar包就是 Java Archive File,顧名思義,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式,是一種與平臺無關的文件格式,可將多個文件合成一個文件。jar 包與 zip 包非常相似——準確地說,它就是 zip 包,所以叫它文件包。jar 與 zip 唯一的區別就是在 jar 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,該文件是在生成 jar 文件的時候自動創建的,作為jar裡面的"詳情單",包含了該Jar包的版本、創建人和類搜索路徑Class-Path等信息,當然如果是可執行Jar包,會包含Main-Class屬性,表明Main方法入口,尤其是較為重要的Class-Path和Main-Class,咱們一會在後續的內容裡面會進行詳細地講解。

此外,值得註意的是,因為jar包主要是對class文件進行打包,而java編譯生成的class文件是平臺無關的,這就意味著jar包是跨平臺的,所以不必關心涉及具體平臺的問題。

為什麼要打jar包

在大致瞭解了什麼是jar包了之後,咱們來講講為什麼要打jar包。主要從我們自身的徐需求出發,不難發現,當我們開發了一個程式以後,程式中有很多的類,如果需要提供給別人使用,發給對方一大堆源文件是非常不好的,因此通常需要把這些類以及相關的資源文件打包成一個 jar 包,把這個 jar 包提供給別人使用,同時提供給使用者清晰的文檔。這樣他人在拿到我們提供的jar之後,就能方便地進行調用,具體如何調用後面會進行講解。
因此,建議大家在平時寫代碼搬磚的時候,註意把自己代碼的通用部分抽離出來,主鍵積累一些通用的util類,將其逐漸模塊化,最後打成jar包供自己在別的項目或者模塊中使用,同時不斷打磨jar裡面的內容,將其做得越來越容易理解和通用,這樣的好處是除了會對你的代碼重構能力以及模塊抽象能力有很好的幫助之外,更是一種從長期解放你的重覆工作量,讓你有更多的精力去做其他事情的方式,甚至當你抽象出業內足夠通用的jar之後,jar包還能為你帶來意想不到的利潤(當然公司里該保密的東西還是得保密的)。這也是java發展得如此之好的原因,無論出於盈利或者非盈利的目的,將自己的通用工具或者框架抽取出來,打成jar包供他人調用,使得整個java生態圈變得越來越強大–幾乎很多業務場景都能找到對應的jar包。

原文提到了一些關於jar包的其他點,我目前沒有過多接觸,也便沒有仔細看下去,感興趣的自行查看

暫時結束

本貼是概念為主,行文至此便暫時結束,後續有收穫會考慮補充或者分類重新開貼。


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

-Advertisement-
Play Games
更多相關文章
  • 本文將以單鏈表和靜態鏈表的初始化代碼(c++)為例,具體分析了結構體中typedef struct LNode{....} LNode, *LinkList, SLinkList[MaxSize];的相關問題,並補充了C++中引用類型的一點知識。 ...
  • https://www.cnblogs.com/yeungchie/ 記錄一些常用的 模塊 / 方法 。 多線程 使用模塊 threads use 5.010; use threads; # 定義一個需要併發的子函數 sub func { my $id = shift; sleep 1; print ...
  • 測評目錄 python技能樹測評 python技能樹是什麼 python技能樹長什麼樣 如何學習python技能樹 python技能樹可能需要的改進 對python技能樹的總結 CSDN MarkDown編輯器測評 python技能樹測評 CSDN上線了一個叫python技能樹的產品,主要是用來作為 ...
  • 線程通信 1、場景:生產者和消費者問題 ==倉庫、生產者、消費者 倉庫只能存放一個產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走 如果倉庫中沒有產品,生產者將產品放入倉庫,否則停止生產並等待(阻塞),直到倉庫中的產品被消費者取走 如果倉庫中有產品,消費者可以將產品取走消費,否則停止消費 ...
  • 原文鏈接:http://www.zhoubotong.site/post/37.html 如果使用go語言自帶的json庫,使用的是反射,而go語言中反射性能較低。easyjson就是一個比較好的替代方案。 esayjson安裝(https://gitcode.net/mirrors/mailru/ ...
  • 分散式基礎理論 1. 什麼是分散式系統? 分散式系統是若幹獨立電腦的集合,這些電腦對於用戶來說就像單個系統 2. 應用架構演變 單一應用架構 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本,適用於小型網站,小型管理系統 垂直應用架構 當訪問量逐漸增大,單一應用增加機 ...
  • 阻塞隊列 同步隊列 AQS 原理 數據結構 CLH 共用方式 設計模式 組件 自定義 ...
  • 1. makefile簡單介紹: ▶ Windows系統里的 Visual studio/Dev C++等IDE工具(Integrated Development Environment)將C語言的預處理、編譯、彙編、鏈接等過程集成在一起,而在Linux系統下需要編寫GCC命令才能完成編譯操作。當項 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...