Uniapp 網絡請求封裝專題

目錄

一、前言

二、uniapp官方文檔

三、舉例演示

3.1 使用說明

3.2 Content-Type

3.2.1???基本概念

??3.2.2 核心作用

3.2.3?常見?Content-Type?類型及使用場景

1)文本類

a)text/plain????

b)text/html??? ?

2)應用類

a)application/json??? ?

b)application/x-www-form-urlencoded??

3)多媒體類

image/jpeg??、??video/mp4

4)特殊類型??

? ??application/octet-stream??

3.2.4?關鍵注意事項

3.3 success參數

3.3.1 基礎回調函數寫法

3.3.2 分離函數(外部定義)

三、Promise

3.1 是什么

3.2 核心思想

3.3 ?Promise 的三種狀態?

3.4 基本用法與語法

3.4.1 創建 Promise?

3.4.2 ??處理結果??

3.4.3 鏈式調用??

?四、封裝

五、調用演示


一、前言

在前文中,我們介紹了uniapp中如何發送請求,并完成了基礎的二次封裝。雖然直接復用示例代碼可以快速上手,但面對復雜項目時,往往需要根據實際需求重新設計網絡請求模塊。

對于前端經驗較少的開發者來說,深度封裝可能具有一定挑戰性。本文旨在梳理不同項目的封裝思路,幫助大家掌握核心邏輯,從而能夠靈活應對各種業務場景的需求變化。

二、uniapp官方文檔

首先給出uniapp發送網絡請求的官網文檔,然后再帶領大家一起解讀。uni.request(OBJECT) | uni-app官網

uni.request(OBJECT)

OBJECT 參數說明

參數名類型必填默認值說明平臺差異說明
urlString開發者服務器接口地址
dataObject/String/ArrayBuffer請求的參數App 3.3.7 以下不支持 ArrayBuffer 類型
headerObject設置請求的 header,header 中不能設置 RefererApp、H5端會自動帶上cookie,且H5端不可手動修改
methodStringGET有效值詳見下方說明
timeoutNumber60000超時時間,單位 msH5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付寶小程序
dataTypeStringjson如果設為 json,會對返回的數據進行一次 JSON.parse,非 json 不會進行 JSON.parse
responseTypeStringtext設置響應的數據類型。合法值:text、arraybuffer支付寶小程序不支持
sslVerifyBooleantrue驗證 ssl 證書僅App安卓端支持(HBuilderX 2.3.3+),不支持離線打包
withCredentialsBooleanfalse跨域請求時是否攜帶憑證(cookies)僅H5支持(HBuilderX 2.6.15+)
firstIpv4BooleanfalseDNS解析時優先使用ipv4僅 App-Android 支持 (HBuilderX 2.8.0+)
enableHttp2Booleanfalse開啟 http2微信小程序
enableQuicBooleanfalse開啟 quic微信小程序
enableCacheBooleanfalse開啟 cache微信小程序、抖音小程序 2.31.0+
enableHttpDNSBooleanfalse是否開啟 HttpDNS 服務。如開啟,需要同時填入 httpDNSServiceId 。 HttpDNS 用法詳見?移動解析HttpDNS微信小程序
httpDNSServiceIdStringHttpDNS 服務商 Id。 HttpDNS 用法詳見?移動解析HttpDNS微信小程序
enableChunkedBooleanfalse開啟 transfer-encoding chunked微信小程序
forceCellularNetworkBooleanfalsewifi下使用移動網絡發送請求微信小程序
enableCookieBooleanfalse開啟后可在headers中編輯cookie支付寶小程序 10.2.33+
cloudCacheObject/Booleanfalse是否開啟云加速(詳見云加速服務)百度小程序 3.310.11+
deferBooleanfalse控制當前請求是否延時至首屏內容渲染后發送百度小程序 3.310.11+
successFunction收到開發者服務器成功返回的回調函數
failFunction接口調用失敗的回調函數
completeFunction接口調用結束的回調函數(調用成功、失敗都會執行)

method 有效值

注意:method有效值必須大寫,每個平臺支持的method有效值不同,詳細見下表。

methodAppH5微信小程序支付寶小程序百度小程序抖音小程序、飛書小程序快手小程序京東小程序
GET
POST
PUTxxx
DELETExxxx
CONNECTxxxxxx
HEADxxxx
OPTIONSxxxx
TRACExxxxxx

可見,請求方式主推使用GET、POST。

success 返回參數說明

參數類型說明
dataObject/String/ArrayBuffer開發者服務器返回的數據
statusCodeNumber開發者服務器返回的 HTTP 狀態碼
headerObject開發者服務器返回的 HTTP Response Header
cookiesArray.<string>開發者服務器返回的 cookies,格式為字符串數組

三、舉例演示

3.1 使用說明

這里我們找一個免費的api接口進行測試。

mounted() {this.test()},
methods: {test() {uni.request({url: 'https://route.showapi.com/9-2?appKey=E53C00b070ce4Ee0b2B77365af35993c',method: 'POST',header: { 'content-type': 'application/x-www-form-urlencoded' }, data:{area: '重慶'},success: (res) => { console.log("請求成功",res);}})}
}

打開頁面調用控制臺看一下

調用成功!

3.2 Content-Type

3.2.1???基本概念

Content-Type?是 HTTP 協議中用于標識請求響應體數據類型頭部字段,屬于 MIME(多用途互聯網郵件擴展)類型的一種。其格式為:

Content-Type: <type>/<subtype>; <parameters>

??type??:主類型(如?textapplicationimage

?subtype??:子類型(如?htmljsonjpeg

parameters??:可選參數(如?charset=UTF-8boundary?用于分段數據)

??3.2.2 核心作用

客戶端請求??:告知服務器如何解析請求體(如 JSON 或表單數據)

服務器響應??:指導客戶端(如瀏覽器)如何處理返回的數據(如渲染 HTML 或下載文件)

3.2.3?常見?Content-Type?類型及使用場景

1)文本類
a)text/plain????

?純文本數據,適用于日志或簡單消息。

Content-Type: text/plain; charset=UTF-8
b)text/html??? ?

?HTML 文檔,用于網頁渲染。

// 后端設置示例
res.setHeader('Content-Type', 'text/html');
2)應用類
a)application/json??? ?

JSON格式數據,適合傳輸結構化數據(如 API 交互)。?

前端請求示例??:

fetch('/api', {headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ key: 'value' })
});

后端接收??(Spring Boot)?

@PostMapping("/api")
public ResponseEntity<?> handleJson(@RequestBody User user) { ... }
b)application/x-www-form-urlencoded??

?表單默認提交格式,數據編為?key=value&key2=value2

前端請求示例

uni.request({url: 'https://route.showapi.com/9-2?appKey=E53C00b070ce4Ee0b2B77365af35993c',method: 'POST',header: { 'content-type': 'application/x-www-form-urlencoded' }, data:{area: '重慶'},success: (res) => { console.log("請求成功",res);}
})

后端SpringBoot接收方式

  • 使用?@RequestParam?注解??
    • 適用于直接接收表單字段,字段名需與前端參數名一致
    • @PostMapping("/login")
      public String login(@RequestParam String username, @RequestParam String password) {return "用戶名:" + username + ",密碼:" + password;
      }
    • ??注意??:若參數名不一致,需指定?@RequestParam("前端字段名")
  • 通過?Map?或?LinkedHashMap?接收
    • 適用于動態或大量字段的場景:
    • @PostMapping("/submit")
      public ResponseEntity<?> submit(@RequestParam Map<String, String> params) {System.out.println(params); // 輸出所有鍵值對return ResponseEntity.ok(params);
      }
    • ?優點:無需預定義字段,靈活性強
  • 避免使用?@RequestBody??
    • x-www-form-urlencoded?數據默認不支持?@RequestBody?綁定到自定義對象,否則會報錯?Content-Type not supported。若需綁定到對象,需改用?@ModelAttribute?或直接通過字段接收。

3)多媒體類
image/jpeg??、??video/mp4

分別用于 JPEG 圖片和 MP4 視頻,常見于資源加載或文件下載。

響應頭示例

Content-Type: image/png
Content-Disposition: attachment; filename="example.png"
4)特殊類型??
? ??application/octet-stream??

二進制流,適用于任意文件下載

// 后端設置
res.setHeader('Content-Type', 'application/octet-stream');

?

3.2.4?關鍵注意事項

?字符編碼??

文本類數據需指定?charset(如?UTF-8),避免亂碼。

??與后端的匹配??

  • 使用?@RequestBody?接收 JSON 時,必須設置?Content-Type: application/json
  • 表單數據需對應?@RequestParam?,設置?application/x-www-form-urlencoded 或 FormData

??錯誤處理??

  • 錯誤的?Content-Type?可能導致 HTTP 415(不支持的媒體類型)。
  • 文件上傳時若手動設置?multipart/form-data?的?boundary,需確保格式正確。

Content-Type?是 HTTP 通信的“語言協議”,正確設置可確保數據解析無誤。開發中需根據場景選擇類型:

  • ??API 交互?? →?application/json
  • ??表單提交?? →?application/x-www-form-urlencoded
  • ??文件上傳?? →?multipart/form-data
  • ??資源加載?? → 對應媒體類型(如?image/png

?

3.3 success參數

在uniapp中,uni.request?方法的 success 參數用于處理請求成功的回調,其寫法靈活多樣,可以根據開發場景和編碼風格選擇。以下是常見的幾種寫法及詳細說明:

3.3.1 基礎回調函數寫法

匿名函數(直接定義)

直接在?success?屬性中定義匿名函數,適用于簡單邏輯:

uni.request({url: 'https://api.example.com/data',success: function(res) {console.log('請求成功:', res.data); // 輸出響應數據// 其他邏輯處理},fail: (err) => { console.error('請求失敗:', err); }
});

特點??:代碼直觀,適合快速開發或單次請求場景

?注意??:res?參數包含?data(響應體)、statusCode(HTTP狀態碼)、header(響應頭)等屬性

?箭頭函數(ES6語法)

使用箭頭函數簡化作用域綁定,避免?this?指向問題

uni.request({url: 'https://api.example.com/data',success: (res) => {this.dataList = res.data; // 直接訪問組件實例的data}
});

?適用場景??:Vue 組件中需要訪問?this?時推薦使用

3.3.2 分離函數(外部定義)

將回調邏輯抽離為獨立函數,提升代碼復用性

function handleSuccess(res) {if (res.statusCode === 200) {console.log('數據:', res.data);} else {console.error('服務器異常:', res.statusCode);}
}uni.request({url: 'https://api.example.com/data',success: handleSuccess // 傳入函數引用
});
  • ??優點??:邏輯清晰,便于復用和單元測試。
  • ??擴展??:可結合錯誤狀態碼統一處理(如 401 跳轉登錄頁)

三、Promise

3.1 是什么

Promise 是 JavaScript 中用于處理異步操作的核心對象,它代表一個異步操作的最終完成(或失敗)及其結果值。以下是關于 Promise 的詳細解析,綜合了多個搜索結果中的核心信息。

Promise 是一個容器,用于封裝異步操作(如網絡請求、定時器、文件讀取等),并通過狀態管理來追蹤其完成情況。它允許開發者以更清晰的方式處理異步邏輯,避免傳統的“回調地獄”。

3.2 核心思想

延遲綁定??:Promise 將異步操作的結果與處理邏輯分離,通過鏈式調用(.then().catch())注冊回調函數,而非嵌套回調。

狀態不可逆??:Promise 的狀態一旦改變(從?pending?到?fulfilled?或?rejected),便不可再變。

3.3 ?Promise 的三種狀態?

??Pending(進行中)??

初始狀態,表示異步操作尚未完成。

??Fulfilled(已成功)??

異步操作成功完成,通過?resolve(value)?觸發,此時?.then()?的回調函數會被執行。

Rejected(已失敗)??

異步操作失敗,通過?reject(error)?觸發,此時?.catch()?或?.then()?的第二個參數會捕獲錯誤。

3.4 基本用法與語法

3.4.1 創建 Promise?

const promise = new Promise((resolve, reject) => {// 異步操作(如 setTimeout、AJAX)if (/* 成功 */) resolve(value); // 狀態變為 fulfilledelse reject(new Error('失敗原因')); // 狀態變為 rejected
});

例如:

return new Promise((resolve, reject) => {uni.request({...options,success: (res) => {if(res.data.code === 1) {resolve(res.data);}else{// 統一錯誤處理(如token過期)if(res.data.code === -1 || res.data.code === -3) {uni.navigateTo({url:'/pages/login/login'})}reject(res.data);}},fail: (err) => {uni.showToast({ title: '網絡錯誤', icon: 'none' });reject(err);}})
})

3.4.2 ??處理結果??

??.then()??:處理成功狀態,接收?resolve?傳遞的值

promise.then((result) => console.log(result));

.catch()??:處理失敗狀態,捕獲?reject?或代碼拋出的錯誤?

promise.catch((error) => console.error(error));

.finally()??:無論成功或失敗都會執行,常用于清理邏輯?

3.4.3 鏈式調用??

Promise 的?.then()?返回一個新的 Promise,支持連續調用:

fetchData().then(processData).then(saveData).catch(handleError);

?

?四、封裝

我們使用Promise來封裝請求。具體的,先給出結果,然后再一點點講。

定義一個request.js文件

名字不重要,叫什么都可以,目的是通過Promise封裝我們的uni.request函數。

import {BASE_URL} from '@/common/config.js'export const myRequest = (options) => {// 自動拼接請求地址options.url = BASE_URL + options.url;// 默認請求頭options.header = {'Authorization': uni.getStorageSync('token') || '','Content-Type': 'application/json',...options.header // 允許調用者覆蓋};// return new Promise((resolve, reject) => {uni.request({...options,success: (res) => {if(res.data.code === 1) {resolve(res.data);}else{// 統一錯誤處理(如token過期)if(res.data.code === -1 || res.data.code === -3) {uni.navigateTo({url:'/pages/login/login'})}reject(res.data);}},fail: (err) => {uni.showToast({ title: '網絡錯誤', icon: 'none' });reject(err);}})})}

解讀:?

在這個js文件中,我們通過ES6 模塊化規范的導入語法,導入了根目錄下的common包中的config.js文件中的BASE_URL。這樣做的目的是通過某一個配置文件來集中定義一些通用的配置,方便修改和維護。

config.js

// common/config.js
export const BASE_URL = 'http://106.75.224.22:8090'; // 基礎域名

api統一封裝

import {myRequest} from '@/utils/request.js'export const loginApi = (username, password) => {return myRequest({url: '/api/login',method: 'POST',data: {username, password}})
};export const getStatisticApi = (date) => {const params = date ? { date } : {};return myRequest({url: '/api/keepAccount/getStatistic',method: 'GET',data: params,})
};export const addAccountApi = (event, money, type, happenDate) => {return myRequest({url: '/api/keepAccount/addAccount',method: 'POST',data: {event,money,type,happenDate}})
};export const getListApi = (date) => {return myRequest({url: '/api/keepAccount/getList',method: 'GET',data: {date}})
};

五、調用演示

handleLogin() {if (!this.canLogin) return// 這里替換為實際的登錄邏輯uni.showLoading({title: '登錄中...'})// 調用登錄接口loginApi(this.username, this.password).then(res => {uni.showToast({title: '登錄成功',icon: 'success'});// 保存到本地token// 注意這里為什么不是res.data.data。是因為我們request.js封裝的時候,返回的res對象其實是res.data,而非最初的res對象。uni.setStorageSync("token", res.data);setTimeout(() => {uni.reLaunch({url: '/pages/index/index'});}, 1500);}).catch(error => {console.error('登錄失敗:', error);uni.showToast({title: error.msg,icon: 'none'});}).finally(() => {uni.hideLoading();});console.log("你好");
}

在這個handleLogin()方法中,??控制臺會先打印“你好”,然后才會處理請求的返回結果?。

因為它是同步代碼,而 Promise 回調是異步的微任務。

網絡請求的響應時間不確定,但其回調一定在同步代碼之后執行。

如果需要強制等待請求完成再執行后續邏輯,需使用?async/await?改寫:

async handleLogin() {console.log("你好"); // 仍會先執行await loginApi(this.username, this.password).then(/* ... */);console.log("請求完成后才執行"); // 微任務之后
}

?怎么樣,現在是不是清楚整個封裝流程了?🫠

如果有什么疑問或者表述錯誤地方,也歡迎小伙伴們一起溝通、交流和指正~~~

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

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

相關文章

2025年滲透測試面試題總結-2025年HW(護網面試) 07(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年HW(護網面試) 07 一、OWASP Top 10 2023核心漏洞 二、XSS竊取Cookie全流程 三、滲透測試五階段模型…

Seata分布式事務解決框架

Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一個開源的分布式事務解決方案&#xff0c;旨在幫助開發者更容易地在微服務架構中解決分布式事務問題。 你可以把它理解為一個工具箱&#xff0c;專門用來處理微服務之間操作的一致性。…

舊物回收小程序開發:開啟綠色生活新方式

在環保理念日益深入人心的今天&#xff0c;每一件舊物都承載著資源再生的無限可能。我們精心打造的舊物回收小程序&#xff0c;宛如一把神奇的鑰匙&#xff0c;為你開啟綠色生活新方式&#xff01; 想象一下&#xff0c;家中堆積如山的舊衣物、閑置的電子產品、廢棄的書籍雜志…

STM32 串口通信②:藍牙模塊HC-05控制單片機

一 前言 上一篇我們已經成功實現單片機和電腦的連接&#xff0c;接下來&#xff0c;我們學習一個有趣的板塊&#xff0c;HC-05藍牙模塊&#xff0c;這個藍牙模塊&#xff0c;我們就要建立手機和單片機的通訊啦&#xff0c;還是比較有趣的一個過程&#xff0c;大家可以跟著多操作…

【Verilog】Verilator的TestBench該用C++還是SystemC

Verilator的Testbench&#xff08;測試平臺&#xff09;主要使用 C 或 SystemC 來編寫。這是由Verilator的工作原理決定的&#xff1a;它將你的Verilog/SystemVerilog設計轉換成一個C類&#xff0c;因此你需要一個C環境來實例化和驅動這個類。 下面詳細說明這兩種方式以及如何…

71-Oracle Undo與Flashback管理(Guarantee設置)深度解析

小伙伴們有沒有在操作undo表空間、Flashback管理&#xff0c;時間保留設置&#xff0c;總有些配置需要提前預置好&#xff0c;否則閃回查詢和表的時候出現報錯。 需短期恢復&#xff08;秒級~小時&#xff09;直接上UNDO_RETENTION同時啟用RETENTION GUARANTEE&#xff0c;Und…

單片機——浮點數轉換4位數碼管顯示

浮點數轉換4位數碼管顯示 static char buffer[5]; int DecimalPlace 0; #define HideChar h void DisplayFloatOn4LED(float value) {long integer roundf(value );if (integer > 9999) //4位{integer 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer…

金融行業B端系統布局實戰:風險管控與數據可視化的定制方案

摘要 在金融行業&#xff0c;一次小小的數據泄露可能引發千萬級資金損失&#xff0c;一次錯誤的風險評估或許讓企業陷入危機。傳統 B 端系統布局在應對復雜多變的金融業務時&#xff0c;常出現風險預警滯后、數據雜亂無章的情況&#xff0c;讓從業者如履薄冰。如何才能在瞬息萬…

融合LSTM與自注意力機制的多步光伏功率預測新模型解析

這篇論文《Improved multistep ahead photovoltaic power prediction model based on LSTM and self-attention with weather forecast data》&#xff08;2024, Applied Energy&#xff09;聚焦在 多步光伏功率預測 中&#xff0c;如何結合 LSTM 與自注意力機制&#xff08;se…

Blazor-內置輸入組件

封裝的輸入組件 InputCheckbox&#xff1a;表示復選框。InputDate&#xff1a;表示類型為 date 的日期選擇框。InputFile&#xff1a;表示文件上傳。InputNumber&#xff1a;表示數字框。InputRadio&#xff1a;表示單選按鈕。InputRadioGroup&#xff1a;表示單選按鈕組。Inpu…

Qt源碼分析: QChildEvent

本文記錄QChildEvent事件相關代碼分析。 注1&#xff1a;限于筆者研究水平&#xff0c;難免有表述不當&#xff0c;歡迎批評指正。 注2&#xff1a;博文會不定期更新&#xff0c;敬請關注。 一、QChildEvent的發送 分析QObject::setParent代碼&#xff0c;當修改父對象時&…

《Whisper :說明書 》

[論文] [模型卡] [Colab 示例] Whisper 是一種通用的語音識別模型。它基于各種音頻的大型數據集進行訓練&#xff0c;也是一種多任務模型&#xff0c;可以執行多語言語音識別、語音翻譯和語言識別。 方法 Transformer 序列到序列模型針對各種語音處理任務進行訓練&#xff0c;…

回溯----8.N皇后

題目鏈接 /** 將n個棋子放在n*n的棋盤上,不同列,不同行,不同斜線 大致執行流程: 首先選取第一行第一格放置第一個棋子,再從第二行第一個位置開始選取合法的位置(不同行不同列不同斜線)放置棋子,重復上述流程迭代行數, 直到放置n個棋子。 若放置途中出現無合法位置的情況,回溯將…

微機電子拉伸試驗機

對于不同材料的試樣&#xff0c;由于其化學成分及組織的不同&#xff0c;在拉伸過程中會體現 出不同的物理現象及力學性質。西安力創&#xff08;LETRY&#xff09;公司專業制造WDL/WDW系列微機控制電子萬能試驗機&#xff0c;主要適用于金屬板材、棒材、管材、金屬絲、金屬箔、…

【數據結構與算法】數據結構核心概念系統梳理

第一章 緒論:基礎概念體系 ??算法:問題求解步驟的描述。 ??非遞歸的算法效率更高。 1.1 邏輯結構 vs 存儲結構 維度邏輯結構存儲結構(物理結構)定義數據元素之間的邏輯關系數據結構在計算機中的實現方式分類線性/樹形/圖/集合順序/鏈式/索引/散列獨立性獨立于存儲結構…

73頁PPT | 大數據平臺規劃與數據價值挖掘應用咨詢項目解決方案

推薦摘要&#xff1a;在數字化浪潮中&#xff0c;企業數據量呈幾何級增長&#xff0c;卻常因缺乏科學規劃的大數據平臺&#xff0c;陷入數據孤島、處理效率低下的困境&#xff0c;難以充分挖掘數據價值。特推出大數據平臺規劃與數據價值挖掘應用咨詢項目解決方案&#xff0c;正…

gRPC 與 Protobuf 的深度集成 —— 從服務定義到多語言交互(Go + Java 示例)

在前幾篇文章中&#xff0c;我們已經掌握了 Protobuf 的基礎語法、高級特性和序列化反序列化操作。本篇文章將深入講解 gRPC 與 Protobuf 的集成&#xff0c;重點介紹如何通過 .proto 文件定義服務接口&#xff0c;并在 Go 和 Java 中實現 gRPC 服務與客戶端的完整交互流程。我…

可信計算的基石:TPM技術深度解析與應用實踐

可信計算的基石&#xff1a;TPM技術深度解析與應用實踐 引言&#xff1a;數字世界的"信任之錨" 在數據泄露事件頻發的時代&#xff0c;傳統軟件級安全防護已力不從心。TPM&#xff08;可信平臺模塊&#xff09;作為硬件級安全解決方案&#xff0c;正成為現代計算設…

「ECG信號處理——(18)基于時空特征的心率變異性分析」2025年6月23日

一、HRV概述 心率變異性&#xff08;Heart rate variability ,HRV&#xff09;分析是通過測量分析連續正常R-R間期的時間變化來反映心率的變化程度的&#xff0c;根據計算RR 序列的統計指標&#xff0c;或者是畫出RR間期的直方圖和散點圖來反映HRV的大小情況。下面我們從男性與…

【學習筆記】深入理解Java虛擬機學習筆記——第10章 前端編譯與優化

第10章 前端編譯與優化 10.1 概述 1>前端編譯器&#xff1a;Javac命令。 【.java文件->.class文件】 2>即時編譯器&#xff1a;Hotspot.C1.C2 【.class文件->機器碼】 3>提前編譯器&#xff1a;JDK的Jaotc等【.java->機器碼】 10.2 Javac 編譯器 10.2.1 …