Java核心基础知识汇总
3.1、Java簡介(了解)
?????????Java是一門編程語言,Java發(fā)展到今天,已經(jīng)成為了一個(gè)真正意義上的語言標(biāo)準(zhǔn),如果學(xué)習(xí)過(C、C++、Java)可以發(fā)現(xiàn)語法結(jié)構(gòu)是很類似的,但是Java的標(biāo)準(zhǔn)指的是一種作為應(yīng)用層封裝的標(biāo)準(zhǔn),使用Java可以調(diào)用一些底層的操作,例如,今天的Android開發(fā),就是利用了Java調(diào)用了Linux內(nèi)核操作形成的。在2003年的時(shí)候,Java成功的應(yīng)用在了一枚美國的火箭上。
?????????2001年的時(shí)候有一份報(bào)道:在美國,從事于C++的開發(fā)人員的年薪是$6.5,而從事Java開發(fā)的人員的年薪是$7W,7 * 9 =?¥63W(夢想。。。),第一次在國內(nèi)的報(bào)道上看到Java是1998年的時(shí)候。
?????????如果要想追溯Java的發(fā)展,那么首先需要從1991年的GREEN項(xiàng)目開始說起,這個(gè)項(xiàng)目當(dāng)時(shí)是在email特別盛行的時(shí)候提出來的,指的是使用email去控制各個(gè)家電產(chǎn)品的運(yùn)行(物聯(lián)網(wǎng)),最早SUN的工程師打算使用C++進(jìn)行項(xiàng)目的開發(fā),但是后來考慮到C++的復(fù)雜性,所以使用C++開發(fā)出了一個(gè)新的平臺(Java使用的是C++開發(fā)的,但是比C++更加的簡單)?——?OAK(橡樹)平臺。不過遺憾的是,在與NetScape的SGL競標(biāo)的時(shí)候不幸落敗(等待淘汰)。不過后來SUN的工程師們開始向網(wǎng)景公司學(xué)習(xí)瀏覽器技術(shù),推出了HotJava瀏覽器(HotJava程序設(shè)計(jì),王克宏),從而向?yàn)g覽器技術(shù)開始發(fā)展,于是在1995年的時(shí)候正式的將OAK更名為Java(咖啡),但是Java的歷史發(fā)展,可以歸納為如下的幾個(gè)階段:
???????????????????·?第一階段(完善期):JDK 1.0?~?JDK 1.2;
???????????????????·?第二階段(平穩(wěn)期):JDK 1.3 ~ JDK 1.4;
???????????????????·?第三階段(發(fā)展期):JDK 1.5?~ JDK 1.7;
?????????在1995年的時(shí)候推出了JDK 1.0、在1998年的時(shí)候推出了JDK 1.2(更名為Java 2)、2005年的時(shí)候推出了JDK 1.5。
?
?????????對于Java的制造公司?——?SUN(中文翻譯為:太陽公司,斯坦伏大學(xué)網(wǎng)絡(luò)),是一家主要從事于硬件生產(chǎn)的公司,其中SUN最為著名的就是它的小型機(jī)(成功的應(yīng)用案例:應(yīng)用在Amazon書店上),而最悲催的是?SUN的確是Java的締造者,但是真正用它賺到錢的是IBM(Websphere Studio)。而且SUN公司在2000年之后的互聯(lián)網(wǎng)風(fēng)暴之中就再也沒有緩過勁來,于是在2009年的時(shí)候被IBM提議收購,不過沒有談成,馬上Oracle跟進(jìn),最終被Oracle以69億美金收購。
面試題:請你談一談,Oracle收購SUN公司有什么用?
| No. | 對比 | Oracle | Microsoft |
| 1 | 操作系統(tǒng) | UNIX | Windows |
| 2 | 數(shù)據(jù)庫 | Oracle大型數(shù)據(jù)庫 | SQL Server中小型數(shù)據(jù)庫 |
| 3 | 中間件 | OAS、收購了BEA得到WebLogic | IIS |
| 4 | 編程語言 | PLSQL、收購SUN得到Java | .NET |
?????????而一旦Oracle收購了SUN公司之后,市場上的編程語言的格局,變?yōu)槿夜?#xff1a;Microsoft、Oracle、Adobe(FLEX,Flash編程),不過這幾年Adobe也比較悲慘,被Microsoft、Oracle、Apple,一起抵制Flash。
?????????那么從Java的開發(fā)地位而言,也分為以下的幾個(gè)方面:
???????????????????·?J2SE(2005年之后更名為JAVA SE):指的是進(jìn)行桌面單機(jī)程序的開發(fā);
???????????????????·?J2EE(2005年之后更名為JAVA EE):指的是企業(yè)平臺開發(fā);
???????????????????·?J2ME(2005年之后更名為JAVA ME):進(jìn)行嵌入式開發(fā)。
?????????JAVA EE:只要是進(jìn)行大型的企業(yè)項(xiàng)目開發(fā),像銀行、電信等服務(wù)都會使用此架構(gòu);
?????????JAVA ME:Nokia盛行的時(shí)候,Java的手機(jī)游戲推廣的比較好,但是Java ME并沒有得到很好的發(fā)展,而是后來被Android所取代了,而到Android時(shí)代,可以說是真正的將Java最早的嵌入式開發(fā)的設(shè)想給做出來的,并且有了大量的游戲和軟件出現(xiàn)。而Android的出現(xiàn),正式的標(biāo)志著移動互聯(lián)網(wǎng)時(shí)代的開啟。
?????????但是對于Android開發(fā)而言,國內(nèi)現(xiàn)在可以做手機(jī)的人有,但是可以做整體的人很少。
?????????Java語言的本身的特點(diǎn)如下:
1、???Java語言足夠簡單,相對于其他的任何語言而言,是很容易學(xué)的(入門簡單);
2、???Java避免了C/C++之中復(fù)雜的指針關(guān)系,而使用了更為簡單的引用方式來進(jìn)行內(nèi)存?zhèn)鬟f;
3、???Java是為數(shù)不多的支持多線程開發(fā)的編程語言;
4、???Java提供了自動的垃圾收集機(jī)制,可以定期釋放出無用的垃圾空間;
5、???Java語言的安全性較高;
6、???Java最大的特點(diǎn)是具備可移植性,即:同一個(gè)程序在不同的操作系統(tǒng)上都可以運(yùn)行。
?????????如果從編程語言的角度而言,應(yīng)該分為兩種:
???????????????????·?編譯型:如果學(xué)習(xí)過C的同學(xué)應(yīng)該知道,編譯之后會形成出一個(gè)*.exe的文件;
???????????????????·?解釋型:像ASP語言那樣,直接將代碼放到服務(wù)器上進(jìn)行解釋。
?????????但是Java本身卻屬于兩種類型的集合,觀察圖形:
?
?????????通過如上的圖形可以發(fā)現(xiàn),任何一個(gè)*.java程序首先必須經(jīng)過編譯,編譯之后會形成一個(gè)*.class的文件(字節(jié)碼文件),而后在電腦上執(zhí)行的不是*.java,而是編譯之后的*.class文件(這個(gè)文件可以理解為“加密”的文件),但是解釋程序的電腦并不是一臺真正意義上的電腦,而是一臺由軟件和硬件模擬出來的電腦?——?Java虛擬機(jī)。
?
?????????Java虛擬機(jī)的最大作用是起到平臺的支持上,通過如上的圖形可以發(fā)現(xiàn),所有要解釋的程序在JVM上執(zhí)行,但是由不同版本的JVM去匹配不同的操作系統(tǒng),這樣只要JVM的支持不變,程序可以任意的在不同的操作系統(tǒng)上運(yùn)行。但是這種運(yùn)行方式很明顯沒有直接運(yùn)行在操作系統(tǒng)上性能高,不過隨著硬件技術(shù)的發(fā)展,這些問題幾乎可以忽略了。?
3.2、JDK的安裝與配置(重點(diǎn))
?????????如果要進(jìn)行Java的程序開發(fā),必須有JDK的支持,JDK指的是Java的開發(fā)工具,本次使用的版本是JDK 1.7(不過在實(shí)際的開發(fā)之中,可能JDK 1.5還是主流使用版本),可以直接登錄www.oracle.com(www.sun.com)上進(jìn)行下載。
???????在進(jìn)行JDK的安裝之前,建議關(guān)閉本機(jī)的病毒防火墻。?
?????????為了日后的方便維護(hù),所以將JDK安裝到:d:\java目錄下。?
?????????安裝JDK的過程之中還提示是否安裝JRE(Java運(yùn)行時(shí)解釋),主要的功能是解釋*.class程序的,此處的安裝目的是要更新本機(jī)的JRE版本,不過JDK本身是可以解釋程序的。?
?????????對于Java程序開發(fā)而言,主要會使用JDK的兩個(gè)命令:javac.exe、java.exe。路徑:D:\Java\jdk?1.7.0?_09\bin。但是這些命令由于不屬于windows自己的命令,所以要想使用,就需要進(jìn)行路徑配置。
?????????配置步驟:【我的電腦】?è?【屬性】?è?【高級】?è?【環(huán)境變量】?è?【添加新的PATH】,不同的PATH之間使用“;”分隔,修改如下:
?
3.3、第一個(gè)Java程序:永遠(yuǎn)的“Hello World !”(重點(diǎn))
?????????第一個(gè)要測試的程序永遠(yuǎn)從“Hello World !”開始,Java程序的文件后綴必須是*.java。
范例:定義一個(gè)新的文件:Hello.java
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println("Hello World !") ; ?????????} } |
?????????當(dāng)一個(gè)*.java程序編寫完成之后,可以按照如下的步驟執(zhí)行:
???????????????????·?編譯程序,通過命令行進(jìn)入到程序所在的路徑,執(zhí)行:javac?Hello.java,形成“Hello.class”(字節(jié)碼);
???????????????????·?解釋程序,對生成的Hello.class在JVM上執(zhí)行,輸入:java Hello。
?????????在正常的情況下,本程序已經(jīng)可以執(zhí)行了,但是現(xiàn)在發(fā)現(xiàn)出現(xiàn)了如下的錯(cuò)誤提示:
| Exception in thread "main" java.lang.UnsupportedClassVersionError: Hello (Unsupported major.minor version 51.0) |
?????????直接提示“UnsupportedClassVersionError”(不支持的類版本錯(cuò)誤),現(xiàn)在編譯的時(shí)候使用的是JDK 1.7,那么解釋的時(shí)候也應(yīng)該JDK 1.7,那么來驗(yàn)證一下當(dāng)前的JRE版本,輸入:java -version,信息如下:
| java version "?1.4.2?_03" Java(TM) 2 Runtime Environment, Standard Edition (build?1.4.2?_03-b02) Java HotSpot(TM) Client VM (build?1.4.2?_03-b02, mixed mode) |
?????????發(fā)現(xiàn)現(xiàn)在解釋程序的版本是JRE 1.4,因?yàn)?/span>Oracle?10g?安裝之后,本身就默認(rèn)提供了JDK,而這個(gè)JDK在path中的配置如下:
| D:\oracle\product\?10.1.0?\db_1\jre\1.4.2\bin\client; D:\oracle\product\?10.1.0?\db_1\jre\1.4.2\bin; |
?????????那么現(xiàn)在有兩種解決方法:
???????????????????·?方法一:刪除掉Oracle的所有JRE配置,太殘忍了;
??????????????????·?方法二:由于path的內(nèi)容采用的是順序讀取方式,可以將新的配置寫在最前面,修改PATH:
?
3.4、第一個(gè)程序解釋(重點(diǎn))
?????????第一個(gè)程序編寫完成之后,下面來對此程序的組成進(jìn)行說明:
1、???關(guān)于類的定義:
?????????所有的java程序一定要被類所管理,那么定義類的格式如下:
| [public] class?類名稱?{} |
?????????對于類的定義現(xiàn)在就有了兩種形式:
???????????????????·?public class定義:類名稱必須和文件名稱保持一致,在一個(gè)*.java之中只能有一個(gè)public class;
·?class定義:類名稱可以和文件名稱不一致,但是生成的是class定義的名稱,在一個(gè)*.java程序之中可以同時(shí)存在多個(gè)class的定義,編譯之后會分為不同的*.class文件;
?????????額外聲明:
·?在講課過程之中為了方便理解,所以在一個(gè)*.java程序之中會同時(shí)存在public class和class定義的類,而在日后的自己編寫的代碼過程之中,一個(gè)*.java文件之中基本上都只包含一個(gè)public class,不會有其他class單獨(dú)定義;
·?所有類名稱必須有自己的命名規(guī)范,每一個(gè)單詞的開頭首字母大寫,例如:TestDemo;
2、???主方法
?????????主方法表示的是一個(gè)程序起點(diǎn),要放在一個(gè)類之中,主方法定義格式如下:
| public static void main(String args[]) {} |
?????????這些字母的組成是完全固定的,今天先記住,以后進(jìn)行完整的講解。
?????????額外聲明:日后主方法所在的類都將其稱為主類,一般主類都使用public class聲明。
?????????今天的所有程序都在主類之中編寫,而至于類是什么,以后再介紹。
3、???系統(tǒng)輸出
?????????可以直接在屏幕上顯示輸出信息,操作語法:
| 輸出后加換行: | System.out.println(輸出內(nèi)容) ; |
| 輸出后不加換行: | System.out.print(輸出內(nèi)容) ; |
?????????這個(gè)基本的格式是Java程序運(yùn)行的基本結(jié)構(gòu),一定要記下來。
3.5、classpath(重點(diǎn))
?????????如果說現(xiàn)在要想執(zhí)行某一個(gè)java程序,那么一定要進(jìn)入到程序所在的路徑下才可以執(zhí)行,例如:現(xiàn)在程序的路徑是在d:\testjava文件夾之中,如果要想執(zhí)行這個(gè)文件夾之中的所有的*.class文件,則需要進(jìn)入到此目錄下執(zhí)行,那么如果現(xiàn)在希望在不同的目錄下也可以執(zhí)行呢?那么會直接提示用戶,找不到這個(gè)類。那么現(xiàn)在非要執(zhí)行的話,則必須配置CLASSPATH,配置語法如下:
| SET CLASSPATH=*.class文件所在的路徑 |
范例:將CLASSPATH配置到d:\testjava目錄之中
| SET CLASSPATH=d:\testjava |
?????????此時(shí),再次執(zhí)行“java Hello”命令,發(fā)現(xiàn)程序可以正常的執(zhí)行完畢。而通過這個(gè)演示也可以得出一個(gè)結(jié)論:當(dāng)使用java命令執(zhí)行一個(gè)類的時(shí)候,會首先通過CLASSPATH找到指定的路徑,而后在此路徑下加載所需要的*.class文件。
?????????但是,如果像本程序這樣,到處亂指CLASSPATH也是不可能的,最好的做法還是從當(dāng)前所在的路徑下加載所需要的*.class文件比較合適,那么這個(gè)時(shí)候往往將CLASSPATH設(shè)置為“.”。
| SET CLASSPATH=. |
?????????這個(gè)“.”也屬于默認(rèn)的配置,之所以要強(qiáng)調(diào)“.”的問題主要原因是在于,日后可能有一些其他的程序自動的修改本機(jī)的CLASSPATH,那么這個(gè)時(shí)候只能依靠手工配置,不過以上的配置方式都只是針對于一個(gè)命令行完成的,如果要針對于所有的命令行方式完成,則就需要增加一個(gè)新的環(huán)境屬性。
配置步驟:【我的電腦】?è?【屬性】?è?【高級】?è?【環(huán)境變量】?è?【新建】?è?【輸入屬性的名稱和內(nèi)容】
?
面試題:請解釋PATH和CLASSPATH的區(qū)別?
?????????·?PATH:是操作系統(tǒng)的環(huán)境屬性,指的是可以執(zhí)行命令的程序路徑;
?????????·?CLASSPATH:是所有*.class文件的執(zhí)行路徑,java命令執(zhí)行的時(shí)候?qū)⒗么寺窂郊虞d所需要的*.class文件。
3.6、標(biāo)識符和關(guān)鍵字(重點(diǎn))
?????????在程序之中用于定義名稱的都表示標(biāo)識符,例如:類的名稱、方法名稱或變量名稱等等,在java之中的標(biāo)識符的定義格式:由字母、數(shù)字、_、$所組成,其中不能以數(shù)字開頭,不能是Java中的保留字。
?????????但是在這里面需要提示的是,所有的標(biāo)識符之中用戶不要去使用“$”定義,而且標(biāo)識符一定要有自身的意義,不要隨意起名稱,一般都建議使用英文字母組成,例如:studetName,但是在定義變量(標(biāo)識符)或方法的時(shí)候也有一個(gè)明確的要求:第一個(gè)單詞的首字母小寫,之后每個(gè)單詞的首字母大寫,例如:studentName。而在定義類名稱的時(shí)候(標(biāo)識符),每一個(gè)單詞的首字母大寫,例如:TestDemo。
?????????關(guān)鍵字也被稱為保留字,指的是一些有特殊含義的內(nèi)容,在定義標(biāo)識符的時(shí)候不能夠去使用,而Java之中的保留字定義如下:
?????????一共有49個(gè)關(guān)鍵字,但是嚴(yán)格來講,這些關(guān)鍵有如下幾個(gè)說明:
???????????????????·?未使用到的關(guān)鍵字:goto(無條件跳轉(zhuǎn))、const(定義常量);
???????????????????·?有特殊含義的標(biāo)記(嚴(yán)格來講不算關(guān)鍵字):true、false、null;
???????????????????·?JDK 1.4之后引入的新關(guān)鍵字:assert;
???????????????????·?JDK 1.5之后引入的新關(guān)鍵字:enum。
3.7、數(shù)據(jù)類型(重點(diǎn))
?????????任何一門語言都是由若干種不同的數(shù)據(jù)類型所組成,在java之中數(shù)據(jù)類型一共分為兩類:
???????????????????·?基本數(shù)據(jù)類型(數(shù)值操作):?????????????????????????????????????默認(rèn)值
????????????????????????????|-?數(shù)值型:
?????????????????????????????????????|-?整型:byte、short、int、long;????????è?????0
?????????????????????????????????????|-?浮點(diǎn)型:float、double;????????????????????è?????0.0
????????????????????????????|-?字符型:char;????????????????????????????????????????????è?????'\u0000'
????????????????????????????|-?布爾型:boolean;??????????????????????????????????????è?????false
???????????????????·?引用數(shù)據(jù)類型(內(nèi)存操作):
????????????????????????????|-?數(shù)組、類、接口;???????????????????????????????????????è?????null
?????????今天主要講解基本類型的數(shù)據(jù),而且每種基本數(shù)據(jù)類型也都有其自己的保存數(shù)據(jù)范圍,這些范圍如下。
???????????????????·?byte的數(shù)據(jù)長度是8位,-128 ~ 127;
???????????????????·?int數(shù)據(jù)的長度為32位,-2147483648 ~ 2147483647;
???????????????????·?double可以保存的數(shù)據(jù)范圍是最大的。
?
?????????但是對于以上給出的基本數(shù)據(jù)類型的定義,如果從實(shí)際的開發(fā)角度上,以下的幾種類型最為常用:
???????????????????·?int型:只要是看見了整型的定義,其類型都是int;
???????????????????·?double型:只要是看見了小數(shù)的定義,其類型都是double;
???????????????????·?byte型:日后進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候使用此類型,講解到IO,和編碼轉(zhuǎn)換的操作上使用;
???????????????????·?boolean:用于程序的邏輯操作使用;
???????????????????·?long:表示日期時(shí)間、表示文件長度的時(shí)候。
3.7.1?、整型
?????????整型就表示一個(gè)基本的整數(shù),可以直接使用int定義,而且在java之中默認(rèn)的一個(gè)整數(shù),其類型就是int。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 10 ;?// 10是一個(gè)整數(shù),就屬于int型 ???????????????????int result = x * 2 ; // int型?* int型?= int型 ???????????????????System.out.println(result) ; ?????????} } |
?????????但是,對于以上的操作代碼,下面有兩點(diǎn)說明:
???????????????????·?說明一:請保持良好的編程習(xí)慣,在每一個(gè)操作之中都加上一個(gè)“?”。
???????????????????·?說明二:所有的變量在使用之前一定要為其賦予默認(rèn)值。
范例:錯(cuò)誤的操作
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x ;??????????//?按照道理來講,x是int型,沒有賦值,結(jié)果應(yīng)該是0 ???????????????????System.out.println(x) ; ?????????} } |
?????????因?yàn)?/span>x變量只定義了而未被初始化,修改程序:
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x ;??????????//?按照道理來講,x是int型,沒有賦值,結(jié)果應(yīng)該是0 ???????????????????x = 10 ;??????//?在使用之前為x變量賦值 ???????????????????System.out.println(x) ; ?????????} } |
?????????但是這種代碼的成功編譯只能針對于JDK 1.5之上的版本完成,而在JDK 1.4之前,以上的代碼是錯(cuò)誤的,是不能使用的,所以為了防止這種版本的差異,明確給出要求:所有的變量一定要在其定義的時(shí)候直接賦值。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 10 ;??????????//?定義變量給出默認(rèn)值 ???????????????????System.out.println(x) ; ?????????} } |
?????????int型數(shù)據(jù)本身也是有自己的保存范圍的,那么如果說現(xiàn)在操作的數(shù)據(jù)已經(jīng)超過了其int的范圍呢?
?????????為了方便驗(yàn)證,下面給出兩個(gè)操作,這兩個(gè)操作日后講解,可以通過它得出int的最大值和最小值:
???????????????????·?取得int的最大值:Integer.MAX_VALUE;
???????????????????·?取得int的最小值:Integer.MIN_VALUE。
3.8、運(yùn)算符(重點(diǎn))
?????????+、-、*、/都屬于運(yùn)算符,在Java之中運(yùn)算符太多了。并且這些運(yùn)算符之間是存在著優(yōu)先級的,可是正常人,真的不怎么背它。但是在現(xiàn)實(shí)之中比較無奈的事,以下的代碼會經(jīng)常出現(xiàn)。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 10 ; ???????????????????int y = 20 ; ???????????????????int result = ++ x * y -- / y * 10 + ++x * -- y ; ???????????????????System.out.println(result) ; ?????????} } |
?????????以上的程序本人絕對不會分析,一般國家的計(jì)算機(jī)等級考試都這些爛玩意。如果非要有人寫,你可以心里把這個(gè)人的祖宗十八代一代代的使勁罵,包括這個(gè)人可能產(chǎn)生的后代也要狠狠的罵,譬如:孩子沒屁眼。
?
3.8.1?、三目運(yùn)算符
?????????三目運(yùn)算是一種賦值運(yùn)算符,其語法格式如下:
| 數(shù)據(jù)類型?變量?=?布爾表達(dá)式?滿足條件設(shè)置的內(nèi)容:不滿足條件設(shè)置的內(nèi)容?; |
范例:將兩個(gè)int型數(shù)據(jù)大的數(shù)值賦值給變量
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 10 ; ???????????????????int y = 20 ; ???????????????????int?result = x > y ? x : y ; ???????????????????System.out.println(result) ; ?????????} } |
?????????當(dāng)然,對于這樣的計(jì)算,也可以通過if…else完成。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 10 ; ???????????????????int y = 20 ; ???????????????????int result = 0 ;??????//?定義變量,保存結(jié)果 ???????????????????if (x > y) { ????????????????????????????result = x ; ???????????????????} else { ????????????????????????????result = y ; ???????????????????} ???????????????????System.out.println(result) ; ?????????} } |
?????????這樣的三目運(yùn)算,在日后從事的開發(fā)之中,一定會出現(xiàn),最近的出現(xiàn)時(shí)間斷:4周之后。
3.8.2?、邏輯運(yùn)算符
?????????邏輯運(yùn)算一共包含三種:與(多個(gè)條件一起滿足)、或(多個(gè)條件有一個(gè)滿足)、非(true變false,false變true)。
1、???與操作:表示將若干個(gè)條件一起進(jìn)行連接判斷,同時(shí)滿足返回true,有一個(gè)不滿足返回false,對于與操作有兩種運(yùn)算符:&、&&。
范例:普通與操作,&
| public class Hello { ?????????public static void main(String args[]) { ???????????????????if (1 == 2 & 10 / 0 == 0) { ????????????????????????????System.out.println("條件滿足。") ; ???????????????????} ?????????} } |
?????????此時(shí)程序出現(xiàn)了錯(cuò)誤,而這個(gè)錯(cuò)誤是由“10 / 0 ==?0”?造成的,那么證明所有的條件都進(jìn)行了驗(yàn)證,但是與操作的特點(diǎn)是屬于?——?有一個(gè)條件不滿足,結(jié)果就是false,那么如果前面已經(jīng)存在了不滿足條件的運(yùn)算,后面不管有多少個(gè)滿足的條件,其結(jié)果都是false,那么就真的沒有必要進(jìn)行判斷了,這個(gè)時(shí)候可以換一個(gè)符號?——?短路與;
范例:短路與操作,&&
| public class Hello { ?????????public static void main(String args[]) { ???????????????????if (1 == 2 && 10 / 0 == 0) { ????????????????????????????System.out.println("條件滿足。") ; ???????????????????} ?????????} } |
?????????因?yàn)榍懊娴臈l件(1 == 2)的結(jié)果是false,那么后面的就沒有必要再繼續(xù)進(jìn)行判斷了,最終的結(jié)果就是false。
2、???或操作:若干個(gè)條件一起判斷,其中只要有一個(gè)返回true,結(jié)果就是true,只有都返回false的時(shí)候結(jié)果才是false,或操作有兩種運(yùn)算:|、||
范例:普通或操作,|
| public class Hello { ?????????public static void main(String args[]) { ???????????????????if (1 == 1 | 10 / 0 == 0) { ????????????????????????????System.out.println("條件滿足。") ; ???????????????????} ?????????} } |
?????????使用普通或操作的過程之中,發(fā)現(xiàn)即使前面的條件滿足了,后面的也進(jìn)行正常的判斷,但是后面的判斷似乎沒有任何的意義,因?yàn)椴还芊祷厥呛畏N結(jié)果都不會影響最終的結(jié)果就是true。
范例:短路或操作,||
| public class Hello { ?????????public static void main(String args[]) { ???????????????????if (1 == 1 || 10 / 0 == 0) { ????????????????????????????System.out.println("條件滿足。") ; ???????????????????} ?????????} } |
?????????可以發(fā)現(xiàn),前面的條件(1 == 1)滿足了就會返回true,那么不管后面是何條件最終的結(jié)果都是true。
3.8.3?、位運(yùn)算符(了解)
?????????位運(yùn)算在Java之中存在:&、|、^、~、>>、<<、>>>,但是如果要想進(jìn)行位運(yùn)算之前,那么首先必須先知道如何將十進(jìn)制數(shù)據(jù)變?yōu)槎M(jìn)制數(shù)據(jù),原則:數(shù)據(jù)除2取余,最后倒著排列,例如,下面演示一個(gè)操作。
?????????????????19???????????????è?????十進(jìn)制???????,?????00000000 00000000?00000000 0010011
?????????÷?????2??????
???????????????????9?????????????????……???????????1???????↑
?????????÷?????2??????
???????????????????4?????????????????……???????????1???????↑
?????????÷?????2??????
???????????????????2?????????????????……???????????0???????↑
?????????÷?????2??????
???????????????????1?????????????????……???????????0???????↑
?????????÷?????2??????
???????????????????0?????????????????……???????????1???????↑
范例:觀察位與運(yùn)算
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 19 ; ???????????????????int y = 20 ; ???????????????????System.out.println(x & y) ; ?????????} } |
?????????19的二進(jìn)制數(shù)據(jù):????00000000 00000000 00000000 0010011
?????????20的二進(jìn)制數(shù)據(jù):????00000000 00000000 00000000 0010100
???????????????????&的結(jié)果:?????????00000000 00000000 00000000 0010000???????????????????è?????16
范例:觀察或操作
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 19 ; ???????????????????int y = 20 ; ???????????????????System.out.println(x | y) ; ?????????} } |
?????????19的二進(jìn)制數(shù)據(jù):????00000000 00000000 00000000 0010011
?????????20的二進(jìn)制數(shù)據(jù):????00000000 00000000 00000000 0010100
???????????????????|結(jié)果:???????????????00000000 00000000 00000000 0010111???????????????????è?????23
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 19 ; ???????????????????System.out.println(x >>> 2) ; ?????????} } |
?????????19的二進(jìn)制數(shù)據(jù):????00000000 00000000 00000000 0010011
?????????向右邊移位:?????????????00000000 00000000 00000000 0000100??????????è?????4
面試題:請問如何可以更快的計(jì)算出2的3次方
?????????向左邊移位2位。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 2 ; ???????????????????System.out.println(x << 2) ; ?????????} } |
?????????2到二進(jìn)制數(shù)據(jù):??????00000000 00000000?00000000 00000010;
?????????向左邊移位:?????????????00000000 00000000?00000000 00001000;????è?????8
面試題:請解釋&和&&、|和||的區(qū)別?
?????????·?邏輯運(yùn)算上:
???????????????????|- &:表示普通與,所有的判斷條件都要依次執(zhí)行;
???????????????????|- &&:表示短路與,若干個(gè)條件,如果前面的條件返回了false,那么后面的不再判斷,結(jié)果就是false;
???????????????????|- |:表示普通或,所有的判斷條件都要依次執(zhí)行;
???????????????????|- ||:表示短路或,若干個(gè)條件,如果前面的條件返回了true,后面的不再判斷,結(jié)果就是true。
?????????·?位運(yùn)算:&表示位與計(jì)算、|表示位或的計(jì)算。
?????????除了這兩道面試題之外,任何的二進(jìn)制數(shù)據(jù)的操作和先階段沒有任何的關(guān)系,大概清楚含義即可,不用做特別深入的研究,如果非要研究,可以參考《匯編語言程序設(shè)計(jì)》一書。
3.9、程序結(jié)構(gòu)(重點(diǎn))
?????????程序結(jié)構(gòu)在語言之中一共分為三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。
3.9.1?、順序結(jié)構(gòu)
?????????所有的代碼按照先后的順序依次進(jìn)行執(zhí)行,例如,如下代碼:
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int x = 2 ; ???????????????????x = x + 2 ; ???????????????????System.out.println(x) ; ?????????} } |
3.9.2?、分支結(jié)構(gòu)(選擇結(jié)構(gòu))
?????????就相當(dāng)于提供了一些條件判斷,根據(jù)判斷的結(jié)果來選擇執(zhí)行何種操作,對于分支結(jié)構(gòu)主要操作語法:if、if..else、if..else if…else,這三種結(jié)構(gòu)的完整語法如下:
| if語法: | if…else語法: | if…else if…else語法: |
| if (布爾表達(dá)式) { ?????????條件滿足時(shí)執(zhí)行的程序?; } | if (布爾表達(dá)式) { ?????????條件滿足時(shí)執(zhí)行的程序?; } else { ?????????條件不滿足時(shí)執(zhí)行的程序?; } | if (布爾表達(dá)式1) { ?????????條件滿足時(shí)執(zhí)行的程序?; } else if (布爾表達(dá)式2) { ?????????條件滿足時(shí)執(zhí)行的程序?; } ... else { ?????????所有條件都不滿足時(shí)執(zhí)行的程序?; } |
范例:if語句
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int age = 16 ; ???????????????????if (age < 18) { ????????????????????????????System.out.println("少兒不宜觀看。") ; ???????????????????} ?????????} } |
范例:if..else語句
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int age = 26 ; ???????????????????if (age < 18) { ????????????????????????????System.out.println("少兒不宜觀看。") ; ???????????????????} else { ????????????????????????????System.out.println("青年觀看的教育片。") ; ???????????????????} ?????????} } |
范例:if…else if…else操作
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int age = 260 ; ???????????????????if (age <= 18) { ????????????????????????????System.out.println("您屬于青少年。") ; ???????????????????} else if (age > 18 && age <= 50) { ????????????????????????????System.out.println("您屬于青狀年。") ; ???????????????????} else if (age > 50 && age <250) { ????????????????????????????System.out.println("您屬于老年。") ; ???????????????????} else { ????????????????????????????System.out.println("妖怪,您不是人。") ; ???????????????????} ?????????} } |
?????????但是對于多條件判斷使用if..else if…else是可以判斷布爾條件的,如果是多數(shù)值判斷,可以通過switch完成,語法:
| switch (判斷值) { ?????????case?數(shù)值1: ???????????????????滿足此數(shù)值時(shí)執(zhí)行的語句?; ???????????????????[break ;] ?????????case?數(shù)值2: ???????????????????滿足此數(shù)值時(shí)執(zhí)行的語句?; ???????????????????[break ;] ?????????case?數(shù)值3: ???????????????????滿足此數(shù)值時(shí)執(zhí)行的語句?; ???????????????????[break ;] ???????????????????... ?????????default: ???????????????????所有條件都不滿足時(shí)執(zhí)行的語句?; ???????????????????[break ;] } |
?????????對于switch操作,在最早主要使用的是整型或者是字符來完成。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int ch = 0 ; ???????????????????switch(ch) { ????????????????????????????case 0 : ?????????????????????????????????????System.out.println("數(shù)值是0。") ; ?????????????????????????????????????break ; ????????????????????????????case 1 : ?????????????????????????????????????System.out.println("數(shù)值是1。") ; ?????????????????????????????????????break ; ????????????????????????????case 2 : ?????????????????????????????????????System.out.println("數(shù)值是2。") ; ?????????????????????????????????????break ; ????????????????????????????default : ?????????????????????????????????????System.out.println("沒有條件滿足。") ; ?????????????????????????????????????break ; ???????????????????} ?????????} } |
?????????但是對于switch隨著版本的不同,也有所更改,JDK 1.5之后也可以利用枚舉作為判斷條件,而JDK 1.7之后,switch里面也可以判斷字符串了(String),這個(gè)可以理解為JDK 1.7才支持的新功能。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????String str = "two" ; ???????????????????switch(str) { ????????????????????????????case "one" : ?????????????????????????????????????System.out.println("壹") ; ?????????????????????????????????????break ; ????????????????????????????case "two" : ?????????????????????????????????????System.out.println("貳") ; ?????????????????????????????????????break ; ????????????????????????????case "three" : ?????????????????????????????????????System.out.println("叁") ; ?????????????????????????????????????break ; ????????????????????????????default : ?????????????????????????????????????System.out.println("沒有") ; ?????????????????????????????????????break ; ???????????????????} ?????????} } |
3.9.3?、循環(huán)結(jié)構(gòu)
?????????循環(huán)的概念主要指的是某一塊代碼可以被重復(fù)執(zhí)行多次。而循環(huán)的操作,分為兩種語法:while循環(huán)、for循環(huán)。
1、???while循環(huán):
| do…while(98%不會看見使用): | while(布爾表達(dá)式): |
| do { ?????????循環(huán)體?; ?????????循環(huán)條件修改?; } while (循環(huán)判斷) ; | while (循環(huán)判斷) { ?????????循環(huán)體?; ?????????循環(huán)條件修改?; } |
?????????通過這樣的語法就可以發(fā)現(xiàn),實(shí)際上do..while表示先執(zhí)行后判斷,而while循環(huán)表示先判斷后執(zhí)行,如果循環(huán)條件都不滿足的情況下,do..while至少執(zhí)行一次,而while一次都不會執(zhí)行。
?????????通過以上給出的兩個(gè)格式,應(yīng)該可以發(fā)現(xiàn)出循環(huán)結(jié)構(gòu)的特點(diǎn):
???????????????????·?循環(huán)的結(jié)束判斷;
???????????????????·?每次循環(huán)體執(zhí)行的時(shí)候,循環(huán)條件要求修改。
范例:使用while兩種循環(huán)實(shí)現(xiàn)1 ~ 100的累加
| do…while: | while(布爾表達(dá)式): |
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int sum = 0 ;????????//?保存累加的結(jié)果 ???????????????????int x = 1 ;???//?進(jìn)行結(jié)束的判斷 ???????????????????do { ????????????????????????????sum += x ;?//?累加 ????????????????????????????x ++ ;?????????// x自增長 ???????????????????} while (x <= 100) ;?????//?滿足則繼續(xù)執(zhí)行 ???????????????????System.out.println(sum) ; ?????????} } | public class Hello { ?????????public static void main(String args[]) { ???????????????????int sum = 0 ;????????//?保存累加的結(jié)果 ???????????????????int x = 1 ;???//?進(jìn)行結(jié)束的判斷 ???????????????????while (x <= 100) { ????????????????????????????sum += x ;?//?累加 ????????????????????????????x ++ ;?????????// x自增長 ???????????????????} ???????????????????System.out.println(sum) ; ?????????} } |
2、???for循環(huán):
?????????for循環(huán)的最大特點(diǎn)是已經(jīng)明確的知道了循環(huán)次數(shù),for循環(huán)的語法如下:
| for (循環(huán)的初始值?;?循環(huán)的判斷條件?;?循環(huán)條件的修改) { ?????????循環(huán)體?; } |
范例:實(shí)現(xiàn)1 ~ 100的累加
| 推薦作法: | 不推薦作法: |
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int sum = 0 ;????????//?保存累加的結(jié)果 ???????????????????for (int x = 1 ; x <= 100 ; x ++) { ????????????????????????????sum += x ; ???????????????????} ???????????????????System.out.println(sum) ; ?????????} } | public class Hello { ?????????public static void main(String args[]) { ???????????????????int sum = 0 ;????????//?保存累加的結(jié)果 ???????????????????int x = 1 ;??//?初始值 ???????????????????for ( ; x <= 100 ; ) { ????????????????????????????sum += x ; ????????????????????????????x ++ ;?????????//?循環(huán)條件修改 ???????????????????} ???????????????????System.out.println(sum) ; ?????????} } |
?????????個(gè)人總結(jié),關(guān)于循環(huán)的出現(xiàn)情況:
???????????????????·?while循環(huán):在不確定循環(huán)次數(shù),但是確定循環(huán)結(jié)束條件的情況下使用;
???????????????????·?for循環(huán):確定循環(huán)次數(shù)的情況下使用。
?????????對于循環(huán)而言,也可以進(jìn)行循環(huán)的嵌套操作。
范例:輸出一個(gè)乘法口訣表,需要兩層循環(huán)
| public class Hello { ?????????public static void main(String args[]) { ???????????????????for (int x = 1 ; x <= 9 ; x ++) {???????//?控制循環(huán)行 ????????????????????????????for (int y = 1; y <= x ; y ++ ) { ?????????????????????????????????????System.out.print(x + "*" + y + "=" + x * y + "\t") ; ????????????????????????????} ????????????????????????????System.out.println() ;????//?換行 ???????????????????} ?????????} } |
范例:打印三角型
????????
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int line = 9 ;?????????//?打印9行 ???????????????????for (int x = 0 ; x < 9 ; x ++) {?????????//?循環(huán)次數(shù),控制行 ????????????????????????????for (int y = 0 ; y < line - x ; y ++) { ?????????????????????????????????????System.out.print(" ") ; ????????????????????????????} ????????????????????????????for (int y = 0 ; y <= x ; y ++) { ?????????????????????????????????????System.out.print("* ") ; ????????????????????????????} ????????????????????????????System.out.println() ; ???????????????????} ?????????} } |
?????????循環(huán)操作的基本功能就是重復(fù)執(zhí)行一段代碼,但是以上的循環(huán)操作,只是作為學(xué)習(xí)過程之中的程序,循環(huán)基本的邏輯結(jié)構(gòu),實(shí)際之中意義不大。
3.10、方法(重點(diǎn))
?????????如果說之前的所有語法和各個(gè)語言類似,那么現(xiàn)在的方法就稍微特殊一些了。
3.10.1?、方法的基本定義
?????????方法在很多地方又被稱為函數(shù)(Java之中的英文單詞是Method,而其他語言之中的英文單詞是Function),方法是一段可以被重復(fù)調(diào)用代碼塊。但是需要說明的是,今天所講解的方法,本身是在主類之中定義的,并且由主方法調(diào)用的。所以方法的定義格式為:
| public static?返回值類型?方法名稱?(參數(shù)列表) { ?????????[return [返回值] ;] } |
?????????對于返回值類型有兩種:
???????????????????·?void:表示此方法沒有返回值;
???????????????????·?數(shù)據(jù)類型:基本類型和引用類型。
范例:定義一個(gè)無參的無返回值的方法
| public class Hello { ?????????public static void main(String args[]) { ???????????????????printInfo() ;?????????//?主方法之中直接調(diào)用 ???????????????????printInfo() ;?????????//?主方法之中直接調(diào)用 ???????????????????printInfo() ;?????????//?主方法之中直接調(diào)用 ?????????} ?????????public static void printInfo() {?????????//?方法名稱 ???????????????????System.out.println("*******************") ; ???????????????????System.out.println("*???Hello World???*") ; ???????????????????System.out.println("*******************") ; ?????????} } |
?????????方法名稱的命名要求|:第一個(gè)單詞的首字母小寫,之后每個(gè)單詞的首字母大寫,例如:printInfo()。
范例:定義一個(gè)有參的,無返回值方法,例如:將之前打印三角形程序定義唯一個(gè)方法,每次只需要傳入打印的行即可。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????printInfo(3) ;???????//?主方法之中直接調(diào)用 ???????????????????printInfo(5) ;???????//?主方法之中直接調(diào)用 ???????????????????printInfo(9) ;???????//?主方法之中直接調(diào)用 ?????????} ?????????public static void printInfo(int line) {???????//?方法名稱 ???????????????????for (int x = 0 ; x < line ; x ++) {??????//?循環(huán)次數(shù),控制行 ????????????????????????????for (int y = 0 ; y < line - x ; y ++) { ?????????????????????????????????????System.out.print(" ") ; ????????????????????????????} ????????????????????????????for (int y = 0 ; y <= x ; y ++) { ?????????????????????????????????????System.out.print("* ") ; ????????????????????????????} ????????????????????????????System.out.println() ; ???????????????????} ?????????} } |
?????????方法負(fù)責(zé)完成某一特定功能,而后用戶就可以根據(jù)方法定義的格式進(jìn)行方法的調(diào)用。
范例:定義一個(gè)有參有返回值的方法
?????????·?定義一個(gè)方法,用于判斷一個(gè)數(shù)字是奇數(shù)還是偶數(shù)。很明顯,這個(gè)方法的返回值類型應(yīng)該定義為boolean比較合適,而且如果一個(gè)方法上返回的是boolean型數(shù)據(jù),則這個(gè)方法的名稱應(yīng)該以isXxx()的形式命名。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????if (isType(3)) { ????????????????????????????System.out.println("偶數(shù)") ; ???????????????????} else { ????????????????????????????System.out.println("奇數(shù)") ; ???????????????????} ?????????} ?????????// true表示是偶數(shù),false表示為奇數(shù) ?????????public static boolean isType(int num) { ???????????????????return num % 2 == 0; ?????????} } |
?????????講解到方法的時(shí)候需要額外強(qiáng)調(diào)一點(diǎn),如果一個(gè)方法使用了void聲明,理論上此方法不能夠返回?cái)?shù)據(jù),但是這個(gè)方法卻可以通過return結(jié)束調(diào)用(即:return之后的程序不再執(zhí)行)。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????fun(10) ; ???????????????????fun(30) ; ?????????} ?????????public static void fun(int num) { ???????????????????if (num == 10) { ????????????????????????????return ;???????//?結(jié)束方法調(diào)用 ???????????????????} ???????????????????System.out.println("數(shù)值:" + num) ; ?????????} } |
?????????而這一結(jié)束的操作和循環(huán)控制的break與continue是一樣的。
???????????????????·?break:表示的是退出整個(gè)循環(huán);
???????????????????·?continue:表示的是退出一次循環(huán);
| break控制: | continue控制: |
| public class Hello { ?????????public static void main(String args[]) { ???????????????????for (int x = 0 ; x < 10 ; x ++) { ????????????????????????????if (x == 3) { ?????????????????????????????????????break ; ????????????????????????????} ????????????????????????????System.out.println(x) ; ???????????????????} ?????????} } | public class Hello { ?????????public static void main(String args[]) { ???????????????????for (int x = 0 ; x < 10 ; x ++) { ????????????????????????????if (x == 3) { ?????????????????????????????????????continue ; ????????????????????????????} ????????????????????????????System.out.println(x) ; ???????????????????} ?????????} } |
?????????這三種操作都離不開if語句判斷,只要是結(jié)束的操作都肯定需要使用if判斷。
3.10.2?、方法的重載(重點(diǎn))
?????????在講解重載操作之前,首先完成這樣的一種定義,要求定義方法,此方法可以完成兩個(gè)整數(shù)的相加,或者是兩個(gè)小數(shù)的相加,或者是三個(gè)整數(shù)的相加,那么如果按照習(xí)慣性的思路,現(xiàn)在一定要定義三個(gè)方法,可能方法就編寫如下了:
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println("兩個(gè)整型相加:" + add1(10,20)) ; ???????????????????System.out.println("三個(gè)整型相加:" + add2(10,20,30)) ; ???????????????????System.out.println("兩個(gè)浮點(diǎn)型相加:" + add3(10.2,20.3)) ; ?????????} ?????????public static int add1(int x,int y) { ???????????????????return x + y ; ?????????} ?????????public static int add2(int x,int y,int z) { ???????????????????return x + y + z ; ?????????} ?????????public static double add3(double x,double y) { ???????????????????return x + y ; ?????????} } |
?????????現(xiàn)在已經(jīng)成功的完成了代碼的調(diào)用,但是如果按照這種思路,現(xiàn)在有1000種這樣的增加方法,這個(gè)時(shí)候調(diào)用起來就很麻煩,還要首先區(qū)分出方法的編號是多少,這種不合適的操作一定不是我們所使用的。
?????????在這種情況下可以使用方法的重載(Overloading)來解決問題,方法重載指的是方法名稱相同,參數(shù)的類型或個(gè)數(shù)不同,調(diào)用的時(shí)候?qū)凑諅鬟f的參數(shù)類型和個(gè)數(shù)完成不同的方法體的執(zhí)行。
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println("兩個(gè)整型相加:" + add(10,20)) ; ???????????????????System.out.println("三個(gè)整型相加:" + add(10,20,30)) ; ???????????????????System.out.println("兩個(gè)浮點(diǎn)型相加:" + add(10.2,20.3)) ; ?????????} ?????????public static int add(int x,int y) { ???????????????????return x + y ; ?????????} ?????????public static?int?add(int x,int y,int z) { ???????????????????return x + y + z ; ?????????} ?????????public static?double?add(double x,double y) { ???????????????????return x + y ; ?????????} } |
?????????它是自動的根據(jù)參數(shù)的類型和個(gè)數(shù)的不同調(diào)用不同的方法體進(jìn)行執(zhí)行。
?????????但是討論一下,以下的代碼屬于方法重載嗎?
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println("兩個(gè)整型相加:" + add(10,20)) ; ???????????????????System.out.println("兩個(gè)浮點(diǎn)型相加:" + add(10,20)) ; ?????????} ?????????public static?int?add(int x,int y) { ???????????????????return x + y ; ?????????} ?????????public static?double?add(int x,int y) {???????//?返回值不同 ???????????????????return x + y ; ?????????} } |
?????????可以發(fā)現(xiàn),這個(gè)時(shí)候除了方法的返回值類型不一樣之外,方法的參數(shù)類型及個(gè)數(shù)完全相同,所以這種操作不符合于方法重載的定義。
額外提醒:
方法重載的時(shí)候并沒有規(guī)定出返回值類型必須統(tǒng)一,即:重載的方法返回值類型可以不一樣,但是從開發(fā)的角度而言,建議所有方法重載之后返回值類型統(tǒng)一,但是這種規(guī)則不是死的,至少在我們自己編寫的代碼之中,80%的情況下可以滿足。
范例:繼續(xù)觀察如下代碼
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println("Hello World") ;?????????//?輸出String ???????????????????System.out.println(100) ;???????//?輸出int ???????????????????System.out.println(3000.9) ;??//?輸出double ???????????????????System.out.println('A') ;?????????//?輸出char ???????????????????System.out.println(true) ;???????//?輸出boolean ?????????} } |
?????????所以,可以得出一個(gè)結(jié)論:System.out.println()實(shí)際上就是進(jìn)行了方法的重載。
3.10.3?、遞歸調(diào)用(了解)
?????????遞歸操作指的是方法自己調(diào)用自己的形式,但是在進(jìn)行遞歸操作的時(shí)候必須滿足如下的幾個(gè)條件:
???????????????????·?必須有結(jié)束條件;
???????????????????·?每次調(diào)用的時(shí)候都需要改變傳遞的參數(shù)。
范例:完成一個(gè)1 ~ 100的累加
| public class Hello { ?????????public static void main(String args[]) { ???????????????????int sum = 0 ; ???????????????????int x = 1 ; ???????????????????while( x <= 100 ) { ????????????????????????????sum += x ; ????????????????????????????x ++ ; ???????????????????} ???????????????????System.out.println(sum) ; ?????????} } |
?????????幾乎所有的while循環(huán)都可以改變?yōu)檫f歸操作。
范例:遞歸操作
| public class Hello { ?????????public static void main(String args[]) { ???????????????????System.out.println(add(100)) ; ?????????} ?????????public static int add(int num) { ???????????????????if (num == 1) {???//?結(jié)束條件 ????????????????????????????return 1 ;????//?不再向后繼續(xù)加了 ???????????????????} ???????????????????return num + add(num - 1) ;??//?修改參數(shù)內(nèi)容 ?????????} ?????????//?第1次調(diào)用:return 100 + add(99); ?????????//?第2次調(diào)用:return 100 + 99 + add(98); ?????????//?倒數(shù)第2次調(diào)用:return 100 + 99 + ... + 3 + add(2) ; ?????????//?最后一次調(diào)用:return 100 + 99 + ... + 3 + 2 + 1 ; } |
?????????對于遞歸操作,現(xiàn)在只要求可以理解這個(gè)含義即可,而在實(shí)際的工作之中,遞歸盡量少去使用,因?yàn)槭褂貌划?dāng),就可能造成內(nèi)存溢出。
4、總結(jié)
1、???JDK的安裝和配置;
2、???classpath和path的區(qū)別;
3、???數(shù)據(jù)類型的劃分及默認(rèn)值;
4、???程序的三種結(jié)構(gòu);
5、???switch在JDK 1.7之后可以對字符串?dāng)?shù)據(jù)進(jìn)行判斷了;
6、???方法以及方法重載的操作。
?
總結(jié)
以上是生活随笔為你收集整理的Java核心基础知识汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [bzoj4084][Sdoi2015]
- 下一篇: Javascript中公有成员,私有成员