硅基計劃2.0 學習總結 壹 Java初階


?

一、初見Java

(1)Java簡介

首先不得不承認Java是一門優秀的程序設計語言

其系列的計算機軟件和跨平臺體系包括國內的生態鏈完善是C/C++語言難以彌補的

(2)Java SE

全稱Java Standard Edition,是Java體系的基礎

(3)Java EE

全稱Java Platform Enterprise Edition,是Java體系的進階

##它們的區別:SE可在JVM標準下運行,而EE需要特定的服務器

二、Java語言特點

簡潔安全

去除了C++中指針、多重繼承等復雜特性,自帶垃圾回收,杜絕內存泄漏風險
純面向對象

萬物皆對象,通過接口實現靈活擴展,反射機制支持運行時動態解析
跨平臺能力

基于字節碼和JVM實現"一次編寫,到處運行",嚴格規范數據類型保證移植一致性
健壯高效

異常處理機制+強類型驗證,JIT編譯器優化使性能接近C++水平
并發網絡

原生支持多線程編程,完善網絡庫為分布式開發提供基礎設施

三、Hello World

給出Java中的Hello World代碼。你會發現為什么在Java中是這么大一坨,跟C/C++區別很大

public class Try {public static void main(String[] args) {System.out.println("hello world");}
}

如果你學過C++,就知道上面的Try是一個類名,下面的好像是一個“函數”,里面跟著打印結果

但是在Java中并不存在函數一說,在Java中

最外層的是類,中間層是方法(你可以理解為函數)里層是語句三個部分組成

我們畫個圖來解釋下

?因此這段代碼就可以理解為在一個名字叫Try的類中,通過main方法,執行了一條打印語句

四、文檔注釋

這個是來聲明文檔信息的,網上有很多對應教程,建議聲明關鍵必要的信息

五、上手實操寫代碼


本次使用的IDE是Idea2025.1.1社區版


在ieda我們創建一個新項目,注意你的項目名是和代碼的類名是一致的

我們正好來講標識符的常用命名規則(駝峰命名法)

類名:大駝峰,一般類名由多個單次組成,則每個單次首字母都要大寫,比如:

方法名,變量名:小駝峰,多個單詞中從第二個單次開始的首字母都要大寫,比如:

int simpleNum = 10;

Java中寫代碼與C語言不同,不需要一個個代碼手搓

回車就可以完成各條語句的撰寫,比如sout表示輸出打印,main表示main方法等

而且我們發現,在Java中printlen可以打印任何類型字符,無論是整形還是字符

printlrn表示打印后換行,print直接打印不換行,而printf表規范打印(不常用)

public static void main(String[] args) {System.out.println("hello world");System.out.println("666");System.out.println("12.56");System.out.println("你好世界");System.out.print("simple");System.out.printf("%d",15);    }

六、Java中八種基本類型

有字節型(Byte),整型,短整型,長整型,單精浮點型,雙精浮點型

字符型(Java中占兩個字節,其存儲字符范圍也比C/C++中廣很多)

布爾型(boolean,只有true和falsel,沒有表示0和1)

七、變量(基本類型八大類)

在Java中變量如果沒有初始化,會直接報錯,而不是像C/C++為隨機值

接下來我們每個基本類型挨個舉例

(1)整型(int)——4字節

public static void main1(String[] args) {//這樣可以把其他的main方法注釋掉int a = 10;System.out.println(a);System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);}

我們要打印整型的最大值需要使用Integer方法中的MAX_VALUE和MIN_VALUE這兩個功能

?(2)長整型(long)——8字節

 public static void main(String[] args) {//這里也是一樣,可以通過這種方式注釋掉long num1 = 10L;System.out.println(num1);System.out.println(Long.MAX_VALUE);//wow,打印長整型的最大值和最小值直接用首字符大寫的Long呀System.out.println(Long.MIN_VALUE);}

推薦大寫的L啦,小寫的也可以,但是小寫的經常被誤認為數字1啦

同理我們打印最值,使用Long方法中的MAX_VALUE和MIN_VALUE這兩個功能

(3)短整型(short)——2字節

 public static void main(String[] args) {short num2 = 32767;System.out.println(num2);System.out.println(Short.MAX_VALUE);//原來短整型也是這么個包裝名System.out.println(Short.MIN_VALUE);}

?打印最值,使用Short方法中的MAX_VALUE和MIN_VALUE這兩個功能

(4)字節類型)byte——1字節

 public static void main(String[] args) {byte num3 = 127;//哇塞,byte類型表示的范圍真的很小呢System.out.println(num3);System.out.println(Byte.MAX_VALUE);//這個也是一樣的包裝名呢System.out.println(Byte.MIN_VALUE);}

?打印最值,使用Byte方法中的MAX_VALUE和MIN_VALUE這兩個功能

為什么我們給四種變量?

這是為了合理運用空間,分配空間?

(5)雙精度浮點型(double)——8字節

  public static void main(String[] args) {int simple1 = 1;int simple2 = 2;System.out.println(simple1 / simple2);//輸出0double num4 = 1.0;//小數默認是double型double num5 = 2.0;//當然這里的兩個num數據寫1和2也可以,相除后仍是0.5System.out.println(num4 / num5);System.out.println(Double.MAX_VALUE);//可以看到是一個科學計數法System.out.println(Double.MIN_VALUE);}

為什么兩個整型相除是0呢?這是因為執行整數除法的時候,舍棄小數部分

如果你想得到小數,可以使用double類型進行計算,算出的結果就是你想要的小數啦

打印最值,使用Double方法中的MAX_VALUE和MIN_VALUE這兩個功能,數字比較大

(6) 單精度浮點型(float)——4字節

 public static void main(String[] args) {float num6 = 12.5f;float simple3 = 1.0f / 3.0f;double simple4 = 1.0 / 3.0;System.out.println(simple3);//結果是0.33333334System.out.println(simple4);//結果是0.3333333333333333System.out.println(Float.MAX_VALUE);System.out.println(Float.MIN_VALUE);}

對于float類型數據,我們結尾要加上f來強調

如果不寫,默認是double類型,大空間類型存入小空間類型,有數據丟失風險

那么float和double都可以表示小數,那它們有什么區別呢

double類型更大,說明它精度更高,能夠存儲更精確小數

打印最值,使用Float方法中的MAX_VALUE和MIN_VALUE這兩個功能

(7)字符型(char)——2字節

  public static void main(String[] args) {char ch = 'A';char ch2 = '早';char ch3 = 97;System.out.println(ch);System.out.println(ch2);//注意char類型的包裝名是CharacterSystem.out.println(Character.MAX_VALUE);System.out.println(Character.MAX_VALUE);System.out.println(ch3);//打印的就是Unicode編碼里的97對應的字符}

?Java中的char類型與C/C++不同,它是有兩個字節大小,那就說明它可以存入更多字符,包括中文漢字哦,而且它沒有符號位,說明都是正數

它采用Unicode編碼,具體可以去這個網站看看→youyoy第三方網站對于Unicode編碼匯總

它表示的范圍比ASCII編碼范圍更大,而且它包含ASCII編碼

打印最值,注意這里的方法名是Character中的MAX_VALUE和MIN_VALUE這兩個功能

但是你會發現打印不出來,這是因為有些字符是不可打印字符

(8)布爾類型(boolean)——未明確大小

public static void main(String[] args) {boolean sign1 = true;boolean sign2 = false;//boolean simple5 = sign1+sign2;//這行代碼直接報錯System.out.println(sign1);System.out.println(sign2);}

注意在Java中不存在true表示1,false表示0的用法

打印輸出也只是打印輸出true和false,并且還不能進行加減

如果運行我注釋那一行的代碼,會直接報錯的

一般布爾類型都是未明確大小的,但是在oracle虛擬機中默認定義為1字節


?


?

八、類型轉換

分為自動類型轉換(隱式)和強制類型轉換(顯示),分別是編譯器自動和人為主動

(1)自動類型轉換

  public static void main(String[] args) {int num7 = 5;long num8 = num7;//這里就把5從整型轉換成長整型float f = 12.5f;double fPro = f;//這里就把12.5從float類型轉換成double類型System.out.println(num8);System.out.println(fPro);}

針對的是小的類型轉成大的類型,比如示例中的int轉double,float轉double

(2)強制類型轉換

  public static void main(String[] args) {double num9 = 12.12345678;float num10 = (float) num9;System.out.println(num10);byte num11 = (byte) 128;System.out.println(num11);
}

針對的是大的類型轉小的類型,比如示例中的double轉float

但是會存在一個問題,由于float只能精確到小數點6位,當發生強制類型轉換的時候,會產生數據丟失的風險

還有一個問題,如果你強制轉換的數在轉換后的類型中超出范圍了會發生什么?

就比如我上面示例代碼中的byte類型,結果我們看到是-128,為什么呢?

這里就涉及到了數據溢出的原理

你把它想象成一個鐘表,當你超過范圍了溢出的數據指向溢出的方向,進入溢出區域的范圍

?九、整型提升

    public static void main(String[] args) {int num12 = 20;long num13 = 40;long ret = num12 + num13;System.out.println(ret);byte num14 = 10;byte num15 = 30;int ret2 = num14 + num15;System.out.println(ret2);//但是你想強行轉換也可以,但可能產生數據丟失問題(數據超出類型范圍的時候)byte ret3 = (byte) (num14 + num15);System.out.println(ret3);}

什么時候發生整型提升呢,當一個小的類型和一個大的類型進行加減運算時,由于小的類型數據范圍比較小,不方便統一運算,因此就提升為數據類型較大的那一個,對應的就用數據較大的那個類型來接收

如果同類型相加,假如數據類型小于int類型,則相加的時候先提升為int類型再進行計算

因為在進行加減運算時,CPU運算邏輯要求這樣

十、字符串類型

public static void main(String[] args) {String str1 = "hello world ";System.out.println(str1);String str2 = "hello everyone";String ret4 = str1 + str2;System.out.println(ret4);//hello world hello everyoneint num16 = 10;int num17 = 40;System.out.println(str2 + num16 + num17);//hello everyone1040System.out.println(num16 + num17 + str2);//50hello everyoneSystem.out.println(str2 + (num16 + num17));//hello everyone50}

?大部分跟C/C++邏輯類型,但是有一點比較特殊

在Java中,字符串之間使用加號,表示拼接的意思

但是有個細節需要我們注意,+確實是在字符串中表示拼接作用

但是如果你+號兩側中字符串類型的位置不一樣,會導致結果不同

為什么兩者的情況不同呢?

原來是字符串變量在前面,執行拼接指令,在后面則等前面的變量值執行完了,再執行后面

但如果你就是向字符串在前的時候拼接上比如變量相加的結果呢?很簡單,加個括號就可以了

?##與其他類型的轉換

 public static void main(String[] args) {int num18 = 10;String str3 = num18 + "";System.out.println(str3);System.out.println(String.valueOf(num18));//這樣也可以強制轉換//String轉intString strOther = "hello world";int otherInt = Integer.parseInt(strOther);}

int轉string,我們可以給字符的結果加上“”或者是使用Srring方法中的valueof功能

反之string轉int,目前我認知的只能使用Integer方法中的parseInt功能

而且這種轉換編譯器也會報出警告

十一、運算符簡略介紹

(1)Java特殊介紹

例子一:

public static void main(String[] args) {int num19 = 50;int num20 = 0;//System.out.println(num19/num20);System.out.println(11.0 % 2.0);//結果是1.0}

?上面的num19/num20這段代碼會報錯

因為num20是一個0的值,計算異常,也就是0不能作為除數

Java中有一種特殊求余的方式,小數點求余,這是在C/C++中所沒有的

例子二:

在C語言中,這段代碼:3<num22<5的最終結果是true為真,但是在Java中無法通過編譯

這是因為第3<5判斷后,返回的類型是true

而true和5不是同一個類型,無法比較,Java中對類型的檢查非常嚴格

(2)增量運算符問題

 public static void main(String[] args) {int num21 = 10;num21 += 1.5;System.out.println(num21);//為何打印的結果是11呢?}

?因為你num21是一個整型類型,你加上一個1.5相當于是double類型,10會發生整型提升

計算后的結果本應該是11.5,但是你的num21是int類型

會進行強制轉化,舍棄小數部分,不會四舍五入,因此上述計算式子等同于

num21 = (int) (num21 + 1.5);System.out.println(num21);//這里的打印結果就是12了

(3) 短路求值

public static void main(String[] args) {int num22 = 4;int num23 = 2;boolean ret5 = num22 > num23 && 1 > 2;System.out.println(ret5);//打印結果是false,因為兩邊同時為真整個式子才為真boolean ret6 = num22 > num23 || 1 > 2;System.out.println(ret6);//打印結果為true,只要兩邊有一邊為真整個式子就是真//針對程序拋出異常,我們使用短路來確保安全boolean retError3 = num22 > num23 || (1 / erroSimple) > 2;System.out.println(retError3);//輸出為true,右邊式子不會計算,不會執行右邊的拋出異常

但是在Java中,如果是按位與和按位或,則不會短路,會產生程序拋出異常

為了避免這種情況,我們善于利用短路來確保我們代碼安全

int erroSimple = 0;
boolean retError = num22>num23&(1/erroSimple)>2;//如果你不使用短路,會發生程序拋出異常//報錯信息→→Exception in thread "main" java.lang.ArithmeticException: / by zero
boolean retError2 = num22>num23|(1/erroSimple)>2;//同理會發生程序拋出異常,Exception in thread "main" java.lang.ArithmeticException: / by zero
System.out.println(retError);
System.out.println(retError2);

十二、位運算符

位運算符之前在C語言中已經計算過了,這里不做過多介紹,這里舉一個例子來看看

但是在Java中有一種特殊的右移,無符號右移,就是右移后甭管你是正數還是負數,一律添上0

public static void main(String[] args) {int num24 = 0xf;//這是十六進制數字,f代表15int ret7 = ~0xf;System.out.println(ret7);//誒,打印結果是-16,為什么呢?取反是按原碼取反//同樣移位操作符也講過,這里我舉一個特殊例子int num25 = -1;int ret8 = num25 >> 1;System.out.println(ret8);//結果還是-1//以下是Java獨有的無符號右移int ret9 = num25 >>> 1;System.out.println(ret9);//結果是2147483647,一個非常大的數}

以下是利用deepseek進行解讀為什么打印結果是-16,注意紅框框里的字“絕對值”?

以下是利用deepseek進行解讀為什么ret9是一個非常大的數

十三、條件操作符&&運算符優先級

 public static void main(String[] args) {int ret10 = 1 > 0 ? 2 : 4;//問號左邊式子必須是布爾類型的判斷System.out.println(ret10);}

?跟C語言有些類似,但是這個操作符的值必須是有其他值去接收結果值來接收

至于優先級,與其記那么多規則,

還不如直接添加括號,想讓哪個部分先算就把哪個部分加括號即可


本文章所用代碼:Git碼云倉庫鏈接


作者水平有限,文章難免有些疏漏錯誤,歡迎指正,我們友好交流


END

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

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

相關文章

nRF5_SDK_17.1.0_ddde560之ble_app_uart_c 出錯

Error #541: ARM::CMSIS:CORE:5.3.0 component is missing (previously found in pack ARM.CMSIS.5.6.0) Error #541: NordicSemiconductor::Device:Startup:8.40.3 component is missing (previously found in pack NordicSemiconductor.nRF_DeviceFamilyPack.8.40.3) 下載n…

基于大模型預測的多發性硬化綜合診療方案研究報告大綱

目錄 一、引言二、文獻綜述三、大模型預測系統構建四、術前預測與手術方案制定五、術中監測與決策支持六、術后護理與并發癥預測七、麻醉方案智能優化八、統計分析與技術驗證九、實驗驗證與證據支持十、健康教育與指導系統十一、結論與展望一、引言 (一)研究背景與意義 多發…

bootstrap自助(抽樣)法

一&#xff0c;概念 一言以蔽之&#xff1a;從訓練集中有放回的均勻抽樣——》本質就是有放回抽樣&#xff1b; 自助法&#xff08;bootstrap&#xff09;是一種通過從數據集中重復抽樣來估計統計量分布的非參數方法。它可用于構建假設檢驗&#xff0c;當對參數模型的假設存在…

用1W字講透數據預處理,數據增強

大家好&#xff01;我是我不是小upper~ 今天咱們來聊聊數據增強 —— 這個在機器學習領域堪稱 “數據魔法” 的實用技術&#xff01; 在深度學習的世界里&#xff0c;數據就像模型的 “養分”。數據的質量和數量&#xff0c;直接決定了模型最終能達到的 “高度”。當數據不足時…

無人機空中物流優化:用 Python 打造高效配送模型

友友們好! 我是Echo_Wish,我的的新專欄《Python進階》以及《Python!實戰!》正式啟動啦!這是專為那些渴望提升Python技能的朋友們量身打造的專欄,無論你是已經有一定基礎的開發者,還是希望深入挖掘Python潛力的愛好者,這里都將是你不可錯過的寶藏。 在這個專欄中,你將會…

C++核心編程解析:模板、容器與異常處理全指南

文章目錄 一、模板1.1 定義1.2 作用1.3 函數模版1.3.1 格式 1.4 類模版1.4.1 格式1.4.2 代碼示例1.4.3 特性 二、容器2.1 概念2.2 容器特性2.3 分類2.4 向量vector2.4.1 特性2.4.2 初始化與操作2.4.3 插入刪除 2.5 迭代器2.6 列表&#xff08;list&#xff09;2.6.1 遍歷方式2.…

JWT的介紹與在Fastapi框架中的應用

什么是JWT JWT (JSON Web Token) 是一個開放標準 ( RFC 7519 )&#xff0c;它定義了一種緊湊且自包含的方式&#xff0c;用于在各方之間安全地以 JSON 對象的形式傳輸信息。由于這些信息經過數字簽名&#xff0c;因此可以被驗證和信任。JWT 可以使用密鑰&#xff08;采用HMAC算…

dfs第二次加訓 詳細題解 下

目錄 B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全 思路 B4279 [藍橋杯青少年組國賽 2023] 數獨填數、 思路 P5198 [USACO19JAN] Icy Perimeter S 思路 P5429 [USACO19OPEN] Fence Planning S 思路 P6111 [USACO18JAN] MooTube S 思路 P6207 [USACO06OCT] Cows …

配置Hadoop集群環境準備

&#xff08;一&#xff09;Hadoop的運行模式 一共有三種&#xff1a; 本地運行。偽分布式完全分布式 &#xff08;二&#xff09;Hadoop的完全分布式運行 要模擬這個功能&#xff0c;我們需要做好如下的準備。 1&#xff09;準備3臺客戶機&#xff08;關閉防火墻、靜態IP、…

Python60日基礎學習打卡D12【蟲豸版】

退火算法 物理現象&#xff1a;退火現象指物體逐漸降溫的物理現象&#xff0c;溫度愈低&#xff0c;物體的能量狀態會低&#xff1b;溫度足夠低后&#xff0c;液體開始冷凝與結晶&#xff0c;在結晶狀態時&#xff0c;系統的能量狀態最低。大自然在緩慢降溫(即退火)時&#xf…

1.3.1 Linux音頻框架alsa詳細介紹

ALSA作為對舊OSS系統的替代方案&#xff0c;始于1998年。當時OSS還閉源商業化&#xff0c;因此社區開始開發開源的ALSA。經過多年的發展&#xff0c;ALSA成為Linux內核中音頻架構的標準。 結構和架構 ALSA由以下幾個主要部分組成&#xff1a; 內核模塊&#xff1a; 這是ALSA的…

# 07_Elastic Stack 從入門到實踐(七)---1

07_Elastic Stack 從入門到實踐(七)—1 一、Filebeat入門之讀取 Nginx 日志文件 1、首先啟動 Elasticsearch 集群 和 Nginx 服務,打開GoogleChrome 瀏覽器,點擊 elasticsearch-head 插件,連接Elasticsearch 集群 服務器。 # 查看網卡名 $ ip addr# 修改網卡配置,改為…

BUUCTF 大流量分析(三) 1

BUUCTF:https://buuoj.cn/challenges 文章目錄 題目描述&#xff1a;密文&#xff1a;解題思路&#xff1a;flag&#xff1a; 相關閱讀 CTF Wiki BUUCTF | 大流量分析 &#xff08;一&#xff09;&#xff08;二&#xff09;&#xff08;三&#xff09; 題目描述&#xff1a; …

數據庫的進階操作

目錄 1、數據庫的約束 2、查詢操作的進階 2.1 查詢插入 2.2 聚合查詢 2.3 運算查詢 2.3 分組查詢 2.4 聯合查詢 2.5 內外連接 2.6 子查詢 2.7 合并查詢 1、數據庫的約束 數據庫的約束是指&#xff1a;數據庫會自動的對數據的合法性進行校驗和檢查的一系列操作的機制&a…

.Net HttpClient 使用請求數據

HttpClient 使用請求數據 0、初始化及全局設置 //初始化&#xff1a;必須先執行一次 #!import ./ini.ipynb1、使用url 傳參 參數放在Url里&#xff0c;形如&#xff1a;http://www.baidu.com?namezhangsan&age18, GET、Head請求用的比較多。優點是簡單、方便&#xff0…

Qt還有希望嗎

&#x1f680;2025 年 Qt 框架價值大揭秘&#xff01;會持續閃耀嗎&#xff1f; 寶子們&#xff0c;今天來聊聊 Qt 框架在 2025 年的價值走向&#xff0c;這可是跨平臺應用開發的寶藏工具呀&#xff01; &#x1f31f;核心優勢穩穩拿捏Qt 的跨平臺能力絕了&#xff01; Windows…

Redis設計與實現——數據結構與對象

簡單動態字符串&#xff08;SDS&#xff09; SDS 的結構定義 len&#xff1a;記錄當前字符串的實際長度&#xff08;不包含 \0&#xff09;&#xff0c;獲取長度的時間復雜度為 O(1)。free&#xff1a;記錄未使用的空間大小&#xff0c;用于優化內存分配。buf[]&#xff1a;實…

NeurIPS 2025 截稿攻略

會議資訊 NeurIPS&#xff0c;全稱神經信息處理系統大會&#xff0c;是一個關于機器學習和計算神經科學的國際會議。NeurIPS是CCF&#xff08;計算機學會&#xff09;推薦的A類會議&#xff01;是機器學習領域內最具難度、水平最高且影響力最強的會議之一。它與ICML&#xff0…

Java中堆棧

文章目錄 Java中堆棧1. 棧&#xff08;Stack&#xff09;特點示例 2. 堆&#xff08;Heap&#xff09;特點示例 3. 核心區別4. 常見問題5. 內存可視化示例內存布局示意圖&#xff1a; 總結 Java中堆棧 在 Java 中&#xff0c;“堆棧” 通常指的是堆&#xff08;Heap&#xff0…

【類拷貝文件的運用】

常用示例 當我們面臨將文本文件分成最大大小塊的時&#xff0c;我們可能會嘗試編寫如下代碼: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默認10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…