您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java的基本語(yǔ)法介紹”,在日常操作中,相信很多人在Java的基本語(yǔ)法介紹問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java的基本語(yǔ)法介紹”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
軟件:即一系列按照特定順序組織的計(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)
第一代:機(jī)器語(yǔ)言
第二代:匯編語(yǔ)言
第三代:高級(jí)語(yǔ)言
面向過(guò)程:C,Pascal、Fortran
面向?qū)ο螅篔ava,JS,Python,Scala,...
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
Java Web開(kāi)發(fā):后臺(tái)開(kāi)發(fā)
大數(shù)據(jù)開(kāi)發(fā):
Android應(yīng)用程序開(kāi)發(fā):客戶端開(kāi)發(fā)
面向?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
下載:官網(wǎng),github
安裝:傻瓜式安裝:JDK 、JRE
注意問(wè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 如何配置?
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
java程序編寫(xiě)-編譯-運(yùn)行的過(guò)程
編寫(xiě):我們將編寫(xiě)的java代碼保存在以".java"結(jié)尾的源文件中
編譯:使用javac.exe命令編譯我們的java源文件。格式:javac 源文件名.java
運(yùn)行:使用java.exe命令解釋運(yùn)行我們的字節(jié)碼文件。 格式:java 類名
在一個(gè)java源文件中可以聲明多個(gè)class。但是,只能最多有一個(gè)類聲明為public的。 而且要求聲明為public的類的類名必須與源文件名相同。
程序的入口是main()方法。格式是固定的。
輸出語(yǔ)句:
System.out.println():先輸出數(shù)據(jù),然后換行
System.out.print():只輸出數(shù)據(jù)
每一行執(zhí)行語(yǔ)句都以";"結(jié)束。
編譯的過(guò)程:編譯以后,會(huì)生成一個(gè)或多個(gè)字節(jié)碼文件。字節(jié)碼文件的文件名與java源文件中的類名相同。
分類: 單行注釋:// 多行注釋:/* / 文檔注釋:/* */
作用:
① 對(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ō)明文檔。
③ 多行注釋不可以嵌套使用
API: application programming interface。習(xí)慣上:將語(yǔ)言提供的類庫(kù),都稱為API.
API文檔:針對(duì)于提供的類庫(kù)如何使用,給的一個(gè)說(shuō)明書(shū)。類似于《新華字典》
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
定義:被Java語(yǔ)言賦予了特殊含義,用做專門用途的字符串(單詞) 特點(diǎn):關(guān)鍵字中所字母都為小寫(xiě) 具體關(guān)鍵字:
現(xiàn)Java版本尚未使用,但以后版本可能會(huì)作為關(guān)鍵字使用。 具體哪些保留字:goto 、const 注意:自己命名標(biāo)識(shí)符時(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 按數(shù)據(jù)類型分類
詳細(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 按照聲明位置分類
數(shù)據(jù)類型 變量名 = 變量值;
數(shù)據(jù)類型 變量名;
變量名 = 變量值;
① 變量必須先聲明,后使用
② 變量都定義在其作用域內(nèi)。在作用域內(nèi),它是有效的。換句話說(shuō),出了作用域,就失效了
③ 同一個(gè)作用域內(nèi),不可以聲明兩個(gè)同名的變量
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)算
String屬于引用數(shù)據(jù)類型,翻譯為:字符串
聲明String類型變量時(shí),使用一對(duì)""
String可以和8種基本數(shù)據(jù)類型變量做運(yùn)算,且運(yùn)算只能是連接運(yùn)算:+
運(yùn)算的結(jié)果仍然是String類型
注意:
String s = 123;//編譯錯(cuò)誤 String s1 = "123"; int i = (int)s1;//編譯錯(cuò)誤
二進(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.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.1 圖示:
3.2 圖示二進(jìn)制轉(zhuǎn)化為十進(jìn)制:
-69補(bǔ)碼-->原碼
127原碼-->補(bǔ)碼
3.3圖示十進(jìn)制轉(zhuǎn)化為二進(jìn)制:
3.4二進(jìn)制與八進(jìn)制、十六進(jìn)制之間的轉(zhuǎ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,后運(yùn)算 (后)++ :先運(yùn)算,后自增1
(前)-- :先自減1,后運(yùn)算 (后)-- :先運(yùn)算,后自減1
連接符:+:只能使用在String與其他數(shù)據(jù)類型變量之間使用。
賦值運(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++; (推薦)
比較運(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);//
邏輯運(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類型
位運(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;
三元運(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.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ō)明:
根據(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é)束為止。
break,可以使用在switch-case結(jié)構(gòu)中,表示一旦執(zhí)行到此關(guān)鍵字,就跳出switch-case結(jié)構(gòu)
switch結(jié)構(gòu)中的表達(dá)式,只能是如下的6種數(shù)據(jù)類型之一: byte 、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)
case 之后只能聲明常量。不能聲明范圍。
break關(guān)鍵字是可選的。
default:相當(dāng)于if-else結(jié)構(gòu)中的else.
default結(jié)構(gòu)是可選的,而且位置是靈活的。
補(bǔ)充:
如果switch-case結(jié)構(gòu)中的多個(gè)case的執(zhí)行語(yǔ)句相同,則可以考慮進(jìn)行合并。
break在switch-case中是可選的
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é):
開(kāi)發(fā)中,基本上我們都會(huì)從for、while中進(jìn)行選擇,實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
for循環(huán)和while循環(huán)是可以相互轉(zhuǎn)換的! 區(qū)別:for循環(huán)和while循環(huán)的初始化條件部分的作用范圍不同。
我們寫(xiě)程序,要避免出現(xiàn)死循環(huán)。
do-while循環(huán)結(jié)構(gòu)
① do{ ③; ④; }while(②); //執(zhí)行過(guò)程:① - ③ - ④ - ② - ③ - ④ - ... - ②
說(shuō)明:
do-while循環(huán)至少會(huì)執(zhí)行一次循環(huán)體!
開(kāi)發(fā)中,使用for和while更多一些。較少使用do-while
數(shù)組循環(huán)比遍歷通常用for循環(huán)
觸發(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)劣:
正確性
可讀性
健壯性
高效率與低存儲(chǔ):時(shí)間復(fù)雜度 、空間復(fù)雜度 (衡量算法的好壞)
break和continue關(guān)鍵字的使用
使用范圍 | 循環(huán)中的作用(不同點(diǎn)) | 相同點(diǎn) | |
---|---|---|---|
break | switch-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在方法中講。
如何從鍵盤獲取不同類型的變量:需要使用Scanner類
具體實(shí)現(xiàn)步驟:
導(dǎo)包:import java.util.Scanner;
Scanner的實(shí)例化:Scanner scan = new Scanner(System.in);
調(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í)用的文章!
免責(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)容。