第一篇:學(xué)習(xí)JAVA程序課程心得
《Java項(xiàng)目實(shí)戰(zhàn)》心得
在學(xué)習(xí)JAVA面像對(duì)象語(yǔ)言中這是一門(mén)以網(wǎng)絡(luò)技術(shù)、多平臺(tái)操作、UML及其建模工具使用、JSP技術(shù)等為一體的,一門(mén)比較熱門(mén)的編程語(yǔ)言。
我在本課程中不到了不少的新知識(shí),例如數(shù)據(jù)庫(kù)的多表查詢(xún)、多表添加、權(quán)限等功能。在學(xué)習(xí)JAVA中我們跟著老師將理論和實(shí)踐將有機(jī)的結(jié)合在一起。循序漸進(jìn)的掌握J(rèn)AVA的一些基礎(chǔ)知識(shí)和實(shí)際應(yīng)用。
JAVA是以做一個(gè)項(xiàng)目的來(lái)考核每一位同學(xué),是以團(tuán)隊(duì)開(kāi)發(fā)為主這樣讓同學(xué)進(jìn)入公司時(shí)就有團(tuán)隊(duì)的意識(shí)。為了完整個(gè)項(xiàng)目是這個(gè)小組必需以一個(gè)文檔為主這樣可以讓項(xiàng)目很好的進(jìn)行。
JAVA是以JDBC連接數(shù)據(jù)庫(kù)的這是一種新的技術(shù)。在JAVA中數(shù)據(jù)連接可創(chuàng)建一類(lèi)這樣可以每次連接數(shù)據(jù)庫(kù)是調(diào)用這個(gè)類(lèi)方便了程序的開(kāi)發(fā)。
怎么學(xué)習(xí)Java開(kāi)始的兩年我學(xué)JAVA就是拿書(shū)看,練習(xí)書(shū)上的例子,但是一直沒(méi)有好的效果。后來(lái)因?yàn)轫?xiàng)目需要開(kāi)始正式使用JAVA開(kāi)發(fā),我發(fā)現(xiàn)以前練習(xí)的東西都忘光了,所以不得不在拿起書(shū)看。也就是基本上做了無(wú)用功了?,F(xiàn)在想來(lái)因?yàn)榇蟛糠质浅瓉?lái)的,不怎么動(dòng)腦子,所以不清楚為什么要這樣。所以我強(qiáng)烈建議你學(xué)習(xí)的時(shí)候給自己設(shè)定一個(gè)假想的項(xiàng)目目標(biāo),做一個(gè)東西出來(lái),網(wǎng)頁(yè)也好,application也好,這樣你才會(huì)快速地學(xué)習(xí)。
對(duì)java有了一定地感覺(jué)以后,你在去看他的DOCUMENT,看他的源碼,我建議你從低版本的JAVA源碼看起,因?yàn)樗?lèi)少,看起來(lái)容易懂。然后你就會(huì)知道自己以前編碼的東西那些是很幼稚的,是可以用一兩句就能搞定的。
如果你已經(jīng)稍微有了些感覺(jué),如果覺(jué)得合適也可以考慮參加一些培訓(xùn),畢竟比自學(xué)要輕松些,另外還可以學(xué)到別人的一些經(jīng)驗(yàn),比如:清軟Java培訓(xùn),一些學(xué)員反應(yīng)不錯(cuò)的,也建議你們多了解一下其它的培訓(xùn)機(jī)構(gòu)。
如何解決問(wèn)題,學(xué)習(xí)的過(guò)程中不可避免的遇到問(wèn)題,這些問(wèn)題有的只是一個(gè)符號(hào)錯(cuò)了,一個(gè)括號(hào)少了,這類(lèi)的問(wèn)題在他的文檔,或者一般的網(wǎng)站上就能夠找到,尤其是初學(xué)者的問(wèn)題,不會(huì)是很難的問(wèn)題,在你之前已經(jīng)無(wú)數(shù)人問(wèn)過(guò)了,不要害怕提問(wèn),但是這個(gè)問(wèn)題最好是你找不到答案的時(shí)候去提。有的時(shí)候人們覺(jué)得你這個(gè)問(wèn)題到處都有,是你個(gè)人太懶不去找的原因而沒(méi)有解決,這樣不愿意回答。
總而言之我在JAVA中學(xué)習(xí)了團(tuán)隊(duì)精神和一些面像對(duì)象的語(yǔ)言編程。
05軟件 王國(guó)輝
第二篇:JAVA學(xué)習(xí)中的心得和小程序
最初接觸JAVA實(shí)在大一的時(shí)候,當(dāng)時(shí)想著去考計(jì)算機(jī)等級(jí)考試,那個(gè)時(shí)候就對(duì)JACA有一點(diǎn)興趣。但幸運(yùn)的是,我當(dāng)時(shí)的公選課選的是C語(yǔ)言而且專(zhuān)業(yè)課程里面也開(kāi)了C語(yǔ)言這門(mén)課程所以當(dāng)時(shí)選擇了C語(yǔ)言。而現(xiàn)在接觸了JACA,才真正的發(fā)現(xiàn),不同語(yǔ)言不同的魅力!
剛一開(kāi)始學(xué)習(xí)java時(shí),我就已經(jīng)學(xué)習(xí)過(guò)C語(yǔ)言,不過(guò)C語(yǔ)言學(xué)的不是很好,所以開(kāi)始看到j(luò)ava的時(shí)候我很反感,看著源代碼,都不知道失什么意思??磿?shū)的時(shí)候一看到源代碼就頭疼,因?yàn)楦究床欢?。那段時(shí)間根本就是一無(wú)所獲,在圖書(shū)館借了一本書(shū),關(guān)java的語(yǔ)法特性,與別的語(yǔ)言相比的優(yōu)點(diǎn),什么跨平臺(tái),源代碼公開(kāi),什么write once run anywhere,能說(shuō)得頭頭是道,可是一到具體的問(wèn)題,想寫(xiě)一些具體的東西,問(wèn)題就都來(lái)了,根本不知道該怎么下手。漸漸的時(shí)間過(guò)去了,一點(diǎn)進(jìn)展都沒(méi)有,而后又同學(xué)經(jīng)常來(lái)宿舍跟我講解,我很感謝他。慢慢的我也理解了一些知識(shí)。從他那里,我認(rèn)識(shí)到,JAVA是一門(mén)計(jì)算機(jī)語(yǔ)言,是人類(lèi)發(fā)明的語(yǔ)言,應(yīng)該比人類(lèi)語(yǔ)言更容易學(xué)習(xí),只要你有一種必勝學(xué)習(xí)JAVA心態(tài)就可以成功。JAVA學(xué)習(xí)中,首先要做到課前、課后復(fù)習(xí)及預(yù)習(xí),要時(shí)時(shí)保持一個(gè)清醒的頭腦;多和同學(xué)溝通;互相學(xué)習(xí);取長(zhǎng)補(bǔ)短;在學(xué)習(xí)中做到幫助他人或他人幫助自己。學(xué)習(xí)java,的確要學(xué)習(xí)的東西很多,就像同學(xué)提到的。Java不像.net一家獨(dú)大,Java的繁盛在于開(kāi)源社區(qū)的龐大,這也帶來(lái)了分支太多的問(wèn)題,怎樣選擇一條好的學(xué)習(xí)路線,對(duì)于初學(xué)者來(lái)說(shuō),的確是一件很迷茫的事。其實(shí)不管
java東西再多,總有規(guī)律可循。對(duì)于學(xué)習(xí)java基礎(chǔ)的經(jīng)驗(yàn)就是多做、多思考,基礎(chǔ)知識(shí)的學(xué)習(xí)不能不求甚解,要追本溯源,弄清問(wèn)題的本質(zhì)。C的入門(mén)學(xué)習(xí)過(guò)程是比較痛苦的,你要學(xué)好需要一定的努力,但是他有一個(gè)好處,相對(duì)JAVA來(lái)說(shuō)比較集中,不會(huì)出現(xiàn)JAVA里面這么多差異。java的學(xué)習(xí)過(guò)程開(kāi)始比較容易入手,更容易學(xué)習(xí)。當(dāng)然現(xiàn)在C#也可以。java還有一個(gè)優(yōu)勢(shì)就是在移動(dòng)設(shè)備的開(kāi)發(fā),所有的java應(yīng)用版本不同,但是語(yǔ)法一致。java的跨平臺(tái)特性使得學(xué)習(xí)他讓我們可以在不同的場(chǎng)合下使用。而恰恰就是它的種種跨平臺(tái)性讓我非常感興趣。我們的社會(huì)發(fā)展現(xiàn)在越來(lái)越集中化,智能化,所有的東西手機(jī),電腦都可以解決,而終端設(shè)備之間的通訊就是促進(jìn)發(fā)展的橋梁,JACA具有非常優(yōu)越的跨平臺(tái)性,基本的移動(dòng)終端都可以利用JACA平臺(tái)進(jìn)行開(kāi)發(fā),學(xué)習(xí)。
當(dāng)然學(xué)習(xí)的過(guò)程中不可避免的遇到問(wèn)題,這些問(wèn)題有的只是一個(gè)符號(hào)錯(cuò)了,一個(gè)括號(hào)少了,但只要仔細(xì)查找就會(huì)發(fā)現(xiàn)不會(huì)是很難的問(wèn)題,最最重要的是要學(xué)會(huì)詢(xún)問(wèn)別人,有這樣一個(gè)笑話(huà):一個(gè)程序員向上帝許愿希望他有生之年可以編寫(xiě)出一個(gè)完美的程序結(jié)果——程序員最后長(zhǎng)生不老!雖然只是一個(gè)笑話(huà)但是也可以反映出世上沒(méi)有絕對(duì)完美的程序,所以學(xué)會(huì)詢(xún)問(wèn)別人是最最有效的方法。
編寫(xiě)一個(gè)程序,實(shí)現(xiàn)1-100的累加。
public class LeiJia { public static void main(String args[]){
int sum=0;
for(int i=1;i<=100;i++){
sum=sum+i;}
System.out.println(“sum=”+sum);} }
這是一個(gè)小程序?qū)ξ覍W(xué)習(xí)有很大的啟發(fā),這個(gè)程序是利用循環(huán)FOR語(yǔ)句實(shí)現(xiàn)了從1到100的數(shù)字的累加運(yùn)算,對(duì)比C語(yǔ)言不難發(fā)現(xiàn)其實(shí)很多的語(yǔ)法應(yīng)用都是差不多的但JACA卻具有更多的表現(xiàn)形式和不同的書(shū)寫(xiě)規(guī)則,但就是多種的表現(xiàn)形式才能夠使它具有這種跨平臺(tái)的多兼容性。
在我所學(xué)的語(yǔ)言當(dāng)中,我自認(rèn)為JAVA是一門(mén)比較強(qiáng)大的面向?qū)ο蟮木幊陶Z(yǔ)言,不僅僅因?yàn)樗目缙脚_(tái)性,更多的是因?yàn)樗撵`活多變和實(shí)用性較強(qiáng),可以說(shuō)比較的經(jīng)典和強(qiáng)悍。所以學(xué)好java語(yǔ)言有很大的用處,在不斷地接觸JAVA中我們更多學(xué)到的是不懂就問(wèn)和自己應(yīng)該盡自己的全力去嘗試,哪怕失敗,只要自己盡自己的全力,和身邊同學(xué)一起探討而不是抄襲,團(tuán)結(jié)合作,發(fā)揮團(tuán)隊(duì)意識(shí),最后在自己的努力下,終于運(yùn)行成功,這種成就感美不可言,心情愉悅至極。
第三篇:學(xué)習(xí)JAVA心得
學(xué)習(xí)JAVA心得(2007-07-10 17:44:52)
經(jīng)??吹接腥藛?wèn)怎么學(xué)JAVA,無(wú)數(shù)的問(wèn)題其實(shí)都已經(jīng)是討論很多編了,我學(xué)習(xí)JAVA5年,真正覺(jué)得有感覺(jué)是2003的時(shí)候,這么長(zhǎng)時(shí)間以來(lái)有一些想法,寫(xiě)出來(lái)大家共同探討:
1.為什么要學(xué)JAVA?
首要的原因當(dāng)然是為了生活,找份好工作,現(xiàn)在放眼望去,知名公司只會(huì)要求兩種語(yǔ)言-c/c++,當(dāng)然包括后來(lái)的NET,和JAVA。其他一些公司可能會(huì)要其他的語(yǔ)言,但最終的結(jié)果是你會(huì)回到這兩類(lèi)上。前者的入門(mén)學(xué)習(xí)過(guò)程是比較痛苦的,你要學(xué)好需要一定的努力,但是他有一個(gè)好處,相對(duì)JAVA來(lái)說(shuō)比較集中,不會(huì)出現(xiàn)JAVA里面這么多差異。java的學(xué)習(xí)過(guò)程開(kāi)始比較容易入手,更容易學(xué)習(xí)。當(dāng)然現(xiàn)在C#也可以。java還有一個(gè)優(yōu)勢(shì)就是在移動(dòng)設(shè)備的開(kāi)發(fā),所有的java應(yīng)用版本不同,但是語(yǔ)法一致。java的跨平臺(tái)特性使得學(xué)習(xí)他讓我們可以在不同的場(chǎng)合下使用。
2.怎么學(xué)習(xí)java
開(kāi)始的兩年我學(xué)JAVA就是拿書(shū)看,練習(xí)書(shū)上的例子,但是一直沒(méi)有好的效果。后來(lái)因?yàn)轫?xiàng)目需要開(kāi)始正式使用JAVA開(kāi)發(fā),我發(fā)現(xiàn)以前練習(xí)的東西都忘光了,所以不得不在拿起書(shū)看。也就是基本上做了無(wú)用功了。現(xiàn)在想來(lái)因?yàn)榇蟛糠质浅瓉?lái)的,不怎么動(dòng)腦子,所以不清楚為什么要這樣。所以我強(qiáng)烈建議你學(xué)習(xí)的時(shí)候給自己設(shè)定一個(gè)假想的項(xiàng)目目標(biāo),做一個(gè)東西出來(lái),網(wǎng)頁(yè)也好,application也好,這樣你才會(huì)快速地學(xué)習(xí)。
對(duì)java有了一定地感覺(jué)以后,你在去看他的DOCUMENT,看他的源碼,我建議你從低版本的JAVA源碼看起,因?yàn)樗?lèi)少,看起來(lái)容易懂。然后你就會(huì)知道自己以前編碼的東西那些是很幼稚的,是可以用一兩句就能搞定的。
3.如何解決問(wèn)題
學(xué)習(xí)的過(guò)程中不可避免的遇到問(wèn)題,這些問(wèn)題有的只是一個(gè)符號(hào)錯(cuò)了,一個(gè)括號(hào)少了,這類(lèi)的問(wèn)題在他的文檔,或者一般的網(wǎng)站上就能夠找到,尤其是初學(xué)者的問(wèn)題,不會(huì)是很難的問(wèn)題,在你之前已經(jīng)無(wú)數(shù)人問(wèn)過(guò)了,不要害怕提問(wèn),但是這個(gè)問(wèn)題最好是你找不到答案的時(shí)候去提。有的時(shí)候人們覺(jué)得你這個(gè)問(wèn)題到處都有,是你個(gè)人太懶不去找的原因而沒(méi)有解決,這樣不愿意回答。
等你走出了這個(gè)階段,這個(gè)時(shí)候在有問(wèn)題可能就是比較難一些的,這個(gè)時(shí)候在一般的網(wǎng)站上應(yīng)該是難以找到結(jié)果的,我建議你英文夠好的話(huà)直接上國(guó)外的網(wǎng)站,包括JAVA自己的網(wǎng)站。如果一般呢,可以到IBM的中文網(wǎng)站上去,這些地方有很多一系列問(wèn)題的解決方法,那上面提供的例子不管是書(shū)寫(xiě)格式還是正確性都是比較好的,為你養(yǎng)成良好的習(xí)慣有很大的幫助。
4.其他UML等的學(xué)習(xí)
數(shù)據(jù)結(jié)構(gòu)要不要學(xué),UML要不要學(xué),這些問(wèn)題我覺(jué)得應(yīng)人而異,你滿(mǎn)足于做一般的程序員,完全可以不學(xué),現(xiàn)在商業(yè)軟件用到的都是成熟的技術(shù),所有你遇到的問(wèn)題,除非bug,無(wú)法解決的,在網(wǎng)上都能找到現(xiàn)成的代碼,完全可以支持你完成工作。
但是如果你把編程當(dāng)作一種樂(lè)趣的話(huà),還是要學(xué)習(xí)的,用UML語(yǔ)言之后,你會(huì)發(fā)現(xiàn)編碼的速度會(huì)更快,因?yàn)樵谶@個(gè)過(guò)程中你理清了思路,通過(guò)使用工具,你可以要編碼的模塊分到最細(xì),完成這部分工作以后,沒(méi)一個(gè)模塊的代碼寫(xiě)起來(lái)會(huì)順手很多,因?yàn)檫壿嬅鞔_。數(shù)據(jù)結(jié)構(gòu)對(duì)你寫(xiě)一些小的算法有幫助。而且通過(guò)比較高層次來(lái)觀察整個(gè)系統(tǒng),你對(duì)程序的把握會(huì)越
來(lái)越有信心。
編程是一種樂(lè)趣,只有你覺(jué)得他有樂(lè)趣的時(shí)候你才會(huì)用更多的熱情去學(xué)習(xí),現(xiàn)在java的書(shū)很多,我覺(jué)得國(guó)內(nèi)一般人寫(xiě)的不要看,還是原版的或者原版翻譯的比較好
第四篇:Java心得
JAVA心得
1.Only public & abstract are permitted for interface.2.Only public, abstract & final are permitted for class.3.main方法作為程序的入口,其modifier必須是 public static void
且必須有一個(gè)類(lèi)型為String的數(shù)組參數(shù), 否則不能運(yùn)行.4.非static內(nèi)部類(lèi)中不能有static的域和方法.static的域和方法只能存在于頂級(jí)類(lèi)中或者是static嵌套類(lèi)中.5.interface 中定義的變量都是public static final的, 且必須賦值.6.如果試圖在方法中更改final變量的值, 則編譯不能通過(guò);
7.兩個(gè)int類(lèi)型的數(shù)相除其結(jié)果也是int型且不會(huì)四舍五入而是直接截取整數(shù)部分.一個(gè)浮點(diǎn)型數(shù)字與整數(shù)相除其結(jié)果是浮點(diǎn)型.8.try{}塊后面必須有catch(Exception){}或者finally{}
try{return a;}
finally{
}
執(zhí)行順序是return語(yǔ)句返回結(jié)果之前 先執(zhí)行finally{}再返回結(jié)果.9.子類(lèi)override父類(lèi)方法是可見(jiàn)修飾符級(jí)別不能降低,例如父類(lèi)是protected
子類(lèi)可以是protected和public 但不可以是default和private.如果子類(lèi)有個(gè)方法與父類(lèi)同名且參數(shù)類(lèi)型也相同,則必須返回值類(lèi)型也相同 否則不能編譯.Java允許方法名與類(lèi)名相同, IDE會(huì)給出警告但可以編譯和運(yùn)行.
第五篇:JAVA課程總結(jié)
DAY01
JavaSE第一天課程安排
##### 目標(biāo):開(kāi)發(fā)第一個(gè)JAVA小程序,了解掌握相關(guān)概念
#####
內(nèi)容:
1、了解計(jì)算機(jī)相關(guān)概念
2、下載安裝Java開(kāi)發(fā)環(huán)境
3、開(kāi)發(fā)第一個(gè)Java程序
4、開(kāi)發(fā)環(huán)境設(shè)置優(yōu)化
5、掌握J(rèn)ava程序的開(kāi)發(fā)運(yùn)行流程
6、掌握J(rèn)ava相關(guān)概念
7、練習(xí)
#####----------------計(jì)算機(jī)相關(guān)概念----------------
1、計(jì)算機(jī)
1、機(jī)器
2、軟件
3、數(shù)據(jù)輸入----> 數(shù)據(jù)處理----> 數(shù)據(jù)輸出-----(重要不緊急)
2、軟件----
A、系統(tǒng)軟件-----操作系統(tǒng)---windows linux B、應(yīng)用軟件-----QQ、CF、計(jì)算器(數(shù)據(jù))軟件的功能: 數(shù)據(jù)輸入----> 數(shù)據(jù)處理----> 數(shù)據(jù)輸出 數(shù)據(jù)-----123、文件、文件夾----泛稱(chēng)
3、計(jì)算機(jī)操作
物理操作 軟件操作 GUI/CUI GUI-----圖形用戶(hù)接口-----Graphics User Interface(常用)CUI-----命令行用戶(hù)接口---Command User Interface(了解)A、如何啟動(dòng)CUI
1、開(kāi)始----> 附件-----> 命令提示符
2、開(kāi)始----> 搜索CMD
3、win7----> shift 右擊----> 打開(kāi)命令行
B、DOS命令----CUI和GUI有對(duì)應(yīng)關(guān)系
按規(guī)律記憶
電腦上數(shù)據(jù)分兩類(lèi): 切換盤(pán)符:盤(pán)符號(hào): 進(jìn)入文件夾: cd 文件夾名
cd 路徑名(進(jìn)入多級(jí))
返回上一級(jí):cd..返回根目錄:cd
1、文件
增
-----notepad/write/edit 查
-----type 文件名---查看內(nèi)容 改
-----notepad/write/edit
刪
-----del 文件名稱(chēng)
2、文件夾---dir
增----md XXX 查----dir--查看文件夾下所有文件
改----修改名稱(chēng) ren 刪----rd 要求:
1、簡(jiǎn)單調(diào)用----記住一個(gè) help
2、調(diào)用 time date 等命令
3、命令如何使用--命令 /? DOS啟動(dòng)程序
1、DOS下進(jìn)入程序所在路徑
2、敲入程序名稱(chēng)
3、回車(chē)
需求:任意目錄下啟動(dòng)程序,notepad可以,QQ不可以 edit cd cd..cd help 命令 /?----------不重要緊急
4、鍵盤(pán)使用------------重要不緊急
快捷鍵: 全選: ctrl + A
撤銷(xiāo): ctrl + Z 復(fù)制: ctrl + C 粘貼: ctrl + V 保存: ctrl + S------剪切: ctrl + X eclipse: ctrl + D----刪除一整行
5、計(jì)算機(jī)語(yǔ)言
6、軟件開(kāi)發(fā)
使用計(jì)算機(jī)語(yǔ)言開(kāi)發(fā)程序 學(xué)習(xí)計(jì)算機(jī)語(yǔ)言:語(yǔ)法
總結(jié):了解-----
緊急-----常見(jiàn)的DOS命令
----------------下載安裝Java開(kāi)發(fā)環(huán)境----------
1、Java簡(jiǎn)介
A、詹姆斯 格斯林 B、開(kāi)源----開(kāi)放源代碼 C、ONE體系
Open Net Environment----開(kāi)放的網(wǎng)絡(luò)環(huán)境
JavaSE-----桌面應(yīng)用程序開(kāi)發(fā)----核心----就業(yè)機(jī)會(huì)不多 JavaEE-----企業(yè)的分布式系統(tǒng)開(kāi)發(fā)1)----(N從右向左數(shù)的位數(shù))
4、負(fù)數(shù)的轉(zhuǎn)換----(不不)
-10 0000 0000 概念:原反補(bǔ)
正數(shù):源碼反碼補(bǔ)碼都一樣
負(fù)數(shù):原碼----標(biāo)志位是1,計(jì)數(shù)位和正數(shù)一樣
反碼----計(jì)數(shù)位取反,1變0,0變1
補(bǔ)碼----反碼基礎(chǔ)之上 +1 101 0111 1111 1111 1111 1111 1111 1111 1111----2^311 = 127 short-----2個(gè)字節(jié)16bit----最小值:-2^15=-32768 最大值:2^15* / %
++--(重點(diǎn))DAY03 一.算數(shù)運(yùn)算符:
1.+ 2.-
3.* 4./
/ 3 : 3 10 / 0 : 運(yùn)行時(shí)異常;
10.0 / 0 :Infinity(無(wú)窮)不是異常
5.%
% 3 : 1 10 % 0 : 運(yùn)行時(shí)異常
10.0 % 0 : NaN(Not A Number)不是異常-10 %-3 :-1 10 % 3 :1-10 % 3:-1 10 %-3:1 6.++: 7.--: 如果表達(dá)式中,只做++或--一件事情,那么前++/--和后++/--效果一樣的; 但如果表達(dá)式中做多件事情:
前++/--:先自增/自減,然后再參與表達(dá)式的其它運(yùn)算; 后++/--:先參與表達(dá)式的運(yùn)算,然后在自增/自減;
二.賦值運(yùn)算符
1.=:執(zhí)行順序,從右至左,并且最后返回變量; 2.+=: 3.-=: 4.*=: 5./=: 6.%=:
特點(diǎn):帶隱式強(qiáng)制轉(zhuǎn)換;
byte b1 = 10;b1 = b1 + 20;//編譯錯(cuò)誤
b1 += 20;//OK的-->b1 =(byte)(b1 + 20);三.關(guān)系運(yùn)算符:
1.==:判斷是否相等 2.!=:判斷是否不等;
3.<:左操作數(shù)是否小于右操作數(shù); 4.>:左操作數(shù)是否大于右操作數(shù);
5.<=:左操作數(shù)是否小于或者等于右操作數(shù); 6.>=:左操作數(shù)是否大于或者等于右操作數(shù);
四.邏輯運(yùn)算符:
&&、||和&、|的區(qū)別:
1.邏輯&&和||具有短路行為,一旦確定整個(gè)表達(dá)式的結(jié)果,那么將不再執(zhí)行剩余表達(dá)式; 1.&&(語(yǔ)意:并且):兩邊都為true,結(jié)果為:true; 2.||(語(yǔ)意:或者):有一邊為true,結(jié)果為true;3.!(語(yǔ)意:不是):!true:false;!false:true 位運(yùn)算符:
4.&(并且):結(jié)果同&& 5.|(或者):結(jié)果同|| DAY04 一.運(yùn)算符:
1.位運(yùn)算符:
1).<<(左移): 2).>>(有符號(hào)右移):
3).>>>(無(wú)符號(hào)右移)4).&(按位與):兩位都是1,結(jié)果為1; 5).|(按位或):有1位為1,結(jié)果為1;
6).^(按位異或):兩位相同結(jié)果為0,否則為1; 7).~(取反):1變0,0變1 2.位運(yùn)算符的考點(diǎn):
1).高效的計(jì)算某數(shù) * 2 : << 2).高效的計(jì)算某數(shù) / 2 : >> 3).&、|同&&、||的區(qū)別: 邏輯與&&、||:具有短路行為;
4).將兩個(gè)變量的值交換:三次異或;
3.三目運(yùn)算符: 條件表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2;
二.鍵盤(pán)錄入:
步驟:
1.import java.util.Scanner;2.Scanner sc = new Scanner(System.in);3.int : int num = sc.nextInt();
double : double d = sc.nextDouble();
String : String s = sc.next();三.選擇結(jié)構(gòu):
1.if語(yǔ)句:
1)格式1:
if(條件表達(dá)式){ } 注意:如果if體內(nèi)只有一條語(yǔ)句,可以省略大括號(hào),但不建議;
2)格式2:
if(條件表達(dá)式){ //為true,執(zhí)行這里
}else{ } //為false,執(zhí)行這里
3)格式3:
if(條件表達(dá)式){ }else if(條件表達(dá)式2){ }else if(條件表達(dá)式3){ }else{ } 2.switch語(yǔ)句:
1).格式:
switch(表達(dá)式){
} case 值1: //代碼 break;case 值2:
//代碼 break;default: //代碼 break;2).注意事項(xiàng):
1.“表達(dá)式”可以產(chǎn)生的值:byte,short,int,char,枚舉(JDK5以后),String(JDK7以后)2.case語(yǔ)句后跟“常量表達(dá)式”,不能是“變量”;而且不能出現(xiàn)相同的常量值;
3.break;語(yǔ)句“不是必須的”。如果不寫(xiě),如果一旦case相應(yīng)的值成功,但內(nèi)部沒(méi)有break語(yǔ)句,那么將會(huì)無(wú)條件(不再進(jìn)行case匹配)的繼續(xù)向下執(zhí)行其它c(diǎn)ase中的語(yǔ)句,直到遇到break;語(yǔ)句
或者到達(dá)switch語(yǔ)句結(jié)束。4.多個(gè)case之間,沒(méi)有順序關(guān)系;
5.default語(yǔ)句“不是必須的”??梢圆粚?xiě),它就相當(dāng)于多重if語(yǔ)句中最后的else。6.default語(yǔ)句和case語(yǔ)句“沒(méi)有順序關(guān)系”。
DAY05 一.while循環(huán):
while(條件表達(dá)式){ } 二.do_while循環(huán):
do{ }while(條件表達(dá)式);三.for循環(huán):
for(定義循環(huán)變量表達(dá)式
;
條件表達(dá)式
;增量表達(dá)式){ } 說(shuō)明:
1.三個(gè)表達(dá)式都不是必須的;但分號(hào)必須要寫(xiě); 2.執(zhí)行順序:
1).定義循環(huán)變量表達(dá)式; 2).條件表達(dá)式;3).進(jìn)入循環(huán); 4).增量表達(dá)式; 5).條件表達(dá)式;
6).進(jìn)入循環(huán) 7).增量表達(dá)式......四.三種循環(huán)的區(qū)別:
1.只有do_while循環(huán)是先無(wú)條件的進(jìn)入循環(huán)體執(zhí)行一次,然后再判斷;
while和for循環(huán)都先判斷,后進(jìn)入循環(huán)體; 2.一般對(duì)于有明顯的遍歷范圍的,建議首選for循環(huán)。
對(duì)于沒(méi)有明顯遍歷范圍的,一般使用while。
對(duì)于循環(huán)體中的內(nèi)容,如果需要先執(zhí)行一次,再判斷,那么可以使用do_while DAY06 一.方法:
1.方法的作用:代碼復(fù)用; 2.方法定義的格式:
修飾符 返回值類(lèi)型 方法名([形參列表]){ } 修飾符:目前只需要寫(xiě):public static 返回值類(lèi)型:可以是任何的Java類(lèi)型(基本數(shù)據(jù)類(lèi)型、引用數(shù)據(jù)類(lèi)型)。
如果沒(méi)有返回值,這里要寫(xiě)void
方法名:自定義標(biāo)識(shí)符;
形參列表:可以沒(méi)有,但是一定寫(xiě)一對(duì)小括號(hào)。
如果有,每個(gè)形參是由:數(shù)據(jù)類(lèi)型 形參名
多個(gè)形參,中間用逗號(hào)隔開(kāi);
3.方法內(nèi),可以寫(xiě)什么?
1).定義變量;
2).if語(yǔ)句,switch語(yǔ)句; 3).各種循環(huán)語(yǔ)句;
總之:除了不能定義方法,其它都可以; 4.方法的注意事項(xiàng):
1).方法不調(diào)用不執(zhí)行;2).方法與方法是平級(jí)關(guān)系,不能嵌套定義;3).方法定義的時(shí)候參數(shù)之間用逗號(hào)隔開(kāi);4).方法調(diào)用的時(shí)候不用在傳遞數(shù)據(jù)類(lèi)型;5).如果方法有明確的返回值,一定要有return帶回一個(gè)值;5.方法的重載:
1).在一個(gè)類(lèi)中,可以定義多個(gè)同名的方法,但形參列表不能完全相同; 2).方法重載,跟返回值類(lèi)型無(wú)關(guān);跟形參名無(wú)關(guān);
二.數(shù)組:
1.一維數(shù)組:
1).定義的格式:
1.動(dòng)態(tài)初始化:數(shù)據(jù)類(lèi)型[] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度];2.靜態(tài)初始化:
數(shù)據(jù)類(lèi)型[] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[]{值1,值2,值3,.....,值n};
數(shù)據(jù)類(lèi)型[] 數(shù)組名 = {值1,值2,值3.....值n};2).數(shù)組是“引用數(shù)據(jù)類(lèi)型”,變量存儲(chǔ)的是“引用(地址)”;
3).當(dāng)new(實(shí)例化)一個(gè)數(shù)組對(duì)象時(shí),其“值”的空間是在堆中分配的,對(duì)于各種數(shù)據(jù)類(lèi)型,都會(huì)分配一個(gè)
默認(rèn)值:
整數(shù):0 小數(shù):0.0 字符:'u0000' 布爾:false String:null 其它引用類(lèi)型:null 4).數(shù)組的訪問(wèn)方式:使用:數(shù)組名[索引] DAY07 一.二維數(shù)組:
1.定義的格式:
數(shù)據(jù)類(lèi)型[][] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[第一維的長(zhǎng)度][第二維的長(zhǎng)度];左邊也可以寫(xiě)成:
數(shù)據(jù)類(lèi)型 數(shù)組名[][] 數(shù)據(jù)類(lèi)型[] 數(shù)組名[] 數(shù)據(jù)類(lèi)型[][] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[][]{{值1,值2},{值3,值4},{值5,值6,值7}};數(shù)據(jù)類(lèi)型[][] 數(shù)組名 = {{值1,值2},{值3,值4},{值5,值6,值7}};二.方法的值傳遞和引用傳遞: 1.當(dāng)一個(gè)方法接收的是一個(gè)“基本數(shù)據(jù)類(lèi)型”時(shí),調(diào)用方法傳遞實(shí)參時(shí),是將“值”復(fù)制到方法內(nèi);
在方法內(nèi),如修改其值,修改的只是“副本”,原值不會(huì)被改變;
2.當(dāng)一個(gè)方法接收的是一個(gè)“引用數(shù)據(jù)類(lèi)型”是,調(diào)用方法傳遞實(shí)參時(shí),是將“引用”復(fù)制到方法內(nèi);
在方法內(nèi),是可以通過(guò)這個(gè)引用修改“堆”空間的內(nèi)容,即使方法結(jié)束,修改會(huì)影響到原堆中的值;
DAY08
一.類(lèi):是一組相關(guān)的“屬性”和“行為”的集合;
對(duì)象:是該類(lèi)事物的具體體現(xiàn); 二.類(lèi)和對(duì)象的關(guān)系:
1.現(xiàn)實(shí):
類(lèi) 對(duì)象 貓 波斯貓
折耳貓 加菲貓
---------
狗 金毛
藏獒 沙皮
2.代碼:
類(lèi) 對(duì)象
Cat c1 = new Cat();c1.name = “波斯貓”;class Cat{
}
String name;int age;c1.age = 2;
----Cat c2 = new Cat();c2.name = “折耳貓”;c2.age = 3;----------------------------class Dog{
}
Dog d1 = new Dog();d1.name = “金毛”;String name;int age;d1.age = 2;
----Dog d2 = new Dog();d2.name = “藏獒”;d2.age = 3;
三.類(lèi)的定義:
1.使用關(guān)鍵字:class(注意小寫(xiě))2.一個(gè)java源文件中:
1).如果定義多個(gè)類(lèi),但只有一個(gè)是public的;而且源文件名必須與這個(gè)public的類(lèi)名一致; 2).如果定義多個(gè)類(lèi),可以沒(méi)有public類(lèi);源文件名沒(méi)有一致性要求;
3).main()方法不是必須放在public類(lèi)中;
3.類(lèi)中可以定義什么:
1).成員變量:
A.可以是基本數(shù)據(jù)類(lèi)型,也可以是任何引用數(shù)據(jù)類(lèi)型; B.可以顯示初始化;
class Student{
} String name = “張三”;int age = 20;C.可以隱式初始化;
整型:0 浮點(diǎn):0.0 字符:'u0000' 布爾:false 引用類(lèi)型:null 2).成員方法: A.可以有參數(shù),可以沒(méi)參數(shù);
可以有返回值,可以沒(méi)有返回值;
B.方法的“形參”可以是任何Java類(lèi)型(基本數(shù)據(jù)類(lèi)型、引用數(shù)據(jù)類(lèi)型)C.方法的“返回值”可以是任何Java類(lèi)型(基本數(shù)據(jù)類(lèi)型、引用數(shù)據(jù)類(lèi)型)D.一個(gè)類(lèi)中可以定義多個(gè)同名的方法,但形參列表不完全相同,叫:方法的重載;
3).內(nèi)部類(lèi)(后面講);
4.成員變量和局部變量的區(qū)別:
1).成員變量: A.定義在“類(lèi)體”中;可以是任何數(shù)據(jù)類(lèi)型;
B.會(huì)被自動(dòng)初始化;
class Student{
} String name;void show(){ } System.out.println(“我叫:” + num);
//打印:我叫:null C.當(dāng)實(shí)例化對(duì)象后,被存儲(chǔ)在“堆”中;
D.當(dāng)“對(duì)象”不被使用(沒(méi)有任何引用),并被垃圾回收器回收時(shí)被清理;
2).局部變量:
A.定義在某個(gè)方法、或其它代碼塊中; B.必須顯示初始化,否則不能訪問(wèn)其值;
class Student{
void show(){ String name;System.out.println(“我叫:” + name);
//編譯錯(cuò)誤。局部變量必須顯示初始化才能訪問(wèn)其值;
} } name = “張三”;//OK??梢员毁x值。
C.當(dāng)方法或其它代碼塊被執(zhí)行時(shí),基本數(shù)據(jù)類(lèi)型的“值”和引用數(shù)據(jù)類(lèi)型的“引用”都是存儲(chǔ)在“?!敝校?D.當(dāng)方法或代碼塊執(zhí)行完畢時(shí),會(huì)被立即清理;
四.對(duì)象的使用:
1.創(chuàng)建對(duì)象使用new關(guān)鍵字;會(huì)在堆中分配內(nèi)存空間; 格式:
類(lèi)名
變量名 = new 類(lèi)名();2.一個(gè)類(lèi)可以創(chuàng)建多個(gè)對(duì)象;
3.每個(gè)“對(duì)象”的“成員變量”在“堆”中都有一份獨(dú)立的空間;
每個(gè)“對(duì)象”的“成員方法”被存儲(chǔ)在“方法區(qū)”中,多個(gè)對(duì)象只有一個(gè)“方法空間”; 4.對(duì)象的“引用(地址)”被存儲(chǔ)在“?!敝?;
五.方法的形參:
1.可以是“基本數(shù)據(jù)類(lèi)型”:
1).調(diào)用時(shí),必須傳遞此類(lèi)型的“值”; 2).調(diào)用時(shí),是將值復(fù)制一份到方法內(nèi)部; 3).在方法內(nèi),使用形參接收此值的副本; 4).在方法內(nèi),如果更改此值,對(duì)原值沒(méi)有影響;
int a = 10;show(a);System.out.println(a);//10---public void show(int n){//n = 10 } n = 20;//對(duì)原來(lái)的a的值是沒(méi)有影響的;
2.可以是“引用數(shù)據(jù)類(lèi)型”:
1).調(diào)用時(shí),必須傳遞此類(lèi)型的“引用”;
2).調(diào)用時(shí),是將“引用(地址)”復(fù)制一份到方法內(nèi)部; 3).在方法內(nèi),使用形參接收此“引用”的副本;
4).在方法內(nèi),如果通過(guò)此引用更改堆中的值,對(duì)原堆中的值將會(huì)產(chǎn)生影響;
int[] arr = {14,324,435};//arr = 0x2233 show(arr);//show(0x2233)System.out.println(arr[0]);//1000
----public void show(int[] array){//array = 0x2233 } array[0] = 1000;六.匿名對(duì)象:
1.匿名對(duì)象:沒(méi)有名字的對(duì)象:new Student();2.匿名對(duì)象的兩種使用情況:
1).對(duì)象調(diào)用方法僅僅一次的時(shí)候:new Student().show();2).作為實(shí)際參數(shù)傳遞:printStudent(new Student());七.封裝:
1.直接對(duì)外部暴露成員變量是很不安全的,這時(shí)可以將成員變量“私有化”,對(duì)外提供公有的 get和set方法; 2.封裝的好處:
1)隱藏實(shí)現(xiàn)細(xì)節(jié),提供公共的訪問(wèn)方式 2)提高了代碼的復(fù)用性 3)提高安全性。
3.封裝的原則:
1)將不需要對(duì)外提供的內(nèi)容都隱藏起來(lái)。2)把屬性隱藏,提供公共方法對(duì)其訪問(wèn)。
八.private關(guān)鍵字:
1.是一種“訪問(wèn)修飾符”(將在day10講到);
Java中一共有四種訪問(wèn)修飾符:從寬到窄:public,protected,(默認(rèn)),private 2.用于修飾“成員變量”和“成員方法”;
3.被private修飾的成員,只能在類(lèi)的內(nèi)部被其它成員訪問(wèn)。在類(lèi)外部無(wú)法訪問(wèn);
九.this關(guān)鍵字: 1.每個(gè)類(lèi)都有一個(gè)“隱式”的變量:this;
2.它是在實(shí)例化對(duì)象時(shí),由虛擬機(jī)自動(dòng)賦值的,會(huì)被自動(dòng)賦值為當(dāng)前對(duì)象的“引用”。
所以每個(gè)對(duì)象內(nèi)的this變量的值是不同的;
3.this關(guān)鍵字可以調(diào)用本對(duì)象的“成員屬性”、“成員方法”、“構(gòu)造方法”; 4.以下情況必須顯示的使用this:
1).“局部變量”覆蓋“成員變量”時(shí),可以使用this顯示的訪問(wèn)被覆蓋的“成員變量”;
否則訪問(wèn)的是“局部變量”;
2).在一個(gè)構(gòu)造方法中調(diào)用本類(lèi)的其它構(gòu)造方法;this()或this(實(shí)參);
DAY09
一.構(gòu)造方法:
1.當(dāng)實(shí)例化一個(gè)類(lèi)的對(duì)象時(shí),JVM會(huì)自動(dòng)調(diào)用本類(lèi)的一個(gè)方法:構(gòu)造方法;
2.定義類(lèi)時(shí),可以不定義構(gòu)造方法,編譯器會(huì)自動(dòng)添加一個(gè)無(wú)參,什么都不做的構(gòu)造方法; 3.如果類(lèi)中定義了構(gòu)造方法,編譯器就不會(huì)添加任何構(gòu)造方法了; 4.構(gòu)造方法的格式要求:
1).構(gòu)造方法名必須與類(lèi)名一致;
2).構(gòu)造方法不能定義“返回值類(lèi)型”,甚至是void;
3).構(gòu)造方法不能返回一個(gè)具體的值,但內(nèi)部可以使用return;語(yǔ)句; 注意:
1).以下代碼可以編譯通過(guò):
class Student(){
} public void Student(){ }
//普通成員方法,不是構(gòu)造方法;
2).以下代碼不能通過(guò)編譯:
class Student(){ public student(){ }
//構(gòu)造方法必須同類(lèi)名一致,包括大小寫(xiě);
} 5.一個(gè)類(lèi)中可以定義多個(gè)“構(gòu)造方法”,但每個(gè)構(gòu)造方法的形參列表不能完全相同,叫:構(gòu)造方法的重載; 6.在一個(gè)構(gòu)造方法中可以調(diào)用另一個(gè)構(gòu)造方法,使用this關(guān)鍵字; 7.構(gòu)造方法可以調(diào)用“成員方法”,但“成員方法”不能調(diào)用構(gòu)造方法;
構(gòu)造方法也可以調(diào)用其它構(gòu)造方法;
二.static關(guān)鍵字:
1.static關(guān)鍵字:靜態(tài)的,全局的。
2.可以修飾“成員變量”和“成員方法”。被static修飾的成員變量存儲(chǔ)在方法區(qū)的“靜態(tài)存儲(chǔ)區(qū)”,只有
一份拷貝,被多個(gè)對(duì)象共享;
3.特點(diǎn):
1).隨著類(lèi)的加載而加載
2).優(yōu)先于對(duì)象存在3).被類(lèi)的所有對(duì)象共享
4).可以通過(guò)類(lèi)名調(diào)用,也可以通過(guò)對(duì)象名調(diào)用; 4.static關(guān)鍵字注意事項(xiàng):
1).在靜態(tài)方法中是沒(méi)有this關(guān)鍵字的
2).靜態(tài)方法只能訪問(wèn)靜態(tài)的成員變量和靜態(tài)的成員方法
三.靜態(tài)變量和成員變量的區(qū)別:
1.所屬不同
1).靜態(tài)變量屬于類(lèi),所以也稱(chēng)為為類(lèi)變量
2).成員變量屬于對(duì)象,所以也稱(chēng)為實(shí)例變量(對(duì)象變量)2.內(nèi)存中位置不同
1).靜態(tài)變量存儲(chǔ)于方法區(qū)的靜態(tài)區(qū) 2).成員變量存儲(chǔ)于堆內(nèi)存
3.內(nèi)存出現(xiàn)時(shí)間不同 1).靜態(tài)變量隨著類(lèi)的加載而加載,隨著類(lèi)的消失而消失
2).成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的消失而消失
4.調(diào)用不同
1).靜態(tài)變量可以通過(guò)類(lèi)名調(diào)用,也可以通過(guò)對(duì)象調(diào)用 2).成員變量只能通過(guò)對(duì)象名調(diào)用
DAY10 一.代碼塊(理解):
1.普通代碼塊(類(lèi)體中):包含:局部代碼塊(方法或其它代碼塊內(nèi))2.靜態(tài)代碼塊:(類(lèi)體中)作用:
1.初始化成員變量。執(zhí)行流程:
1.普通構(gòu)造代碼塊:每次實(shí)例化此類(lèi)對(duì)象時(shí),會(huì)被執(zhí)行。它會(huì)先于“構(gòu)造方法”被執(zhí)行; 2.靜態(tài)代碼塊:第一次實(shí)例化此類(lèi)對(duì)象時(shí); 3.靜態(tài)代碼塊-->普通構(gòu)造代碼塊-->構(gòu)造方法:
二.繼承(必須掌握):
1.使用關(guān)鍵字:extends 2.作用:代碼重用。為多態(tài)提供了前提; 3.this和super的區(qū)別:
1).this:
1).在任何類(lèi)中使用; 2).存儲(chǔ)的是本類(lèi)對(duì)象的引用;
3).可以訪問(wèn)本對(duì)象的成員變量、成員方法、構(gòu)造方法;
2).super:
1).在子類(lèi)中使用;
2).存儲(chǔ)的是父類(lèi)對(duì)象的引用;
3).可以訪問(wèn)父類(lèi)對(duì)象的成員變量、成員方法、構(gòu)造方法;
4.類(lèi)的初始化過(guò)程:
加載class文件 堆中開(kāi)辟空間 變量的默認(rèn)初始化 變量的顯示初始化 構(gòu)造代碼塊初始化 構(gòu)造方法初始化
成員變量-->構(gòu)造代碼塊-->構(gòu)造方法 5.Java中繼承的特點(diǎn):
1).Java中只能單繼承; 2).Java中可以多級(jí)繼承;
6.繼承的好處和弊端:
好處: 1).代碼復(fù)用
2).為多態(tài)提供了前提; 弊端:
1).由于繼承,子類(lèi)對(duì)父類(lèi)產(chǎn)生了依賴(lài);
三.方法重寫(xiě):
1.在子類(lèi)中,定義跟父類(lèi)一模一樣的方法,這叫:方法重寫(xiě); 2.重寫(xiě)的規(guī)則:
1).返回值類(lèi)型、方法名、形參列表:要完全一致; 2).子類(lèi)的訪問(wèn)修飾符可以跟父類(lèi)的相同,或更寬;
3.重寫(xiě)的意義: 1).子類(lèi)保留了父類(lèi)的方法,具有了自己特有的行為;
4.重寫(xiě)和重載的區(qū)別: 1).重寫(xiě):在子類(lèi)中定義跟父類(lèi)一模一樣的方法;
2).重載:在一個(gè)類(lèi)中,定義:方法名相同,參數(shù)列表不完全相同的方法,叫:重載。跟返回值類(lèi)型無(wú)關(guān);
四.final關(guān)鍵字:
1.可以修飾: 成員變量:表示其變量擁有最終的值,不能被更改,成為“常量”。修飾基本數(shù)據(jù)類(lèi)型:表示其值不能被修改。修飾引用數(shù)據(jù)類(lèi)型,表示地址不能被修改;
成員方法:表示最終的方法。不能被重寫(xiě); 類(lèi):
表示最終類(lèi)。不能被繼承;
局部變量:表示其值不能改變;區(qū)分:基本類(lèi)型和引用類(lèi)型; 方法形參:表示其值不能改變;區(qū)分:基本類(lèi)型和引用類(lèi)型;
DAY11
一.多態(tài):
1.父類(lèi)的引用指向子類(lèi)的對(duì)象; 2.多態(tài)前提和體現(xiàn)
1).有繼承關(guān)系 2).有方法重寫(xiě)
3).有父類(lèi)引用指向子類(lèi)對(duì)象
3.多態(tài)的轉(zhuǎn)型:
1).自動(dòng)轉(zhuǎn)型:子類(lèi)的引用轉(zhuǎn)為父類(lèi)的引用;Person p = new Student();2).強(qiáng)制轉(zhuǎn)型:父類(lèi)的引用轉(zhuǎn)為它所指向的子類(lèi)對(duì)象的引用;Student stu =(Student)p;3).在進(jìn)行強(qiáng)制轉(zhuǎn)型前,為保證安全,可以使用instanceof關(guān)鍵字進(jìn)行判斷:
if(p instanceof Student){ } Student stu =(Student)p;4.多態(tài)的好處:
1).提高了程序的維護(hù)性(由繼承保證)2).提高了程序的擴(kuò)展性(由多態(tài)保證)
5.多態(tài)的弊端: 1).不能訪問(wèn)子類(lèi)特有功能(可以向下轉(zhuǎn)型)6.多態(tài)時(shí)的訪問(wèn)規(guī)則:
1).總體規(guī)則:訪問(wèn)的任何成員父類(lèi)中必須要有,否則編譯錯(cuò)誤;
例如:
class A{ } class B extends A{ } main(){
} A a = new B();System.out.println(a.n);//編譯錯(cuò)誤,父類(lèi)中沒(méi)有n int n = 20;int num = 10;2).成員變量:如果子、父類(lèi)中都有,訪問(wèn)的是“父類(lèi)”的;
class A{ } class B extends A { } main(){
} A a = new B();//多態(tài)
System.out.println(a.num);//打印10;
int num = 20;int num = 10;
普通方法:如果子、父類(lèi)中都有(重寫(xiě)),訪問(wèn)的是“子類(lèi)”的;
class A{
} class B extends A{
} main(){
} A a = new B();a.show();
//打印:B-->show()(訪問(wèn)的是子類(lèi)的show());void show(){ } System.out.println(“B-->show()”);void show(){ } System.out.println(“A-->show()”);
靜態(tài)方法:如果子、父類(lèi)中都有(重寫(xiě)),訪問(wèn)的是“父類(lèi)”的;
二.抽象類(lèi):
1.使用abstract關(guān)鍵字修飾;可以修飾“類(lèi)”,可以修飾“成員方法”;
abstract class A{ } abstract void show();2.“抽象類(lèi)”的特點(diǎn):
1).不能被實(shí)例化,只能用于被繼承;
2).可以包含:成員變量、構(gòu)造方法、成員方法、抽象方法; 3).可以不包含抽象方法;
3.“抽象方法”的特點(diǎn):
1).沒(méi)有方法體;abstract void show();2).必須被子類(lèi)重寫(xiě)。除非子類(lèi)也是個(gè)抽象類(lèi);
3.子類(lèi)繼承抽象類(lèi)使用關(guān)鍵字:extends,仍然是單繼承;
4.一個(gè)子類(lèi)繼承 了一個(gè)抽象類(lèi),必須實(shí)現(xiàn)抽象類(lèi)中所有的抽象方法;
否則子類(lèi)也必須是抽象的。
例如:
abstract class A{ } class B extends A{ }
//編譯錯(cuò)誤。類(lèi)B不是抽象的,繼承類(lèi)抽象類(lèi)必須重寫(xiě)抽象類(lèi)中的所有abstract void show();抽象方法。abstract class B extends A{ } //編譯通過(guò)。類(lèi)B沒(méi)有重寫(xiě)父類(lèi)中的抽象方法,但類(lèi)B是抽象的。
5.abstract關(guān)鍵字不能和哪些關(guān)鍵字共存:
1.private:抽象方法就是用來(lái)被子類(lèi)重寫(xiě)的,而私有方法不能被子類(lèi)重寫(xiě);
2.final:抽象類(lèi)和抽象方法就是用來(lái)被子類(lèi)繼承和重寫(xiě)的,而fianl類(lèi)和final方法不能
被繼承和重寫(xiě); 3.static:static修飾的方法在沒(méi)有任何對(duì)象的情況下就會(huì)被分配內(nèi)存空間;而抽象方法
沒(méi)有方法體,無(wú)法分配空間;
三.接口:
1.使用interface關(guān)鍵字定義:只能修飾“類(lèi)”:
interface IA{ } 2.“接口”的特點(diǎn):
1).不能被實(shí)例化,沒(méi)有構(gòu)造方法,只能用于子類(lèi)“實(shí)現(xiàn)”; 2).可以包含:
A.成員變量(常量):隱式的定義為:public static final。
例如: interface IA{
} public int num1 = 10;
//OK
上述三個(gè)關(guān)鍵字中任何一個(gè)都可以不寫(xiě),系統(tǒng)會(huì)自動(dòng)添加;
static final int num2 = 20;//OK final int num3 = 30;
//OK
//OK public final num4 = 40;int num5 = 50;
//OK B.抽象方法:隱式的定義為:public abstract??梢允÷?,系統(tǒng)會(huì)自動(dòng)添加
例如: interface IA{
} void show1();
//OK
//OK;public void show2();abstract void show3();//OK;3).接口的功能是:擴(kuò)展功能;
3.子類(lèi)實(shí)現(xiàn)接口使用關(guān)鍵字:implements 4.一個(gè)子類(lèi)可以同時(shí)實(shí)現(xiàn)多個(gè)接口;
interface IA{} interface IB{} class C implements IA,IB{ //OK的。} 5.子類(lèi)實(shí)現(xiàn)接口時(shí),必須重寫(xiě)接口中所有的抽象方法,而且必須是public的--因?yàn)?/p>
接口中抽象方法的定義隱式的是public的。
例如:
interface IA{ } class B implements IA{ void show(){ }
//編譯錯(cuò)誤。父接口的show()隱式的為public的,子類(lèi)重寫(xiě)時(shí)void show();必須是public的;
} 5.接口編譯后一樣會(huì)生成.class文件。
四.多態(tài)的形式:
1.父類(lèi)的多態(tài); 2.抽象類(lèi)多態(tài); 3.接口多態(tài);
五.類(lèi)與類(lèi),類(lèi)與接口,接口與接口的關(guān)系:
1.類(lèi)與類(lèi):繼承關(guān)系,關(guān)鍵字:extends,只能單繼承,但是可以多層繼承
2.類(lèi)與接口:實(shí)現(xiàn)關(guān)系,關(guān)鍵字:implements,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)。還可以在繼承一個(gè)類(lèi)的同時(shí)實(shí)現(xiàn)多個(gè)接口
3.接口與接口:繼承關(guān)系,關(guān)鍵字:extends,可以單繼承,也可以多繼承
例如:
interface IA{} interface IB{} interface IC extends IA,IB{} //OK的
六.抽象類(lèi)和接口的區(qū)別:
1.成員區(qū)別 1).抽象類(lèi) 變量,常量;有抽象方法;抽象方法,非抽象方法
七.2).接口 常量;抽象方法
2.關(guān)系區(qū)別
1).類(lèi)與類(lèi) 繼承,單繼承
2).類(lèi)與接口 實(shí)現(xiàn),單實(shí)現(xiàn),多實(shí)現(xiàn) 3).接口與接口 繼承,單繼承,多繼承
3.設(shè)計(jì)理念區(qū)別
1).抽象類(lèi) 被繼承體現(xiàn)的是:”is a”的關(guān)系。共性功能 2).接口 被實(shí)現(xiàn)體現(xiàn)的是:”like a”的關(guān)系。擴(kuò)展功能
一.類(lèi)名作為形參:
1.實(shí)參可以是:
1).此類(lèi)對(duì)象的引用;2).null;3).此類(lèi)子類(lèi)對(duì)象的引用;
二.抽象類(lèi)作為形參:
1.實(shí)參可以是:
1).此類(lèi)子類(lèi)對(duì)象的引用; 2).null;
三.接口作為形參:
1.實(shí)參可以是:
1).此接口子類(lèi)對(duì)象的引用; 2).null;
四.類(lèi)名作為返回值:
1.可以返回的類(lèi)型:
1).此類(lèi)對(duì)象的引用; 2).null;
3).此類(lèi)子類(lèi)對(duì)象的引用;
2.可以用什么類(lèi)型接收:
1).使用此類(lèi)類(lèi)型;
2).不能使用某個(gè)子類(lèi)類(lèi)型接收;
五.抽象類(lèi)作為返回值:
1.可以返回的類(lèi)型:
1).null;2).此類(lèi)子類(lèi)對(duì)象的引用;
2.可以用什么類(lèi)型接收:
1).使用此類(lèi)類(lèi)型;(多態(tài))2).不能使用某個(gè)子類(lèi)類(lèi)型接收;
六.接口作為返回值:
1.可以返回的類(lèi)型:
1).null;2).此接口子類(lèi)對(duì)象的引用;
2.可以用什么類(lèi)型接收:
1).使用此接口類(lèi)型;(多態(tài))2).不能使用某個(gè)子類(lèi)類(lèi)型接收;
DAY12
一.包:
1.定義包使用關(guān)鍵字:package;
1).注意事項(xiàng):
A.package語(yǔ)句必須是程序的第一條可執(zhí)行的代碼 B.package語(yǔ)句在一個(gè)java文件中只能有一個(gè) C.如果沒(méi)有package,默認(rèn)表示無(wú)包名
2.導(dǎo)入包使用關(guān)鍵字:import;
1).注意事項(xiàng):
A.導(dǎo)入到最終的類(lèi);
B.可以使用通配符:*,只統(tǒng)配包下的類(lèi),不包括子包下的其它類(lèi); C.在一個(gè)類(lèi)文件中,可以有多條import語(yǔ)句;
D.import語(yǔ)句必須在package語(yǔ)句之后,在定義類(lèi)之前;
3.package,import,class有沒(méi)有順序關(guān)系? 有:package-->import-->class 二.訪問(wèn)修飾符:
1.用于限定“類(lèi)”和“成員”被其它包下的其它類(lèi)訪問(wèn)的; 2.四種訪問(wèn)修飾符:
1).public(公有):可以修飾類(lèi)、成員??梢员蝗魏伟碌钠渌?lèi)訪問(wèn); 2).protected(保護(hù)):可以修飾成員??梢员煌碌钠渌?lèi)訪問(wèn)。如果在包外
只能被子類(lèi)訪問(wèn);
3).(默認(rèn)):可以修飾類(lèi)、成員。只能被包內(nèi)的其它類(lèi)訪問(wèn); 4).private(私有):可以修飾成員。只能被類(lèi)中的其它方法訪問(wèn);
3.類(lèi)及成員可用的修飾符:
1).類(lèi):
默認(rèn),public,final,abstract 我們自己定義:public居多
2).成員變量:
四種權(quán)限修飾符均可,final,static 我們自己定義:private居多
3).構(gòu)造方法:
四種權(quán)限修飾符均可,其他不可 我們自己定義:public 居多
4).成員方法:
四種權(quán)限修飾符均可,fianl,static,abstract 我們自己定義:public居多
三.內(nèi)部類(lèi):
1.成員內(nèi)部類(lèi):
1).定義在類(lèi)體中,作為類(lèi)的成員;
2).可以使用同類(lèi)“成員方法”相同的修飾符;
2.局部?jī)?nèi)部類(lèi):
1).定義在某個(gè)方法或代碼塊內(nèi)部;
2).不能使用“訪問(wèn)修飾符”,不能使用static修飾符;可以使用final和abstract 3).注意:局部?jī)?nèi)部類(lèi)訪問(wèn)“局部變量”,要求局部變量必須是final的(常量);(重點(diǎn))
3.匿名內(nèi)部類(lèi):
1).就是內(nèi)部類(lèi)的簡(jiǎn)化寫(xiě)法。2).前提:存在一個(gè)類(lèi)或者接口 這里的類(lèi)可以是具體類(lèi)也可以是抽象類(lèi)。
3).格式: new 類(lèi)名或者接口名(){重寫(xiě)方法;} 4).本質(zhì): 是一個(gè)繼承了類(lèi)或者實(shí)現(xiàn)了接口的子類(lèi)匿名對(duì)象
DAY14 一.Object類(lèi):
1.所有引用數(shù)據(jù)類(lèi)型(包括類(lèi)庫(kù)中的類(lèi),自定義類(lèi),數(shù)組)的超類(lèi); 2.定義在java.lang包,使用時(shí)不需要導(dǎo)包; 3.常用方法:
public class Object{ public Object(){
內(nèi)存的操作;
} public int hashCode(){ //功能:用于哈希表結(jié)構(gòu)的鍵值
//默認(rèn)實(shí)現(xiàn):將此對(duì)象的地址轉(zhuǎn)換為int值返回;
//此方法建議子類(lèi)重寫(xiě);
} public final Class getClass(){ //功能:獲取此對(duì)象的Class對(duì)象,在day27講解
//此方法不能被子類(lèi)重寫(xiě) } public String toString(){ //功能:返回此對(duì)象的字符串表現(xiàn)形式;
//默認(rèn)實(shí)現(xiàn):全名限定的類(lèi)名 + @ + hashCode(無(wú)意義)//此方法建議子類(lèi)重寫(xiě);
} public boolean equals(Object obj){ //功能:將當(dāng)前對(duì)象與參數(shù)對(duì)象進(jìn)行比較
//默認(rèn)實(shí)現(xiàn):比較地址(跟==的結(jié)果是一樣的)//此方法建議子類(lèi)重寫(xiě);
} protected void finalize(){ //功能:當(dāng)前對(duì)象在被垃圾回收器回收前,由垃圾回收器自動(dòng)調(diào)用的方法。一般用于做些釋放 //默認(rèn)實(shí)現(xiàn):無(wú)
//此方法根據(jù)需要由子類(lèi)重寫(xiě)(一般我們不用)}
} protected Object clone(){
} //功能:復(fù)制此對(duì)象的副本; //默認(rèn)實(shí)現(xiàn):本地方法 //一般子類(lèi)無(wú)需重寫(xiě);
--
二.java.lang.String類(lèi):
1.一個(gè)“字符串”對(duì)象; 2.一個(gè)“引用數(shù)據(jù)類(lèi)型”; 3.使用方式:
String s1 = “abc”;(常用、存儲(chǔ)的是常量池中的地址)或:
String s1 = new String(“abc”);(存儲(chǔ)的是堆中的地址)(在內(nèi)存中創(chuàng)建了兩個(gè)對(duì)象:1.常量池:“abc”;
class Student(extends Object){ } //默認(rèn)就擁有了Object類(lèi)中可以繼承的方法;
2.堆:new String())
4.特點(diǎn):其“值”的內(nèi)容不能改變(地址可以改變);
String str = “你好”;str = “Java”;//原值被丟棄,存儲(chǔ)了新的地址;
5.常見(jiàn)面試題: String s1 = “abc”;
String s2 = “abc”;System.out.println(s1 == s2);//true--------
String s1 = “Hello”;String s2 = “World”;String s3 = “HelloWorld”;String s4 = “Hello” + “World”;String s5 = s1 + s2;String s6 = “Hello” + s2;String s7 = s1 + “World”;String s8 = new String(“Hello”);System.out.println(s3 == s4);//true System.out.println(s3 == s5);//false System.out.println(s3 == s6);//false System.out.println(s3 == s7);//false System.out.println(s1 == s8);//false;6.構(gòu)造方法:
public String():構(gòu)造一個(gè)空字符串。效果同String str = “";public String(byte[] bytes):使用一個(gè)byte[]數(shù)組構(gòu)造一個(gè)字符串;
public String(byte[] bytes,int offset,int length):使用byte[]數(shù)組的一部分構(gòu)造一個(gè)字符串; public String(char[] value):使用一個(gè)字符數(shù)組構(gòu)造一個(gè)字符串;
public String(char[] value,int offset,int count):使用字符數(shù)組的一部分構(gòu)造一個(gè)字符串; public String(String original):使用一個(gè)字符串構(gòu)造一個(gè)字符串;
7.常用方法:----注意:以下方法返回String的,都是生成一個(gè)新字符串,原字符串不變; 1).判斷功能:
boolean equals(Object obj):重寫(xiě)父類(lèi)的方法。與參數(shù)字符串比較,如果包含一樣的字符序列則返回true,否則返回false;
boolean equalsIgnoreCase(String str):作用與equals()相同;但此方法不區(qū)分大小寫(xiě); boolean contains(String str):判斷是否包含參數(shù)字符串;
boolean startsWith(String str):判斷字符串是否以參數(shù)字符串開(kāi)頭; boolean endsWith(String str):判斷字符串是否以參數(shù)字符串結(jié)尾; boolean isEmpty():判斷字符串是否是”空字符串“;
----
String s1 = ”“;String s2 = new String();String s3 = new String(”“);String s4 = null;String s5 = ”“;String s6;System.out.println(s1.isEmpty());System.out.println(s2.isEmpty());System.out.println(s3.isEmpty());// System.out.println(s4.isEmpty());
System.out.println(s1.equals(s2));System.out.println(s2.equals(s3));System.out.println(s3.equals(s1));System.out.println(s1 == s2);System.out.println(s2 == s3);System.out.println(s1 == s3);System.out.println(s1 == s5);
System.out.println(s4 == s6);-----2).獲取功能:
int length():獲取此字符串內(nèi)部的字符數(shù)量。(區(qū)分?jǐn)?shù)組的length屬性)char charAt(int index):獲取此字符串中index位置的字符char;int indexOf(int ch):從左向右查找,獲取字符ch在字符串中第一次出現(xiàn)的位置。如果不包含,則返回:false
int indexOf(String str):獲取字符串str在此字符串中第一次出現(xiàn)的位置。int indexOf(int ch,int fromIndex):從fromIndex位置開(kāi)始,查找字符ch。int indexOf(String str,int fromIndex):從fromIndex位置開(kāi)始,查找str。
String substring(int start):從start(包含)開(kāi)始,截取到此字符串的末尾;返回一個(gè)新字符串,原字符串不變; String substring(int start,int end):從start(包含)到end(不包含)截取字符串;返回一個(gè)新字符串,原字符串不變;
3).轉(zhuǎn)換功能:
byte[] getBytes():將字符串轉(zhuǎn)換為一個(gè)byte[]數(shù)組。char[] toCharArray():將字符串轉(zhuǎn)換為一個(gè)char[]數(shù)組;
static String valueOf(char[] chs):靜態(tài)方法,將一個(gè)char[]數(shù)組轉(zhuǎn)換為一個(gè)String static String valueOf(int i):靜態(tài)方法,將一個(gè)int轉(zhuǎn)換為一個(gè)String String toLowerCase():轉(zhuǎn)換為小寫(xiě); String toUpperCase():轉(zhuǎn)換為大寫(xiě);
String concat(String str):將參數(shù)字符串添加到本字符串的末尾。
4).替換功能:
String replace(char old,char new):使用new字符替換本字符串中的所有old字符; String replace(String old,String new):使用new字符串替換本字符串中的所有old字符串;
5).其它功能:
String trim():去掉字符串兩邊的空格;不包括中間的。
int compareTo(String str):重寫(xiě)Comparable接口的方法。按Unicode編碼表的順序與參數(shù)字符串比較;
System.out.println(”a“.compareTo(”b“));//-1 System.out.println(”a“.compareTo(”a“));//0 System.out.println(”b“.compareTo(”a“));//1 int compareToIgnoreCase(String str):不區(qū)分大小寫(xiě)的比較;
DAY15 一.StringBuffer類(lèi):
1.String的緩沖池類(lèi)。
2.String和StringBuffer的區(qū)別:
1).String:其”值“不可變; 2).StringBuffer:其”值"可變;
當(dāng)我們多次進(jìn)行字符串的拼接等操作時(shí),使用String會(huì)產(chǎn)生大量的垃圾空間。建議使用此類(lèi); 2.構(gòu)造方法:
public StringBuffer():初始容量16 public StringBuffer(int capacity):初始容量capacity public StringBuffer(String str):使用String構(gòu)造一個(gè)StringBuffer。
3.添加功能:
public StringBuffer append(String str):及各種重載的方法。將任何類(lèi)型的參數(shù)添加到末尾; public StringBuffer insert(int offset,String str):將一個(gè)String插入到offset位置。原位置上的字符依次后移;
4.刪除功能:
public StringBuffer deleteCharAt(int index):刪除index位置上的字符
public StringBuffer delete(int start,int end):刪除start到end-1處的所有字符;
5.替換功能: public StringBuffer replace(int start,int end,String str):將start到end處的所有字符替換為str;6.反轉(zhuǎn)功能: public StringBuffer reverse():反轉(zhuǎn)內(nèi)部字符串;
7.截取功能:
public String substring(int start):截取從start到結(jié)尾,返回一個(gè)新字符串; public String substring(int start,int end):截取從start到end-1處的所有字符;
二.StringBuffer類(lèi)和StringBuilder類(lèi)的區(qū)別:
1.StringBuffer是線程安全的; 2.StringBuilder是線程不安全的;
三.Arrays類(lèi):
1.對(duì)數(shù)組操作的類(lèi),沒(méi)有構(gòu)造方法,內(nèi)部包含了大量靜態(tài)的工具方法; 2.常用方法:
1).public static String toString(int[] a):將int[]數(shù)組轉(zhuǎn)換為String的表示形式; 2).public static void sort(int[] a):升序排序int[]數(shù)組;
3).public static int binarySearch(int[] a,int key):二分查找int[]數(shù)組中的key值;
四.包裝類(lèi):
基本數(shù)據(jù)類(lèi)型 byte short int long char float 包裝類(lèi)型
Byte Short Integer
Long Character Float Double Boolean double boolean