欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java輸出Hello World完美過程解析

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

1. 你會不會輸出"Hello World!"?

圖1

圖 2

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

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

👨:“你真的會嗎?”

👩:“會!”

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

C語言

printf("Hello World!");

C++語言

cout << "Hello World!";

Golang語言:

fmt.Print("hello world!")

Java語言:

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

Python語言:

print('Hello World!')

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

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

下面這個代碼是Java輸出Hello World的代碼,代碼沒有報錯,輸出結(jié)果正確。

在這里插入圖片描述

我們在輸出這一行打一個斷點,并且以debug模式運行,不斷點擊下一步。

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

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

在這里插入圖片描述

3. 總結(jié)

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

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

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

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

相關(guān)文章

  • Java編寫實現(xiàn)多人聊天室

    Java編寫實現(xiàn)多人聊天室

    這篇文章主要為大家詳細介紹了Java編寫實現(xiàn)多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java?MyBatis實戰(zhàn)之QueryWrapper中and和or拼接技巧大全

    Java?MyBatis實戰(zhàn)之QueryWrapper中and和or拼接技巧大全

    在Java中QueryWrapper是MyBatis-Plus框架中的一個查詢構(gòu)造器,它提供了豐富的查詢方法,其中包括and和or方法,可以用于構(gòu)建復(fù)雜的查詢條件,這篇文章主要給大家介紹了關(guān)于Java?MyBatis實戰(zhàn)之QueryWrapper中and和or拼接技巧的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • SpringMVC之@requestBody的作用及說明

    SpringMVC之@requestBody的作用及說明

    這篇文章主要介紹了SpringMVC之@requestBody的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法

    IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法

    這篇文章主要介紹了IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java啟用Azure Linux虛擬機診斷設(shè)置

    Java啟用Azure Linux虛擬機診斷設(shè)置

    這篇文章主要介紹了Java啟用Azure Linux虛擬機診斷設(shè)置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • springboot動態(tài)注入配置與docker設(shè)置環(huán)境變量的方法

    springboot動態(tài)注入配置與docker設(shè)置環(huán)境變量的方法

    這篇文章主要介紹了springboot動態(tài)注入配置與docker設(shè)置環(huán)境變量的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    SpringCloud Gateway是Spring Cloud的一個全新項目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式
    2021-06-06
  • 如何解決Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效

    如何解決Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效

    這篇文章主要介紹了如何解決Spring事務(wù)注解@Transactional在類內(nèi)部方法調(diào)用不生效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • spring boot和spring cloud之間的版本關(guān)系

    spring boot和spring cloud之間的版本關(guān)系

    這篇文章主要介紹了spring boot和spring cloud之間的版本關(guān)系,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java操作IO對象流進行數(shù)據(jù)的讀寫

    Java操作IO對象流進行數(shù)據(jù)的讀寫

    這篇文章主要介紹了Java操作IO對象流進行數(shù)據(jù)的讀寫,本文通過例子逐步介紹了java如何操作IO流,和文字解析,需要的朋友可以參考下
    2021-07-07

最新評論