最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java輸出Hello World完美過程解析

 更新時(shí)間:2021年06月13日 10:09:19   作者:Jack·Kwok  
當(dāng)我們學(xué)習(xí)一門編程語言的時(shí)候,我們都會(huì)先學(xué)如何輸出Hello World!本文通過幾個(gè)例子給大家介紹輸出Hello World的代碼,感興趣的朋友一起看看吧

1. 你會(huì)不會(huì)輸出"Hello World!"?

圖1

圖 2

在這里插入圖片描述在這里插入圖片描述

當(dāng)我們學(xué)習(xí)一門編程語言的時(shí)候,我們都會(huì)先學(xué)如何輸出Hello World!

👨:“你真的會(huì)嗎?”

👩:“會(huì)!”

👩:“以下這幾個(gè)例子,我背都給你背下來?。。?!【驕傲】”

C語言

printf("Hello World!");

C++語言

cout << "Hello World!";

Golang語言:

fmt.Print("hello world!")

Java語言:

System.out.print("Hello World!");

Python語言:

print('Hello World!')

👨:“但!你真的會(huì)嗎?【邪魅一笑】。這次我賭你不會(huì)!不信?那你接著往下看~”

2. 小生拋磚引玉,歡迎指正

下面這個(gè)代碼是Java輸出Hello World的代碼,代碼沒有報(bào)錯(cuò),輸出結(jié)果正確。

在這里插入圖片描述

我們在輸出這一行打一個(gè)斷點(diǎn),并且以debug模式運(yùn)行,不斷點(diǎn)擊下一步。

在這里插入圖片描述

首先我們可以看到是System類調(diào)用靜態(tài)成員out,并且out是一個(gè)PrintStream對象的實(shí)例,調(diào)用這個(gè)實(shí)例的println方法,就來到如下頁面。我們可以看到這個(gè)方法傳入的是我們的Hello World字符串,并且調(diào)用print方法,再調(diào)用newLine方法。從這里就可以看出print和println方法的區(qū)別。聰明的你應(yīng)該可以猜到,沒錯(cuò),newLine方法就是換行。好的,繼續(xù)往下走~

在這里插入圖片描述

這個(gè)時(shí)候我們進(jìn)入了print方法。這里也很好理解。你可以想想當(dāng)我們的字符串為null的時(shí)候,你會(huì)發(fā)現(xiàn)輸出的是一個(gè)字符串的null,而在源碼里面正好就是這樣的設(shè)計(jì)。緊接著,將會(huì)調(diào)用該類中的write方法。那行,我們繼續(xù)進(jìn)入write方法。

在這里插入圖片描述

進(jìn)入write方法,我們會(huì)發(fā)現(xiàn)這里有一個(gè)同步鎖。學(xué)過Java語法的同學(xué)應(yīng)該馬上就反應(yīng)到了,這是防止在多線程的情況下,一個(gè)字符串還未處理完,另一個(gè)字符串便進(jìn)來這個(gè)方法了,這會(huì)導(dǎo)致內(nèi)部的數(shù)據(jù)出現(xiàn)矛盾!!接著是執(zhí)行一個(gè)ensureOpen方法,按照我的蹩腳英文hh,初步理解這是“確定是否打開”的意思。那我們就進(jìn)去看看到底是確定什么是否打開!

在這里插入圖片描述

我們發(fā)現(xiàn)這里有一個(gè)判斷out實(shí)例是否為null的情況,當(dāng)out為null的時(shí)候,拋出一個(gè)“流關(guān)閉”的異常。結(jié)合這個(gè)提示,加上對代碼的查看,我們發(fā)現(xiàn)這個(gè)out實(shí)例正是輸出流對象的實(shí)例。當(dāng)我們要輸出什么內(nèi)容的時(shí)候,當(dāng)然要判斷輸出流對象是否為空呀。OK,這里我們沒啥問題。

在這里插入圖片描述

那我們就要進(jìn)入整個(gè)輸出語句最重要的源代碼了:執(zhí)行寫入。

在這里插入圖片描述

進(jìn)去之后我們發(fā)現(xiàn),同樣是調(diào)用重載的write方法,傳入的參數(shù)為字符串,0以及字符串長度。接著進(jìn)入該方法。

在這里插入圖片描述

前方高能?。?!
同步鎖和ensureOpen方法上面已經(jīng)講過不贅述。這里初始化變量b是0,t是0加上字符串的長度。
這個(gè)時(shí)候的t-b正好就是字符串的長度,那么接著下去,我們會(huì)取我們一次可以寫入最大的長度t-b最小值。

  • 當(dāng)最小值是我們的字符串長度的時(shí)候,我們直接獲取字符串的字符數(shù)組,讓初始變量b加上寫入的長度,這個(gè)時(shí)候我們會(huì)發(fā)現(xiàn)循環(huán)條件已經(jīng)不成立,那么將會(huì)結(jié)束循環(huán);
  • 當(dāng)最小值是一次可以寫入最大的長度的時(shí)候,我們直接寫入最大的長度,這時(shí)候初始變量加上寫入長度的時(shí)候,循環(huán)條件是成立的,同時(shí)我們也有字符串沒有獲取,那么將會(huì)進(jìn)入下一次循環(huán),直到b<t不成立時(shí)退出。

同時(shí)在執(zhí)行循環(huán)體的過程中,仍然需要不斷清楚緩存。

其余的幾個(gè)方法和上面的思路比較相似,這里將不一一贅述。

在這里插入圖片描述

3. 總結(jié)

這里是我個(gè)人的一點(diǎn)點(diǎn)小小的思考,我覺得程序員有三個(gè)境界,從淺到深依次是:

  • 會(huì)調(diào)用源代碼
  • 會(huì)看懂源代碼
  • 會(huì)復(fù)寫源代碼

為什么要看源代碼呢?很多急于求成的程序員會(huì)說,別人寫好的東西,你會(huì)用就好了啊,你要看懂實(shí)現(xiàn)原理干嘛?但我想說的是,其實(shí)看源碼的過程正是你學(xué)習(xí)代碼的過程。Java源碼經(jīng)歷過二十幾年的沉淀,很多東西看似底層,但其實(shí)最考驗(yàn)基礎(chǔ)語法的功底。博主本人現(xiàn)在讀大二,關(guān)于Java源碼的講解肯定有很多不夠完善的地方,但我的初衷是分享。我也希望優(yōu)秀的你,在評論區(qū)給我更加寶貴的建議和意見,感謝??!

以上就是Java輸出Hello World完美過程解析的詳細(xì)內(nèi)容,更多關(guān)于Java輸出Hello World的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • @WebFilter在SpringBoot無效的原因分析和解決方案

    @WebFilter在SpringBoot無效的原因分析和解決方案

    使用Ruoyi的demo部署成功后,發(fā)現(xiàn)js、css等靜態(tài)文件都進(jìn)入了過濾器,但是發(fā)現(xiàn)靜態(tài)文件沒有使用瀏覽器緩存,新建BrowserCacheFilter.java并增加@WebFilter處理,應(yīng)用自動(dòng)重啟后發(fā)現(xiàn)@WebFilter無效,所以本文給大家介紹了@WebFilter在SpringBoot無效的原因分析和解決方案
    2024-03-03
  • JDK1.7 之java.nio.file.Files 讀取文件僅需一行代碼實(shí)現(xiàn)

    JDK1.7 之java.nio.file.Files 讀取文件僅需一行代碼實(shí)現(xiàn)

    下面小編就為大家分享一篇JDK1.7 之java.nio.file.Files 讀取文件僅需一行代碼實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助
    2017-11-11
  • Spring Cloud 專題之Sleuth 服務(wù)跟蹤實(shí)現(xiàn)方法

    Spring Cloud 專題之Sleuth 服務(wù)跟蹤實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Cloud 專題之Sleuth 服務(wù)跟蹤,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼

    Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼

    當(dāng)編寫 MyBatis 中復(fù)雜動(dòng)態(tài) SQL 語句時(shí),使用 XML 格式是一種非常靈活的方式,本文主要為大家詳細(xì)介紹了Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的具體方法,需要的可以參考下
    2023-12-12
  • Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解

    Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解

    這篇文章主要介紹了Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解,棧(Stack) 是一種基本的數(shù)據(jù)結(jié)構(gòu),具有后進(jìn)先出(LIFO)的特性,類似于現(xiàn)實(shí)生活中的一疊盤子,棧用于存儲(chǔ)一組元素,但只允許在棧頂進(jìn)行插入(入棧)和刪除(出棧)操作,需要的朋友可以參考下
    2023-10-10
  • Java SSL與TLS客戶端證書配置方式

    Java SSL與TLS客戶端證書配置方式

    這篇文章主要介紹了Java SSL與TLS客戶端證書配置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • J2EE中的struts2表單細(xì)節(jié)處理

    J2EE中的struts2表單細(xì)節(jié)處理

    這篇文章主要介紹了J2EE中的struts2表單細(xì)節(jié)處理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Maven中兩個(gè)命令clean 和 install的使用

    Maven中兩個(gè)命令clean 和 install的使用

    Maven是一個(gè)項(xiàng)目管理和自動(dòng)構(gòu)建工具,clean命令用于刪除項(xiàng)目中由先前構(gòu)建生成的target目錄,install命令用于將打包好的jar包安裝到本地倉庫中,供其他項(xiàng)目依賴使用,下面就來詳細(xì)的介紹一下這兩個(gè)命令
    2024-09-09
  • SpringBoot操作spark處理hdfs文件的操作方法

    SpringBoot操作spark處理hdfs文件的操作方法

    本文介紹了如何使用Spring Boot操作Spark處理HDFS文件,包括導(dǎo)入依賴、配置Spark信息、編寫Controller和Service處理地鐵數(shù)據(jù)、運(yùn)行項(xiàng)目以及觀察Spark和HDFS的狀態(tài),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • SpringBoot中使用Flyway進(jìn)行數(shù)據(jù)庫遷移的詳細(xì)流程

    SpringBoot中使用Flyway進(jìn)行數(shù)據(jù)庫遷移的詳細(xì)流程

    本文介紹了如何在Spring Boot項(xiàng)目中使用Flyway進(jìn)行數(shù)據(jù)庫遷移,Flyway通過SQL腳本管理數(shù)據(jù)庫變更,支持自動(dòng)執(zhí)行和版本控制,避免了手動(dòng)執(zhí)行SQL腳本的錯(cuò)誤和維護(hù)困難,需要的朋友可以參考下
    2025-02-02

最新評論

安义县| 桃园县| 郴州市| 樟树市| 漠河县| 十堰市| 科尔| 宜都市| 沙雅县| 黄山市| 密云县| 溧水县| 泗洪县| 肇庆市| 郓城县| 高要市| 雷山县| 河东区| 称多县| 措勤县| 阿拉尔市| 小金县| 札达县| 宜章县| 湘潭市| 仙居县| 长春市| 建昌县| 临洮县| 珠海市| 高淳县| 商洛市| 米泉市| 寿光市| 泗洪县| 富平县| 南昌县| 浦北县| 昔阳县| 池州市| 德钦县|