溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java的基本語(yǔ)法介紹

發(fā)布時(shí)間:2021-08-25 16:47:05 來(lái)源:億速云 閱讀:164 作者:chen 欄目:編程語(yǔ)言

這篇文章主要介紹“Java的基本語(yǔ)法介紹”,在日常操作中,相信很多人在Java的基本語(yǔ)法介紹問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java的基本語(yǔ)法介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、語(yǔ)言概述

整體語(yǔ)言概述

Java的基本語(yǔ)法介紹

(一)Java語(yǔ)言概述

1.基礎(chǔ)常識(shí)

軟件:即一系列按照特定順序組織的計(jì)算機(jī)數(shù)據(jù)和指令的集合。分為:系統(tǒng)軟件 和 應(yīng)用軟件

系統(tǒng)軟件:windows , mac os , linux ,unix,android,ios,....

應(yīng)用軟件:word ,ppt,畫(huà)圖板,... 人機(jī)交互方式: 圖形化界面 vs 命令行方式 應(yīng)用程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)

2. 計(jì)算機(jī)語(yǔ)言的發(fā)展迭代史

第一代:機(jī)器語(yǔ)言

第二代:匯編語(yǔ)言

第三代:高級(jí)語(yǔ)言

  • 面向過(guò)程:C,Pascal、Fortran

  • 面向?qū)ο螅篔ava,JS,Python,Scala,...

3. Java語(yǔ)言版本迭代概述

1991年 Green項(xiàng)目,開(kāi)發(fā)語(yǔ)言最初命名為Oak (橡樹(shù))

1994年,開(kāi)發(fā)組意識(shí)到Oak 非常適合于互聯(lián)網(wǎng)

1996年,發(fā)布JDK 1.0,約8.3萬(wàn)個(gè)網(wǎng)頁(yè)應(yīng)用Java技術(shù)來(lái)制作

1997年,發(fā)布JDK 1.1,JavaOne會(huì)議召開(kāi),創(chuàng)當(dāng)時(shí)全球同類會(huì)議規(guī)模之最

1998年,發(fā)布JDK 1.2,同年發(fā)布企業(yè)平臺(tái)J2EE

1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技術(shù)誕生

2004年,發(fā)布里程碑式版本:JDK 1.5,為突出此版本的重要性,更名為JDK 5.0

2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME

2009年,Oracle公司收購(gòu)SUN,交易價(jià)格74億美元

2011年,發(fā)布JDK 7.0

2014年,發(fā)布JDK 8.0,是繼JDK 5.0以來(lái)變化最大的版本

2017年,發(fā)布JDK 9.0,最大限度實(shí)現(xiàn)模塊化

2018年3月,發(fā)布JDK 10.0,版本號(hào)也稱為18.3

2018年9月,發(fā)布JDK 11.0,版本號(hào)也稱為18.9

3. Java語(yǔ)言應(yīng)用的領(lǐng)域:
  • Java Web開(kāi)發(fā):后臺(tái)開(kāi)發(fā)

  • 大數(shù)據(jù)開(kāi)發(fā):

  • Android應(yīng)用程序開(kāi)發(fā):客戶端開(kāi)發(fā)

4. Java語(yǔ)言的特點(diǎn)
  • 面向?qū)ο笮裕?/p>

    • 兩個(gè)要素:類、對(duì)象

    • 三個(gè)特征:封裝、繼承、多態(tài)

  • 健壯性:① 去除了C語(yǔ)言中的指針 ②自動(dòng)的垃圾回收機(jī)制 -->仍然會(huì)出現(xiàn)內(nèi)存溢出、內(nèi)存泄漏

  • 跨平臺(tái)型:write once,run anywhere:一次編譯,到處運(yùn)行

  • 功勞歸功于:JVM

Java的基本語(yǔ)法介紹

(二)開(kāi)發(fā)環(huán)境搭建

1.1 JDK、JRE、JVM的關(guān)系

Java的基本語(yǔ)法介紹

1.2 JDK的下載、安裝

下載:官網(wǎng),github

安裝:傻瓜式安裝:JDK 、JRE

注意問(wèn)題:安裝軟件的路徑中不能包含中文、空格。

1.3 path環(huán)境變量的配置

1.3.1 為什么配置path環(huán)境變量?

path環(huán)境變量:windows操作系統(tǒng)執(zhí)行命令時(shí)所要搜尋的路徑

為什么要配置path:希望java的開(kāi)發(fā)工具(javac.exe,java.exe)在任何的文件路徑下都可以執(zhí)行成功。

1.3.2 如何配置?

Java的基本語(yǔ)法介紹

(三)第一個(gè)Java程序

1.開(kāi)發(fā)體驗(yàn)——Hello World

Java的基本語(yǔ)法介紹

1.1編寫(xiě):

創(chuàng)建一個(gè)java源文件:HelloWorld.java
class HelloChina{
	public static void main(String[] args){
		System.out.println("Hello,World!");
	}
}

1.2編譯:

javac HelloWorld.java

1.3運(yùn)行:

java HelloWord
2.常見(jiàn)問(wèn)題的解決

Java的基本語(yǔ)法介紹

Java的基本語(yǔ)法介紹

3.總結(jié)第一個(gè)程序
  1. java程序編寫(xiě)-編譯-運(yùn)行的過(guò)程

  • 編寫(xiě):我們將編寫(xiě)的java代碼保存在以".java"結(jié)尾的源文件中

  • 編譯:使用javac.exe命令編譯我們的java源文件。格式:javac 源文件名.java

  • 運(yùn)行:使用java.exe命令解釋運(yùn)行我們的字節(jié)碼文件。 格式:java 類名

  1. 在一個(gè)java源文件中可以聲明多個(gè)class。但是,只能最多有一個(gè)類聲明為public的。 而且要求聲明為public的類的類名必須與源文件名相同。

  2. 程序的入口是main()方法。格式是固定的。

  3. 輸出語(yǔ)句:

  • System.out.println():先輸出數(shù)據(jù),然后換行

  • System.out.print():只輸出數(shù)據(jù)

  1. 每一行執(zhí)行語(yǔ)句都以";"結(jié)束。

  2. 編譯的過(guò)程:編譯以后,會(huì)生成一個(gè)或多個(gè)字節(jié)碼文件。字節(jié)碼文件的文件名與java源文件中的類名相同。

(四)注釋與API文檔

1. 注釋:Comment

分類: 單行注釋:// 多行注釋:/* / 文檔注釋:/* */

作用

① 對(duì)所寫(xiě)的程序進(jìn)行解釋說(shuō)明,增強(qiáng)可讀性。方便自己,方便別人

② 調(diào)試所寫(xiě)的代碼

特點(diǎn)

①單行注釋和多行注釋,注釋了的內(nèi)容不參與編譯。 換句話說(shuō),編譯以后生成的.class結(jié)尾的字節(jié)碼文件中不包含注釋掉的信息

② 注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套以網(wǎng)頁(yè)文件形式體現(xiàn)的該程序的說(shuō)明文檔。

③ 多行注釋不可以嵌套使用

2. Java API 文檔:
  • API: application programming interface。習(xí)慣上:將語(yǔ)言提供的類庫(kù),都稱為API.

  • API文檔:針對(duì)于提供的類庫(kù)如何使用,給的一個(gè)說(shuō)明書(shū)。類似于《新華字典》

3. 良好的編程風(fēng)格

3.1 正確的注釋和注釋風(fēng)格

  • 使用文檔注釋來(lái)注釋整個(gè)類或整個(gè)方法

  • 如果注釋方法中的某一個(gè)步驟,使用單行或多行注釋。

3.2 正確的縮進(jìn)和空白

  • 使用一次tab操作,實(shí)現(xiàn)縮進(jìn)

  • 運(yùn)算符兩邊習(xí)慣性各加一個(gè)空格。比如:2 + 4 * 5。

3.3 塊的風(fēng)格

行尾風(fēng)格(Java API源碼選擇的風(fēng)格)

public class Test{
    public static void main (String args){
        System.out.print("Hello");
    }
}

次行風(fēng)格

public class Test
{
    public static void main (String args)
    {
        System.out.print("Hello");
    }
}

3.4 命名風(fēng)格:

  • 包名:多單詞組成時(shí)所有字母都小寫(xiě):xxxyyyzzz

  • 類名、接口名:多單詞組成時(shí),所有單詞的首字母大寫(xiě): XxxYyyZzz(大駝峰式)

  • 變量名、方法名:多單詞組成時(shí),第一個(gè)單詞首字母小寫(xiě),第二個(gè)單詞開(kāi)始每個(gè)單詞首字母大寫(xiě): xxxYyyZzz(小駝峰式)

  • 常量名:所有字母都大寫(xiě)。多單詞時(shí)每個(gè)單詞用下劃線連接: XXX_YYY_ZZZ

二、基本語(yǔ)法

(一)關(guān)鍵字與標(biāo)識(shí)符

1. Java關(guān)鍵字的使用

定義:被Java語(yǔ)言賦予了特殊含義,用做專門用途的字符串(單詞) 特點(diǎn):關(guān)鍵字中所字母都為小寫(xiě) 具體關(guān)鍵字:

Java的基本語(yǔ)法介紹

Java的基本語(yǔ)法介紹

2. 保留字:

現(xiàn)Java版本尚未使用,但以后版本可能會(huì)作為關(guān)鍵字使用。 具體哪些保留字:goto 、const 注意:自己命名標(biāo)識(shí)符時(shí)要避免使用這些保留字

3.標(biāo)識(shí)符的使用

3.1 定義:

凡是自己可以起名字的地方都叫標(biāo)識(shí)符。

3.2 涉及到的結(jié)構(gòu):

包名、類名、接口名、變量名、方法名、常量名

3.3 規(guī)則:

(必須要遵守。否則,編譯不通過(guò))

  • 由26個(gè)英文字母大小寫(xiě),0-9, _或$組成。

  • 數(shù)字不可以開(kāi)頭。

  • 不可以使用關(guān)鍵字和保留字,但能包含關(guān)鍵字和保留字。

  • Java中嚴(yán)格區(qū)分大小寫(xiě),長(zhǎng)度無(wú)限制。

  • 標(biāo)識(shí)符不能包含空格。

3.4 規(guī)范:

(可以不遵守,不影響編譯和運(yùn)行。但是要求大家遵守)

  • 包名:多單詞組成時(shí)所有字母都小寫(xiě):xxxyyyzzz

  • 類名、接口名:多單詞組成時(shí),所有單詞的首字母大寫(xiě): XxxYyyZzz(小駝峰式)

  • 變量名、方法名:多單詞組成時(shí),第一個(gè)單詞首字母小寫(xiě),第二個(gè)單詞開(kāi)始每個(gè)單詞首字母大寫(xiě): xxxYyyZzz(大駝峰式)

  • 常量名:所有字母都大寫(xiě)。多單詞時(shí)每個(gè)單詞用下劃線連接: XXX_YYY_ZZZ

注意點(diǎn): 在起名字時(shí),為了提高閱讀性,要盡量意義,“見(jiàn)名知意”。

有意義的命名
1.介紹
軟件中隨處可見(jiàn)命名。我們給變量、函數(shù)、參數(shù)、類和包命名。我們給源代碼及源代碼所在目錄命名。
這么多命名要做,不妨做好它。下文列出了取個(gè)好名字的幾條簡(jiǎn)單規(guī)則。

2.名副其實(shí),見(jiàn)名知意
     變量名太隨意,haha、list1、ok、theList 這些都沒(méi)啥意義

3.避免誤導(dǎo)
     包含List、import、java等類名、關(guān)鍵字或特殊字;
     字母o與數(shù)字0,字母l與數(shù)字1等
     提防使用不同之處較小的名稱。比如:XYZControllerForEfficientHandlingOfStrings與XYZControllerForEfficientStorageOfStrings

4.做有意義的區(qū)分
     反面教材,變量名:a1、a2、a3
     避免冗余,不要出現(xiàn)Variable、表字段中避免出現(xiàn)table、字符串避免出現(xiàn)nameString,直接name就行,知道是字符串類型
     再比如:定義了兩個(gè)類:Customer類和CustomerObject類,如何區(qū)分?
	     定義了三個(gè)方法:getActiveAccount()、getActiveAccounts()、getActiveAccountInfo(),如何區(qū)分?

5.使用讀得出來(lái)的名稱
     不要使用自己拼湊出來(lái)的單詞,比如:xsxm(學(xué)生姓名);genymdhms(生成日期,年、月、日、時(shí)、分、秒)
     所謂的駝峰命名法,盡量使用完整的單詞

6.使用可搜索的名稱
     一些常量,最好不直接使用數(shù)字,而指定一個(gè)變量名,這個(gè)變量名可以便于搜索到.
     比如:找MAX_CLASSES_PER_STUDENT很容易,但想找數(shù)字7就麻煩了。

7.避免使用編碼
     7.1.匈牙利語(yǔ)標(biāo)記法
           即變量名表明該變量數(shù)據(jù)類型的小寫(xiě)字母開(kāi)始。例如,szCmdLine的前綴sz表示“以零結(jié)束的字符串”。
     7.2.成員前綴
          避免使用前綴,但是Android中一個(gè)比較好的喜歡用m表示私有等,個(gè)人感覺(jué)比較好
     7.3.接口和實(shí)現(xiàn)
          作者不喜歡把接口使用I來(lái)開(kāi)頭,實(shí)現(xiàn)也希望只是在后面添加Imp

8.避免思維映射
     比如傳統(tǒng)上慣用單字母名稱做循環(huán)計(jì)數(shù)器。所以就不要給一些非計(jì)數(shù)器的變量命名為:i、j、k等

9.類名
     類名與對(duì)象名應(yīng)該是名詞與名詞短語(yǔ)。如Customer、WikiPage、Account和AddressParser。避免使用Data或Info這樣的類名。
     不能使動(dòng)詞。比如:Manage、Process

10.方法名
     方法名應(yīng)當(dāng)是動(dòng)詞或者動(dòng)詞短語(yǔ)。如postPayment、deletePage或save

11.別扮可愛(ài)
     有的變量名叫haha、banana
     別用eatMyShorts()表示abort()

12.每個(gè)概念對(duì)應(yīng)一個(gè)詞
     項(xiàng)目中同時(shí)出現(xiàn)controllers與managers,為什么不統(tǒng)一使用其中一種?
     對(duì)于那些會(huì)用到你代碼的程序員,一以貫之的命名法簡(jiǎn)直就是天降福音。

13.別用雙關(guān)語(yǔ)
     有時(shí)可能使用add并不合適,比例insert、append。add表示完整的新添加的含義。     

14.使用解決方案領(lǐng)域名稱
     看代碼的都是程序員,所以盡量用那些計(jì)算機(jī)科學(xué)術(shù)語(yǔ)、算法名、模式名、數(shù)學(xué)術(shù)語(yǔ),
     依據(jù)問(wèn)題所涉領(lǐng)域來(lái)命名不算是聰明的做法。

15.使用源自所涉問(wèn)題領(lǐng)域的名稱
     如果不能用程序員熟悉的術(shù)語(yǔ)來(lái)給手頭的工作命名,就采用從所涉問(wèn)題領(lǐng)域而來(lái)的名稱吧。
     至少,負(fù)責(zé)維護(hù)代碼的程序員就能去請(qǐng)教領(lǐng)域?qū)<伊恕?

16.添加有意義的語(yǔ)境
     可以把相關(guān)的變量放到一個(gè)類中,使用這個(gè)類來(lái)表明語(yǔ)境。
     
17.不要添加沒(méi)用的語(yǔ)境
     名字中帶有項(xiàng)目的縮寫(xiě),這樣完全沒(méi)有必要。比如有一個(gè)名為“加油站豪華版”(Gas Station Deluxe)的項(xiàng)目,
     在其中給每個(gè)類添加GSD前綴就不是什么好策略。

18.最后的話
     取好名字最難的地方在于需要良好的描述技巧和共有文化背景。

(二)變量的使用

1. 變量的分類

1.1 按數(shù)據(jù)類型分類

Java的基本語(yǔ)法介紹

詳細(xì)說(shuō)明:

整型:byte(1字節(jié)=8bit) \ short(2字節(jié)) \ int(4字節(jié)) \ long(8字節(jié))

① byte范圍:-128 ~ 127

② 聲明long型變量,必須以"l"或"L"結(jié)尾

③ 通常,定義整型變量時(shí),使用int型。

④ 整型的常量,默認(rèn)類型是:int型

浮點(diǎn)型:float(4字節(jié)) \ double(8字節(jié))

① 浮點(diǎn)型,表示帶小數(shù)點(diǎn)的數(shù)值

② float表示數(shù)值的范圍比long還大

③ 定義float類型變量時(shí),變量要以"f"或"F"結(jié)尾

④ 通常,定義浮點(diǎn)型變量時(shí),使用double型。

⑤ 浮點(diǎn)型的常量,默認(rèn)類型為:double

字符型:char (1字符=2字節(jié))

① 定義char型變量,通常使用一對(duì)'',內(nèi)部只能寫(xiě)一個(gè)字符

② 表示方式:1.聲明一個(gè)字符 2.轉(zhuǎn)義字符 3.直接使用 Unicode 值來(lái)表示字符型常量

布爾型:boolean

① 只能取兩個(gè)值之一:true 、 false

② 常常在條件判斷、循環(huán)結(jié)構(gòu)中使用

1.2 按照聲明位置分類

Java的基本語(yǔ)法介紹

2. 定義變量的格式:
  • 數(shù)據(jù)類型 變量名 = 變量值;

  • 數(shù)據(jù)類型 變量名;

  • 變量名 = 變量值;

3. 變量使用的注意點(diǎn):

① 變量必須先聲明,后使用

② 變量都定義在其作用域內(nèi)。在作用域內(nèi),它是有效的。換句話說(shuō),出了作用域,就失效了

③ 同一個(gè)作用域內(nèi),不可以聲明兩個(gè)同名的變量

4. 基本數(shù)據(jù)類型變量間運(yùn)算規(guī)則

4.1 涉及到的基本數(shù)據(jù)類型:

除了boolean之外的其他7種

4.2 自動(dòng)類型轉(zhuǎn)換

(只涉及7種基本數(shù)據(jù)類型)

  • 結(jié)論:當(dāng)容量小的數(shù)據(jù)類型的變量與容量大的數(shù)據(jù)類型的變量做運(yùn)算時(shí),結(jié)果自動(dòng)提升為容量大的數(shù)據(jù)類型。

  • byte 、char 、short --> int --> long --> float --> double

  • 特別的:當(dāng)byte、char、short三種類型的變量做運(yùn)算時(shí),結(jié)果為int型

  • 說(shuō)明:此時(shí)的容量大小指的是,表示數(shù)的范圍的大和小。比如:float容量要大于long的容量

4.3 強(qiáng)制類型轉(zhuǎn)換

(只涉及7種基本數(shù)據(jù)類型):自動(dòng)類型提升運(yùn)算的逆運(yùn)算。

  • 需要使用強(qiáng)轉(zhuǎn)符:()

  • 注意點(diǎn):強(qiáng)制類型轉(zhuǎn)換,可能導(dǎo)致精度損失。

4.4 String與8種基本數(shù)據(jù)類型間的運(yùn)算

  1. String屬于引用數(shù)據(jù)類型,翻譯為:字符串

  2. 聲明String類型變量時(shí),使用一對(duì)""

  3. String可以和8種基本數(shù)據(jù)類型變量做運(yùn)算,且運(yùn)算只能是連接運(yùn)算:+

  4. 運(yùn)算的結(jié)果仍然是String類型

注意:

String s = 123;//編譯錯(cuò)誤
String s1 = "123";
int i = (int)s1;//編譯錯(cuò)誤

(三)進(jìn)制的轉(zhuǎn)化

1. 編程中涉及的進(jìn)制及表示方式:
  • 二進(jìn)制(binary): 0,1,滿2進(jìn)1以0b或0B開(kāi)頭。

  • 十進(jìn)制 (decimal):0-9,滿10進(jìn)1。

  • 八進(jìn)制(octal):0-7,滿8進(jìn)1,以數(shù)字0開(kāi)頭表示。

  • 十六進(jìn)制(hex):0-9及A-F,滿16進(jìn)1,以0x或0X開(kāi)頭表示。此處的A-F不區(qū)分大小寫(xiě)如:0x21AF+1=0X21B0

2. 二進(jìn)制的使用說(shuō)明:

2.1 計(jì)算機(jī)底層的存儲(chǔ)方式:

所有數(shù)字在計(jì)算機(jī)底層都以二進(jìn)制形式存在。

2.2 二進(jìn)制數(shù)據(jù)的存儲(chǔ)方式:

所有的數(shù)值,不管正負(fù),底層都以補(bǔ)碼的方式存儲(chǔ)。

2.3 原碼、反碼、補(bǔ)碼的說(shuō)明:

  • 正數(shù):三碼合一

  • 負(fù)數(shù):

    • 負(fù)數(shù)的原碼:直接將一個(gè)數(shù)值換成二進(jìn)制數(shù)。最高位是符號(hào)位。

    • 負(fù)數(shù)的反碼:是對(duì)原碼按位取反,只是最高位(符號(hào)位)確定為1。

    • 負(fù)數(shù)的補(bǔ)碼:其反碼加1。

3. 進(jìn)制之間的轉(zhuǎn)化:

3.1 圖示:

Java的基本語(yǔ)法介紹

3.2 圖示二進(jìn)制轉(zhuǎn)化為十進(jìn)制:

Java的基本語(yǔ)法介紹

-69補(bǔ)碼-->原碼

Java的基本語(yǔ)法介紹

127原碼-->補(bǔ)碼

Java的基本語(yǔ)法介紹

3.3圖示十進(jìn)制轉(zhuǎn)化為二進(jìn)制:

Java的基本語(yǔ)法介紹

3.4二進(jìn)制與八進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)化:

Java的基本語(yǔ)法介紹

Java的基本語(yǔ)法介紹

(四)運(yùn)算符

1. 算術(shù)運(yùn)算符

算術(shù)運(yùn)算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- +

【典型代碼】

//除號(hào):/
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;
System.out.println(result1);//2
// %:取余運(yùn)算
//結(jié)果的符號(hào)與被模數(shù)的符號(hào)相同
//開(kāi)發(fā)中,經(jīng)常使用%來(lái)判斷能否被除盡的情況。
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);

int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = " + m2 % n2);

int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = " + m3 % n3);

int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = " + m4 % n4);
//(前)++ :先自增1,后運(yùn)算
//(后)++ :先運(yùn)算,后自增1
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);

int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);

int a3 = 10;
++a3;//a3++;
int b3 = a3;
//(前)-- :先自減1,后運(yùn)算
//(后)-- :先運(yùn)算,后自減1

int a4 = 10;
int b4 = a4--;//int b4 = --a4;
System.out.println("a4 = " + a4 + ",b4 = " + b4);

【特別說(shuō)明】

  1. (前)++ :先自增1,后運(yùn)算 (后)++ :先運(yùn)算,后自增1

  2. (前)-- :先自減1,后運(yùn)算 (后)-- :先運(yùn)算,后自減1

  3. 連接符:+:只能使用在String與其他數(shù)據(jù)類型變量之間使用。

2. 賦值運(yùn)算符

賦值運(yùn)算符:= += -= *= /= %=

【經(jīng)典代碼】

int i2,j2;
//連續(xù)賦值
i2 = j2 = 10;
//***************
int i3 = 10,j3 = 20;
int num1 = 10;
num1 += 2;//num1 = num1 + 2;
System.out.println(num1);//12

int num2 = 12;
num2 %= 5;//num2 = num2 % 5;
System.out.println(num2);

short s1 = 10;
//s1 = s1 + 2;//編譯失敗
s1 += 2;//結(jié)論:不會(huì)改變變量本身的數(shù)據(jù)類型
System.out.println(s1);

【特別說(shuō)明】

  • 運(yùn)算的結(jié)果不會(huì)改變變量本身的數(shù)據(jù)類型

  • 開(kāi)發(fā)中,如果希望變量實(shí)現(xiàn)+2的操作,有幾種方法?(前提:int num = 10;) 方式一:num = num + 2; 方式二:num += 2; (推薦)

  • 開(kāi)發(fā)中,如果希望變量實(shí)現(xiàn)+1的操作,有幾種方法?(前提:int num = 10;) 方式一:num = num + 1; 方式二:num += 1; 方式三:num++; (推薦)

3. 比較運(yùn)算符

比較運(yùn)算符(關(guān)系運(yùn)算符): == != > < >= <= instanceof

【典型代碼】

int i = 10;
int j = 20;

System.out.println(i == j);//false
System.out.println(i = j);//20

boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true

【特別說(shuō)明】

  • 比較運(yùn)算符的結(jié)果是boolean類型

  • > < >= <= :只能使用在數(shù)值類型的數(shù)據(jù)之間。

  • == 和 !=: 不僅可以使用在數(shù)值類型數(shù)據(jù)之間,還可以使用在其他引用類型變量之間。

    Account acct1 = new Account(1000);
    Account acct2 = new Account(1000);
    boolean b1 = (acct1 == acct2);//比較兩個(gè)Account是否是同一個(gè)賬戶。
    boolean b2 = (acct1 != acct2);//


4. 邏輯運(yùn)算符

邏輯運(yùn)算符:& && | || ! ^

【典型代碼】

//區(qū)分& 與 &&
//相同點(diǎn)1:& 與  && 的運(yùn)算結(jié)果相同
//相同點(diǎn)2:當(dāng)符號(hào)左邊是true時(shí),二者都會(huì)執(zhí)行符號(hào)右邊的運(yùn)算
//不同點(diǎn):當(dāng)符號(hào)左邊是false時(shí),&繼續(xù)執(zhí)行符號(hào)右邊的運(yùn)算。&&不再執(zhí)行符號(hào)右邊的運(yùn)算。
//開(kāi)發(fā)中,推薦使用&&
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
    System.out.println("我現(xiàn)在在北京");
}else{
    System.out.println("我現(xiàn)在在南京");
}

System.out.println("num1 = " + num1);

boolean b2 = true;
b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
    System.out.println("我現(xiàn)在在北京");
}else{
    System.out.println("我現(xiàn)在在南京");
}

System.out.println("num2 = " + num2);

注意:

  • 區(qū)分:| 與 ||

  • 相同點(diǎn)1:| 與 || 的運(yùn)算結(jié)果相同

  • 相同點(diǎn)2:當(dāng)符號(hào)左邊是false時(shí),二者都會(huì)執(zhí)行符號(hào)右邊的運(yùn)算

  • 不同點(diǎn)3:當(dāng)符號(hào)左邊是true時(shí),|繼續(xù)執(zhí)行符號(hào)右邊的運(yùn)算,而||不再執(zhí)行符號(hào)右邊的運(yùn)算

  • 開(kāi)發(fā)中,推薦使用||

boolean b3 = false;
b3 = true;
int num3 = 10;
if(b3 | (num3++ > 0)){
    System.out.println("我現(xiàn)在在北京");
}else{
    System.out.println("我現(xiàn)在在南京");
}
System.out.println("num3 = " + num3);


boolean b4 = false;
b4 = true;
int num4 = 10;
if(b4 || (num4++ > 0)){
    System.out.println("我現(xiàn)在在北京");
}else{
    System.out.println("我現(xiàn)在在南京");
}
System.out.println("num4 = " + num4);

【特別說(shuō)明的】

邏輯運(yùn)算符操作的都是boolean類型的變量。而且結(jié)果也是boolean類型

5. 位運(yùn)算符

位運(yùn)算符:<< >> >>> & | ^ ~

【典型代碼】

		int i = 21;
		i = -21;
		System.out.println("i << 2 :" + (i << 2));
		System.out.println("i << 3 :" + (i << 3));
		System.out.println("i << 27 :" + (i << 27));

		int m = 12;
		int n = 5;
		System.out.println("m & n :" + (m & n));
		System.out.println("m | n :" + (m | n));
		System.out.println("m ^ n :" + (m ^ n));

【面試題】 你能否寫(xiě)出最高效的2 * 8的實(shí)現(xiàn)方式? 答:2 << 3 或 8 << 1

【特別說(shuō)明】

  • 位運(yùn)算符操作的都是整型的數(shù)據(jù)

  • << :在一定范圍內(nèi),每向左移1位,相當(dāng)于 * 2 >>:在一定范圍內(nèi),每向右移1位,相當(dāng)于 / 2

【典型題目】

1.交換兩個(gè)變量的值。

①借用臨時(shí)變量

int num1 = 10;
int num2 = 20;
int temp = num1;
num1 = num2;
num2 = temp;

②加減交換:節(jié)省內(nèi)存,但是會(huì)超出存儲(chǔ)范圍,而且只能適用于數(shù)值型運(yùn)算,

num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;

③使用位運(yùn)算符:只適用于數(shù)值型運(yùn)算

num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
6. 三元運(yùn)算符

三元運(yùn)算符:(條件表達(dá)式) ? 表達(dá)式1 : 表達(dá)式2

【典型代碼】

1.獲取兩個(gè)整數(shù)的較大值

int a = 3;
int b = 6;
int c = 10;
int max = (a > b) a ? b;

2.獲取三個(gè)數(shù)的最大值

int a = 3;
int b = 6;
int c = 10;
int temp = (a > b) a ? b;
int max = (temp > c) temp ? c;

【特別說(shuō)明】

說(shuō)明:

① 條件表達(dá)式的結(jié)果為boolean類型

② 根據(jù)條件表達(dá)式真或假,決定執(zhí)行表達(dá)式1,還是表達(dá)式2. 如果表達(dá)式為true,則執(zhí)行表達(dá)式1。 如果表達(dá)式為false,則執(zhí)行表達(dá)式2。

③ 表達(dá)式1 和表達(dá)式2要求是一致的。

④ 三元運(yùn)算符可以嵌套使用

⑤凡是可以使用三元運(yùn)算符的地方,都可以改寫(xiě)為if-else反之,不成立。

⑥如果程序既可以使用三元運(yùn)算符,又可以使用if-else結(jié)構(gòu),那么優(yōu)先選擇三元運(yùn)算符。原因:簡(jiǎn)潔、執(zhí)行效率高。

(五)流程控制

1. 分支結(jié)構(gòu)

1.1 if-else條件判斷結(jié)構(gòu)

書(shū)寫(xiě)方法:

結(jié)構(gòu)一:
if(條件表達(dá)式){
	執(zhí)行表達(dá)式
}

結(jié)構(gòu)二:二選一
if(條件表達(dá)式){
	執(zhí)行表達(dá)式1
}else{
	執(zhí)行表達(dá)式2
}

結(jié)構(gòu)三:n選一
if(條件表達(dá)式){
	執(zhí)行表達(dá)式1
}else if(條件表達(dá)式){
	執(zhí)行表達(dá)式2
}else if(條件表達(dá)式){
	執(zhí)行表達(dá)式3
}
...
else{
	執(zhí)行表達(dá)式n
}

說(shuō)明:

  • else 結(jié)構(gòu)是可選的。

  • 針對(duì)于條件表達(dá)式:

    • 如果多個(gè)條件表達(dá)式之間是“互斥”關(guān)系(或沒(méi)有交集的關(guān)系),哪個(gè)判斷和執(zhí)行語(yǔ)句聲明在上面還是下面,無(wú)所謂。

    • 如果多個(gè)條件表達(dá)式之間有交集的關(guān)系,需要根據(jù)實(shí)際情況,考慮清楚應(yīng)該將哪個(gè)結(jié)構(gòu)聲明在上面。

    • 如果多個(gè)條件表達(dá)式之間有包含的關(guān)系,通常情況下,需要將范圍小的聲明在范圍大的上面。否則,范圍小的就沒(méi)機(jī)會(huì)執(zhí)行了。

  • if-else結(jié)構(gòu)是可以相互嵌套的。

  • 如果if-else結(jié)構(gòu)中的執(zhí)行語(yǔ)句只有一行時(shí),對(duì)應(yīng)的一對(duì){}可以省略的。但是,不建議省略。

1.2. switch-case選擇結(jié)構(gòu)

書(shū)寫(xiě)方法

switch(表達(dá)式){
case 常量1:
	執(zhí)行語(yǔ)句1;
	//break;
case 常量2:
	執(zhí)行語(yǔ)句2;
	//break;
...
default:
	執(zhí)行語(yǔ)句n;
	//break;
}

說(shuō)明:

  1. 根據(jù)switch表達(dá)式中的值,依次匹配各個(gè)case中的常量。一旦匹配成功,則進(jìn)入相應(yīng)case結(jié)構(gòu)中,調(diào)用其執(zhí)行語(yǔ)句。

    • 當(dāng)調(diào)用完執(zhí)行語(yǔ)句以后,則仍然繼續(xù)向下執(zhí)行其他case結(jié)構(gòu)中的執(zhí)行語(yǔ)句,直到遇到break關(guān)鍵字或此switch-case結(jié)構(gòu)末尾結(jié)束為止。

  2. break,可以使用在switch-case結(jié)構(gòu)中,表示一旦執(zhí)行到此關(guān)鍵字,就跳出switch-case結(jié)構(gòu)

  3. switch結(jié)構(gòu)中的表達(dá)式,只能是如下的6種數(shù)據(jù)類型之一: byte 、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)

  4. case 之后只能聲明常量。不能聲明范圍。

  5. break關(guān)鍵字是可選的。

  6. default:相當(dāng)于if-else結(jié)構(gòu)中的else.

  7. default結(jié)構(gòu)是可選的,而且位置是靈活的。

補(bǔ)充:

  • 如果switch-case結(jié)構(gòu)中的多個(gè)case的執(zhí)行語(yǔ)句相同,則可以考慮進(jìn)行合并。

  • break在switch-case中是可選的

2. 循環(huán)結(jié)構(gòu)

2.1. 循環(huán)結(jié)構(gòu)的四要素

① 初始化條件 ② 循環(huán)條件 --->是boolean類型 ③ 循環(huán)體 ④ 迭代條件 說(shuō)明:通常情況下,循環(huán)結(jié)束都是因?yàn)棰谥醒h(huán)條件返回false了。

2.2. 三種循環(huán)結(jié)構(gòu):

for循環(huán)結(jié)構(gòu)

for(①;②;④){
    ③
}
//執(zhí)行過(guò)程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

while循環(huán)結(jié)構(gòu)

①
while(②){
	③;
	④;
}
//執(zhí)行過(guò)程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

注意:寫(xiě)while循環(huán)千萬(wàn)小心不要丟了迭代條件。一旦丟了,就可能導(dǎo)致死循環(huán)!

for和while循環(huán)總結(jié):

  1. 開(kāi)發(fā)中,基本上我們都會(huì)從for、while中進(jìn)行選擇,實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。

  2. for循環(huán)和while循環(huán)是可以相互轉(zhuǎn)換的! 區(qū)別:for循環(huán)和while循環(huán)的初始化條件部分的作用范圍不同。

  3. 我們寫(xiě)程序,要避免出現(xiàn)死循環(huán)。

do-while循環(huán)結(jié)構(gòu)

①
do{
  ③;
  ④;
  }while(②);
//執(zhí)行過(guò)程:① - ③ - ④ - ② - ③ - ④ - ... - ②

說(shuō)明:

  1. do-while循環(huán)至少會(huì)執(zhí)行一次循環(huán)體!

  2. 開(kāi)發(fā)中,使用for和while更多一些。較少使用do-while

  3. 數(shù)組循環(huán)比遍歷通常用for循環(huán)

  4. 觸發(fā)條件復(fù)雜的用while循環(huán)

3. “無(wú)限循環(huán)”結(jié)構(gòu): while(true) 或 for(;;)

如何結(jié)束一個(gè)循環(huán)結(jié)構(gòu)?

  • 方式一:當(dāng)循環(huán)條件是false時(shí)

  • 方式二:在循環(huán)體中,執(zhí)行break

4.嵌套循環(huán)

嵌套循環(huán):將一個(gè)循環(huán)結(jié)構(gòu)A聲明在另一個(gè)循環(huán)結(jié)構(gòu)B的循環(huán)體中,就構(gòu)成了嵌套循環(huán) 內(nèi)層循環(huán):循環(huán)結(jié)構(gòu)A 外層循環(huán):循環(huán)結(jié)構(gòu)B

說(shuō)明: ① 內(nèi)層循環(huán)結(jié)構(gòu)遍歷一遍,只相當(dāng)于外層循環(huán)循環(huán)體執(zhí)行了一次 ② 假設(shè)外層循環(huán)需要執(zhí)行m次,內(nèi)層循環(huán)需要執(zhí)行n次。此時(shí)內(nèi)層循環(huán)的循環(huán)體一共執(zhí)行了m * n次 ③ 外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列數(shù)

/練習(xí)一:
    /*
		******
		******
		******
		******
		*/
    for(int j = 1;j <= 4;j++ ){
        for(int i = 1;i <= 6;i++){
            System.out.print('*');
        }
        System.out.println();
    }
//練習(xí)二:
/*			i(行號(hào))		j(*的個(gè)數(shù))
		*			1			1
		**			2			2
		***			3			3
		****		4			4
		*****		5			5
		*/

for(int i = 1;i <= 5;i++){//控制行數(shù)
    for(int j = 1;j <= i;j++){//控制列數(shù)
        System.out.print("*");

    }
    System.out.println();
}

補(bǔ)充: 衡量一個(gè)功能代碼的優(yōu)劣:

  1. 正確性

  2. 可讀性

  3. 健壯性

  4. 高效率與低存儲(chǔ):時(shí)間復(fù)雜度 、空間復(fù)雜度 (衡量算法的好壞)

3. 關(guān)鍵字:break和continue

break和continue關(guān)鍵字的使用


使用范圍循環(huán)中的作用(不同點(diǎn))相同點(diǎn)
breakswitch-case 循環(huán)結(jié)構(gòu)中結(jié)束當(dāng)前循環(huán)關(guān)鍵字后面不能聲明執(zhí)行語(yǔ)句
continue循環(huán)結(jié)構(gòu)中結(jié)束當(dāng)次循環(huán)關(guān)鍵字后面不能聲明執(zhí)行語(yǔ)句

補(bǔ)充:帶標(biāo)簽的break和continue的使用

return在方法中講。

4. 補(bǔ)充:Scanner類的應(yīng)用

如何從鍵盤獲取不同類型的變量:需要使用Scanner類

具體實(shí)現(xiàn)步驟:

  1. 導(dǎo)包:import java.util.Scanner;

  2. Scanner的實(shí)例化:Scanner scan = new Scanner(System.in);

  3. 調(diào)用Scanner類的相關(guān)方法(next() / nextXxx()),來(lái)獲取指定類型的變量

注意: 需要根據(jù)相應(yīng)的方法,來(lái)輸入指定類型的值。如果輸入的數(shù)據(jù)類型與要求的類型不匹配時(shí),會(huì)報(bào)異常:InputMisMatchException導(dǎo)致程序終止

//1.導(dǎo)包:import java.util.Scanner;
import java.util.Scanner;

class ScannerTest{
    public static void main(String[] args){
        //2.Scanner的實(shí)例化
        Scanner scan = new Scanner(System.in);

        //3.調(diào)用Scanner類的相關(guān)方法
        System.out.println("請(qǐng)輸入你的姓名:");
        String name = scan.next();
        System.out.println(name);

        System.out.println("請(qǐng)輸入你的芳齡:");
        int age = scan.nextInt();
        System.out.println(age);

        System.out.println("請(qǐng)輸入你的體重:");
        double weight = scan.nextDouble();
        System.out.println(weight);

        System.out.println("你是否相中我了呢?(true/false)");
        boolean isLove = scan.nextBoolean();
        System.out.println(isLove);

        //對(duì)于char型的獲取,Scanner沒(méi)有提供相關(guān)的方法。只能獲取一個(gè)字符串
        System.out.println("請(qǐng)輸入你的性別:(男/女)");
        String gender = scan.next();//"男"
        char genderChar = gender.charAt(0);//獲取索引為0位置上的字符
        System.out.println(genderChar);	
    }
}

到此,關(guān)于“Java的基本語(yǔ)法介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI