Java基礎(chǔ)

Java基礎(chǔ)教案

怎么學(xué)習(xí)Java:多想需忿,多練

思想是學(xué)出來的谍夭,我給大家一個(gè)問題紊撕,如何來解決它罢荡,現(xiàn)在來說很多人是沒有思路的

我要做的就是給大家這樣一個(gè)思路,學(xué)的多了,練得多了区赵,在遇到問題的時(shí)候惭缰,也就

逐漸的形成了這個(gè)解決問題的思維

為什么很多公司招有3-5年工作經(jīng)驗(yàn)的開發(fā)人員,工資又高笼才,是因?yàn)榧矣幸焕先缬幸粚?/p>

公司還是喜歡招年輕人的工作有動(dòng)力从媚。招有工作經(jīng)驗(yàn)多的人是因?yàn)樗谶@么多年的工作

中遇到的問題多,解決的問題患整,他的經(jīng)驗(yàn)就是他寶貴的財(cái)富拜效。

Java語言介紹

Java是一種編程語言,如C++,C,PHP等各谚。語言是溝通交流紧憾,傳遞信息的工具。

我與大家之間通過漢語交流昌渤,那么java就是人類與計(jì)算機(jī)之間溝通交流赴穗,傳遞信息的工具。

Java的三大平臺(tái)

JavaSE Java的標(biāo)準(zhǔn)平臺(tái):包含了Java的基礎(chǔ)的功能膀息,學(xué)習(xí)的語法般眉,內(nèi)置的API方法

JavaEE Java的企業(yè)級應(yīng)用平臺(tái):JavaSE的基礎(chǔ)上,擴(kuò)展了一些API潜支,用于B/S結(jié)構(gòu)的企業(yè)應(yīng)用的開發(fā)

JavaME Java的移動(dòng)應(yīng)用平臺(tái):JavaSE縮微版甸赃,給嵌入式系統(tǒng)或移動(dòng)端系統(tǒng)使用過時(shí)

Java語言特點(diǎn)

1.跨平臺(tái)? 平臺(tái)-操作系統(tǒng)任何平臺(tái)上編寫的Java程序,可以在另外的平臺(tái)上執(zhí)行JDK Java的開發(fā)環(huán)境JRE Java的運(yùn)行環(huán)境 - Java虛擬機(jī)java文件 ->(編譯)class文件 ->Java虛擬機(jī)中運(yùn)行2.面向?qū)ο?以人類正常思維開發(fā)和設(shè)計(jì)軟件冗酿,開發(fā)程序開發(fā)方法:支撐大型的關(guān)系復(fù)雜系統(tǒng)的構(gòu)建3.多線程:支持多任務(wù)場景4.分布式:支持網(wǎng)絡(luò)應(yīng)用5.簡單:比C++簡單 指針埠对,回收(內(nèi)存泄露)Java中沒有指針, 系統(tǒng)自動(dòng)回收

變量和運(yùn)算符

Java中的變量

什么是變量:指在內(nèi)存中開辟的存儲(chǔ)空間裁替,用于存放在運(yùn)算過程中用到的數(shù)據(jù)项玛。

(大家住在G2,公寓需要開通一個(gè)房間給大家弱判,提高大家居捉缶凇)

(插卡游戲機(jī)中,破解版的坦克大戰(zhàn)昌腰,魂斗羅可以無限設(shè)置多少條命开伏,我們在游戲中改變的

哪一個(gè)數(shù)據(jù)就是變量,用于表示玩家的生命數(shù))

如何聲明變量

例:Intid=123; (int是變量的類型id是變量名123是變量的賦值)Java中規(guī)定在使用一個(gè)變量前剥哑,必須對該變量進(jìn)行聲明并初始化聲明就是給變量一個(gè)數(shù)據(jù)類型硅则,初始化就是對變量賦值方式:聲明的同時(shí)初始化淹父,先聲明后初始化變量是一個(gè)代詞:指代的是內(nèi)存中的數(shù)據(jù)變量是可變化的量株婴,改變的是該變量所指代的數(shù)據(jù)。

變量的命名:

可以由字母,數(shù)字困介,”_”和“$”組成大审。不能以數(shù)字開頭,區(qū)分大小寫座哩,不能使用java的關(guān)鍵字和保留字可以使用中文命名但不建議使用徒扶。建議:見名知意? 駝峰命名法

Java中的8中基本數(shù)據(jù)類型

整數(shù)類型:byte1Byteshort2Byteint4Byte(整數(shù)的默認(rèn)類型)long8Byte浮點(diǎn)數(shù)類型float4Bytedouble8Byte(浮點(diǎn)數(shù)的默認(rèn)類型)字符類型char2Byte? 存儲(chǔ)一個(gè)字符(英文,漢字...)布爾類型boolean1Bytetrue(真)false(假)

基本數(shù)據(jù)類型之間的轉(zhuǎn)換

1.自動(dòng)類型轉(zhuǎn)換(隱式轉(zhuǎn)換):從小到大2.強(qiáng)制類型轉(zhuǎn)換 :intnum=(int)5.21;? ? Double ->int會(huì)造成精度的缺失根穷,對數(shù)據(jù)產(chǎn)生影響姜骡。? ? Byteshortchar轉(zhuǎn)為int(三種類型實(shí)際存儲(chǔ)的數(shù)據(jù)都是整數(shù))? ? 整數(shù)直接量可以直接賦值給Byteshortchar(大->小 系統(tǒng)幫忙轉(zhuǎn)了)? ? Byteshortchar三種類型參與運(yùn)算時(shí),先一律轉(zhuǎn)成int再進(jìn)行運(yùn)算

Java中的運(yùn)算符

除法(/)適用于兩個(gè)整數(shù)屿良,結(jié)果舍棄小數(shù)部分取余(%) 適用于整數(shù)圈澈,char,浮點(diǎn)數(shù):結(jié)果取決于除數(shù)的正負(fù)。自增(++):使變量的值+1尘惧;自減(--):使變量的值-1康栈;注意:參與運(yùn)算時(shí),運(yùn)算符寫在變量前喷橙,變量后的效果不同關(guān)系運(yùn)算符:用于判斷數(shù)據(jù)之間的大小關(guān)系:(>,<,>=,<=,==,!=)關(guān)系運(yùn)算的結(jié)果為boolean(true/false)邏輯運(yùn)算符: &&(與) ,||(或),!(非)&&(與):多個(gè)條件同時(shí)滿足啥么。整個(gè)表達(dá)式為true||(或):多個(gè)表達(dá)式中,只要有一個(gè)滿足贰逾,整個(gè)表達(dá)式為true悬荣。!(非):非真則假,非假則真疙剑。短路問題11&17運(yùn)算 二進(jìn)制 (1-1為1其余為0)參與邏輯運(yùn)算的表達(dá)式的結(jié)果都是布爾值隅熙。特殊的運(yùn)算符:+=,-=核芽,*=囚戚,/=三目運(yùn)算表達(dá)式:(boolean)表達(dá)式?表達(dá)式1:表達(dá)式2先計(jì)算(boolean)表達(dá)式轧简,若為true驰坊,則整個(gè)表達(dá)式返回表達(dá)式1若為false則整個(gè)表達(dá)式返回表達(dá)式2移位運(yùn)算符(了解)<< 左移>> 右移2<<3==162的 二進(jìn)制表示10%216的 二進(jìn)制表示10000%16負(fù)數(shù)N(-35)轉(zhuǎn)成二進(jìn)制先將35的二進(jìn)制數(shù)求出00100011全部位安位取反11000100再加1:11000101

流程控制語句

分支結(jié)構(gòu):if:if(邏輯表達(dá)式){ 語句塊 } 如果邏輯表達(dá)式成立,則執(zhí)行語句塊代碼If( ){? }else{? } ;if(){? }elseif(){? }switchcase:--breakIf-else-if:相對靈活 ;switchcase:結(jié)構(gòu)更清晰循環(huán)結(jié)構(gòu):for,wihle,do-whilewhile:while( 表達(dá)式){ 語句塊 } :先判斷在執(zhí)行do{ 語句塊}while(表達(dá)式):先執(zhí)行一次哮独,在判斷for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3){ 循環(huán)體 }? 一般用于固定次數(shù)的循環(huán)表達(dá)式1:循環(huán)變量的初始化表達(dá)式2:循環(huán)條件表達(dá)式3:循環(huán)變量的改變Break;跳出循環(huán)拳芙,使用continue跳過本次循環(huán)進(jìn)入下次循環(huán)

or循環(huán)輸出1 到100

while循環(huán)輸出1-100

計(jì)算2000年1月1日到2008年1月1日相距多少天

輸出1 到100的累加和

求100以內(nèi)所有偶數(shù)的和

求整數(shù)1~100的累加值,但要求跳過所有個(gè)位為3的數(shù)

循環(huán)輸入大于0的數(shù)字進(jìn)行累加皮璧,直到輸入的數(shù)字為0舟扎,就結(jié)束循環(huán),并最后輸出累加的結(jié)果

打印出?100~999之間的所有“水仙花數(shù)”悴务。所謂“水仙花數(shù)”睹限,是指一個(gè)3

位數(shù)譬猫,其各位數(shù)字立方和等于該數(shù)本身

輸入一個(gè)整數(shù)N,判斷該數(shù)是不是質(zhì)數(shù)羡疗,如果是質(zhì)數(shù)輸出"N是一個(gè)質(zhì)數(shù)"染服,否

則輸出"N不是質(zhì)數(shù)"。提

示:除了1和它本身不能被任何數(shù)整除

求9的階乘;9!=123456789?

猜數(shù)字游戲.

數(shù)組

什么是數(shù)組:

? 什么是數(shù)組:Java中用于存儲(chǔ)數(shù)據(jù)的容器叨恨。

? 數(shù)組的聲明和創(chuàng)建:引用數(shù)據(jù)類型的方式

數(shù)組的初始化:

1.int[] arr=newint[]{1,2,3,4,5};2.int[]arr=newint[5];3.int[] arr={1,2,3,4,5};

數(shù)組元素的訪問:

在JAVA中通過下標(biāo)訪問數(shù)組的元素柳刮,數(shù)組的下標(biāo)從0開始,表示第一個(gè)元素

數(shù)組的屬性:長度length,表示數(shù)組的長度

利用數(shù)組的屬性length痒钝,遍歷數(shù)組

for(inti=0; i

數(shù)組的異常:當(dāng)訪問數(shù)組下標(biāo)超過數(shù)組大小時(shí)秉颗,會(huì)報(bào)異常,數(shù)組下標(biāo)越界

方法的定義及調(diào)用

微信紅包小程序publicclassWeiCat{? ? publicstaticvoidmain(String[] args) {// TODO Auto-generated method stubStringwid="cl666";//微信號Stringpwd="cl123456";//微信密碼StringpayID="888888";//支付密碼double balance=800;//紅包零錢double money=0;Stringupay;? ? ? ? Scanner scan=newScanner(System.in);while(true){? ? ? ? ? ? System.out.println("微信號");Stringuwid=scan.next();? ? ? ? ? ? System.out.println("請輸入密碼");Stringupwd=scan.next();if(uwid.equals(wid)&&upwd.equals(pwd)){//登陸成功break;? ? ? ? ? ? }else{//登陸失敗System.out.println("請重新登陸");? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? System.out.println("1.發(fā)紅包? 2.轉(zhuǎn)賬? 3.提現(xiàn)? 4.充值");? ? ? ? int num=scan.nextInt();switch(num){case1:? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入紅包金額");? ? ? ? ? ? ? ? money=scan.nextDouble();if(money>balance){? ? ? ? ? ? ? ? ? ? System.out.println("紅包零錢不足");? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? System.out.println("請輸入支付密碼");? ? ? ? ? ? ? ? ? ? upay=scan.next();if(upay.equals(payID)){? ? ? ? ? ? ? ? ? ? ? ? System.out.println("紅包發(fā)生成功");? ? ? ? ? ? ? ? ? ? ? ? balance-=money;? ? ? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ? System.out.println("支付密碼有誤");? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }break;case2:break;case3:break;case4:break;default:? ? ? ? ? ? System.out.println("選項(xiàng)無效");? ? ? ? }? ? ? ? ? ? }}

什么是方法:完成某個(gè)特定功能的語句送矩。? ? ? 特定功能就是一段具有運(yùn)算功能的代碼隨著學(xué)習(xí)的深入站宗,代碼量會(huì)隨之增多。之前都寫在一個(gè)main方法中 益愈,如果代碼量達(dá)到幾千行 甚至一萬行的話 梢灭,對于程序的可視化效果 與分析都非常不好,所以使用方法將代碼進(jìn)行簡化生活案例:電飯煲? 自動(dòng)販賣機(jī)? 壓汁機(jī)特點(diǎn):使用者無需了解工具具體的內(nèi)部實(shí)現(xiàn)? 只需了解工具的使用規(guī)則方法的例子:System.out.print(); 方法的特點(diǎn) 都有小括號Arrays.sort()Arrays.copyOf()? 具有運(yùn)算的功能使用方法編程的優(yōu)點(diǎn):保證一個(gè)方法 只做一件事? 銀行:存錢( )? 取錢( )? 余額( )? ? ? ? 操作( 存錢? 取錢? 余額)減少代碼的復(fù)用 蒸其,便于程序的維護(hù)? 方法的特點(diǎn):方法的調(diào)用者無需知道方法的內(nèi)部實(shí)現(xiàn) 只需了解方法需要的參數(shù)即可方法的定義:[ 訪問控制符 ][ 修飾符 ]返回值類型 方法名([參數(shù)類型 參數(shù)名]){? }[ 訪問控制符 ][ 修飾符 ]:后續(xù)進(jìn)行講解返回值類型:該方法運(yùn)算結(jié)果的數(shù)據(jù)類型(Object,基本數(shù)據(jù)類型,引用類型)? ? ? ? ? ? 如果聲明的返回值類型與實(shí)際返回的類型不同敏释,會(huì)編譯報(bào)錯(cuò)? ? ? ? ? ? 方法名([參數(shù)類型 參數(shù)名]):統(tǒng)稱參數(shù)列表? ? ? 方法名:作為調(diào)用該方法的標(biāo)識? ? ? 參數(shù):作為方法中運(yùn)算時(shí)用到的數(shù)據(jù),個(gè)數(shù)沒有限制,若有參數(shù)摸袁,要聲明參數(shù)類型? ? ? 方法體:是一個(gè)語句塊钥顽,執(zhí)行特定的功能代碼return:返回值的關(guān)鍵字方法的分類:根據(jù)參數(shù)個(gè)數(shù):? ? 有參方法? ? 無參方法根據(jù)返回值類型? ? 有返回值的方法? ? 無返回值的方法

參數(shù)與返回值類型的多樣化

1. 參數(shù):3個(gè)? 類型:Stringintint返回值類型:boolean在保存了多個(gè)學(xué)生姓名的數(shù)組中,指定查找區(qū)間靠汁,查找某個(gè)學(xué)生姓名并顯示是否查找成功

publicstaticbooleanselectName(String str ,intstart,intend ){if(start<0){? ? ? ? ? ? start=0;? ? ? ? }if(end>=names.length-1){? ? ? ? ? ? start=names.length-1;? ? ? ? }for(inti=start ;start<=end;i++){if(names[i].equals(str)){returntrue;? ? ? ? ? ? }? ? ? ? }returnfalse;? ? ? ? }

2.參數(shù):1個(gè)? 類型:int[ ]? 返回值:double/int有5位學(xué)員參加了Java知識競賽的決賽蜂大,輸出決賽的平均成績和最高成績

//求平均成績publicstaticdoublegetAvg(int[] score){intsum=0;for(inti=0;i

//求最大值publicstaticdoublegetMax(int[] score){? ? ? ? Arrays.sort(score);returnscore[score.length-1];? ? }

3.參數(shù):1個(gè)? 類型:int[ ]? 返回值:int[ ]在保存多個(gè)學(xué)生成績的數(shù)組中,將學(xué)生的成績安裝升序排序

publicstaticint[] sortArray(int[] score){? ? ? ? Arrays.sort(score);returnscore;? ? }

publicstaticint[] sortArray1(int[] score){inttemp;for(inti=0;iscore[j+1]){? ? ? ? ? ? ? ? ? ? temp=score[j];? ? ? ? ? ? ? ? ? ? score[j]=score[j+1];? ? ? ? ? ? ? ? ? ? score[j+1]=temp;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }returnscore;? ? }

4.參數(shù):0類型:無? 返回值:int求1—100之間的整數(shù)和

publicstaticintgetSum(){intsum=0;for(inti=1;i<=100;i++){? ? ? ? ? ? sum+=i;? ? ? ? }returnsum;? ? }

5.參數(shù):2個(gè)? 類型:int返回值:int求兩個(gè)整數(shù)區(qū)間的和

publicstaticintgetSum(inta,intb){intsum=0;for(inti=a;i<=b;i++){? ? ? ? ? ? sum+=i;? ? ? ? }returnsum;? ? }

6.參數(shù):3個(gè)? 類型:int返回值:double求三個(gè)整數(shù)的和

publicstaticintgetSum(inta1,inta2 ,inta3){returna1+a2+a3;? ? }

7.參數(shù):1個(gè)? 類型:char[ ]? 返回值:boolean用戶隨機(jī)輸入5個(gè)字符蝶怔,判斷是否為“回文”(例:abcba,12321)

publicstaticbooleancheckFlag(char[] c){booleanflag=true;for(inti=0;i

8.參數(shù):3個(gè)? 類型:int返回值:int隨機(jī)輸入不相同的三個(gè)整數(shù) 比較出其中的最大值

publicstaticintgetMax(inta,intb,intc){if(a>b&&a>c){returna;? ? ? ? }elseif(b>a&&b>c){returnb;? ? ? ? }elseif(c>a&&c>b){returnc;? ? ? ? }return0;? ? }

9.參數(shù):2個(gè)? 類型:int返回值 :int求兩個(gè)整數(shù)之間存在多少個(gè)奇數(shù)

publicstaticintcountNum(inta,intb){intcount=0;for(inti=a;i<=b;i++){if(i%2!=0){? ? ? ? ? ? ? ? count++;? ? ? ? ? ? }? ? ? ? }returncount;? ? }

10.參數(shù):1個(gè)? 類型:int返回值 :boolean隨機(jī)輸入一個(gè)年份 判斷是否為閏年

publicstaticbooleancheckYear(intyear){if(year%4==0&&year%100!=0||year%400==0){returntrue;? ? ? ? }returnfalse;? ? }

11.參數(shù):1個(gè)? 類型:char[ ]返回值:無輸入一行字符奶浦,分別統(tǒng)計(jì)出其中英文字母、數(shù)字和其它字符的個(gè)數(shù)

有一個(gè)方法被調(diào)用代碼為int[] arrs = sort(newStudent(12))? 求該方法的聲明代碼答案:publicint[] sort(Student arr)有一個(gè)方法被調(diào)用代碼為String[][] strs = sort(15),該方法的聲明代碼為答案:publicString[][] sort(intn)

參數(shù)的傳遞:

參數(shù)傳遞的過程實(shí)際就是把實(shí)參的值傳遞給形參的過程

方法的調(diào)用

在同一個(gè)類中static修飾的方法可以直接通過方法名進(jìn)行調(diào)用在不同的類中static修飾的方法 通過類名.方法名進(jìn)行調(diào)用非static修飾的方法 通過對象.方法名進(jìn)行調(diào)用

方法的重載

在同一個(gè)類中 允許同時(shí)存在多個(gè)方法名相同的方法

規(guī)則:

? 方法名必須相同

? 參數(shù)列表不同

? ? ? 參數(shù)個(gè)數(shù)不同

? ? ? 參數(shù)類型不同

? 與返回值類型無關(guān)

總結(jié)和練習(xí)

總結(jié)練習(xí): 猜字符游戲

? ? 1.設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)---變量

? ? 2.設(shè)計(jì)程序結(jié)構(gòu)—方法

? ? 3.設(shè)計(jì)實(shí)現(xiàn)----方法的實(shí)現(xiàn)? ?

publicclassGuess{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubScanner scan=newScanner(System.in);? ? ? ? String[] c=getChar();//? ? ? for(String c1:c){//? ? ? ? ? System.out.print(c1+" ");//? ? ? }System.out.println("開始猜吧..");? ? ? ? ? ? ? ? String[] cs;intcount=0;while(true){? ? ? ? ? ? System.out.println("請輸入第1個(gè)字母");? ? ? ? ? ? String input1=scan.next();? ? ? ? ? ? System.out.println("請輸入第2個(gè)字母");? ? ? ? ? ? String input2=scan.next();? ? ? ? ? ? System.out.println("請輸入第3個(gè)字母");? ? ? ? ? ? String input3=scan.next();? ? ? ? ? ? System.out.println("請輸入第4個(gè)字母");? ? ? ? ? ? String input4=scan.next();? ? ? ? ? ? System.out.println("請輸入第5個(gè)字母");? ? ? ? ? ? String input5=scan.next();? ? ? ? ? ? cs=newString[]{input1,input2,input3,input4,input5};int[] result=getResult(c,cs);? ? ? ? ? ? System.out.println("位置正確個(gè)數(shù):"+result[0]);? ? ? ? ? ? System.out.println("字符正確個(gè)數(shù):"+result[1]);if(result[0]==5&&result[1]==5){break;? ? ? ? ? ? }? ? ? ? ? ? count++;? ? ? }? ? ? System.out.println("您一共猜了"+count+"次");? ? }publicstaticString[] getChar(){? ? ? ? Random r=newRandom();intindex;? ? ? ? ? ? ? ? String[] ch=newString[5];? ? ? ? ? ? ? ? String[] cs={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};boolean[] flag=newboolean[cs.length];for(inti=0;i

面向?qū)ο?/p>

面向?qū)ο?是一種編程思想踢星,是對人類思維進(jìn)行歸納總結(jié)澳叉,在計(jì)算機(jī)中模擬現(xiàn)實(shí)世界的開發(fā)方法是以對象為核心,圍繞對象進(jìn)行操作

面向過程: 通常分析出解決問題需要的步驟沐悦,然后用方法把這些步驟實(shí)現(xiàn)成洗,最后一次調(diào)用這些方法。缺乏對參數(shù)的封裝藏否。

面向過程主要考慮的是程序的流程和算法而數(shù)據(jù)只是在需要時(shí)插入到算法中瓶殃。

為什么使用面向?qū)ο螅?/p>

? ? 可以解決復(fù)雜的關(guān)系和邏輯

? ? 利用人類的思維進(jìn)行編程

? ? 支持程序擴(kuò)展,維護(hù)性更換

如何實(shí)現(xiàn)面向?qū)ο螅毫私忸惡蛯ο?/p>

類:具有一類事物共同特征和行為的抽象副签。

? ? 鳥:- - - 就是抽象出來的對這類事務(wù)的描述 - - - 計(jì)算機(jī)中叫做 類(一種引用類型)

? ? ? ? 特征:翅膀 腳 眼睛? 行為:飛 吃

? ? 抽象中可能發(fā)生的問題:

? ? ? ? 認(rèn)知可能不準(zhǔn)確 - - - 強(qiáng)調(diào)”共有的”? 沒有忽略次要特征(與業(yè)務(wù)相關(guān)的特征)

對象:類在現(xiàn)實(shí)生活中的實(shí)例

Java程序完成類的創(chuàng)建

? ? 創(chuàng)建類的對象

? ? 操作累的屬性和方法

構(gòu)造方法:

? ? 在創(chuàng)建對象時(shí)遥椿,通過構(gòu)造方法完成對象的內(nèi)存開辟和初始化


構(gòu)造方法的特點(diǎn):

? ? 在開發(fā)中如果沒有編寫構(gòu)造方法基矮,系統(tǒng)會(huì)提共一個(gè)默認(rèn)的無參構(gòu)造方法,

? ? 但是若定義了任何類型的構(gòu)造方法修壕,系統(tǒng)則不會(huì)提供默認(rèn)構(gòu)造器

? ? 構(gòu)造方法可以重載

? ? 構(gòu)造方法不可以有返回值

? ? 通過有參構(gòu)造方法初始化屬性


This關(guān)鍵字:表示當(dāng)前對象的引用

? ? 使用情況:成員變量(屬性)與局部變量重名

? ? 在一個(gè)構(gòu)造器中 調(diào)用其他重載的構(gòu)造器

? ? 需要返回當(dāng)前對象的引用

publicclassCar{intnum=0;publicCargetCar(){? ? ? ? ? ? ? num++;returnthis;? ? ? ? }publicCargetCar(){? ? ? ? ? ? ? num++;returnnewCar();? ? ? ? }publicvoidsayNum(){? ? ? ? ? ? System.out.println(num);? ? ? ? }? ? }

對象的內(nèi)存模型

棧:保存基本數(shù)據(jù)類型的局部變量和引用類型的引用愈捅。? ? 特點(diǎn):存取速率塊遏考,效率高堆:new出來的對象都保存在堆中? ? 特點(diǎn):存儲(chǔ)對內(nèi)存空間要求較大的變量匿名對象 (newPerson().sayHi();) 該對象只使用一次垃圾回收器:? ? Java的垃圾回收機(jī)制是自動(dòng)的慈鸠,實(shí)際上是JVM內(nèi)部運(yùn)行的一個(gè)優(yōu)先級比較低的后臺(tái)線程? ? 垃圾回收機(jī)制僅僅作用于堆內(nèi)存中,與棧無關(guān)? ? ? ? 垃圾:堆中的內(nèi)容不存在任何引用指向它? ? 內(nèi)存泄露:不再使用的內(nèi)存沒有被及時(shí)的回收NewXd(); - -匿名對象

###? 撲克游戲 :publicclassPoke{privateString size;//牌號privateString color;//花色privateintcode;//大小publicintgetCode(){returncode;? ? }publicvoidsetCode(intcode){this.code = code;? ? }publicStringgetSize(){returnsize;? ? }publicvoidsetSize(String size){this.size = size;? ? }publicStringgetColor(){returncolor;? ? }publicvoidsetColor(String color){this.color = color;? ? }? ? ? ? @OverridepublicStringtoString(){return"size="+ size +", color="+ color +", code="+ code;? ? }}publicclassPokes{privateString[] colors={"紅桃","黑桃","方片","梅花"};privateString [] sizes={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};//生成52張撲克publicPoke[] getPoke(){intn=0;? ? ? ? Poke[] p=newPoke[52];for(inti=0;i

? ? ? ? * 隨機(jī)發(fā)牌

? ? ? ? * 莊家? 玩家

? ? ? ? * 1. 各發(fā)一張牌

? ? ? ? *? 莊家底牌顯示? 提示玩家 是否看底牌? 不看得分翻倍

? ? ? ? * 2.發(fā)第二張牌

? ? ? ? *? 第二張牌顯示? 提示是否看底牌 不看得分翻倍

? ? ? ? * 3.發(fā)第三張牌

? ? ? ? *? 直接翻牌

? ? ? ? * 發(fā)牌結(jié)束 雙方比較大小

? ? ? ? */// TODO Auto-generated method stubPokes ps=newPokes();? ? ? ? Poke[] p=ps.getPoke();intscore=1000;? ? ? ? System.out.println("歡迎來到 炸金花 PK大賽");while(score>0){? ? ? ? boolean[] flag=newboolean [p.length];intsz;intsx;? ? ? ? Scanner scan=newScanner(System.in);int[] xscore=newint[3];? ? ? ? ? ? ? ? System.out.println("第一輪發(fā)牌");? ? ? ? Poke pz1=getPoke(p,flag);? ? ? ? System.out.println("莊家: 底牌");? ? ? ? Poke px1=getPoke(p,flag);? ? ? ? System.out.println("玩家: 底牌");? ? ? ? ? ? ? ? System.out.println("玩家是否看牌:1.是? 2.不是");intnum=scan.nextInt();if(num==1){? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize());? ? ? ? }else{? ? ? ? ? ? System.out.println("玩家未看底牌");? ? ? ? }? ? ? ? System.out.println("請下注");? ? ? ? xscore[0]=scan.nextInt();? ? ? ? System.out.println("玩家下注:"+xscore[0]);if(num==2){? ? ? ? ? ? xscore[0]*=2;? ? ? ? }? ? ? ? System.out.println("第二輪發(fā)牌");? ? ? ? Poke pz2=getPoke(p,flag);? ? ? ? System.out.println("莊家:"+"底牌"+" "+pz2.getColor()+pz2.getSize());? ? ? ? ? ? ? ? ? ? Poke px2=getPoke(p,flag);if(num!=1){? ? ? ? ? ? System.out.println("玩家:"+"底牌"+" "+px2.getColor()+px2.getSize());? ? ? ? ? ? System.out.println("玩家家是否看牌:1.是? 2.不是");? ? ? ? ? ? num=scan.nextInt();if(num==1){? ? ? ? ? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize()+" "+px2.getColor()+px2.getSize());? ? ? ? ? ? }else{? ? ? ? ? ? ? ? System.out.println("玩家未看底牌");? ? ? ? ? ? }? ? ? ? }else{? ? ? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize()+" "+px2.getColor()+px2.getSize());? ? ? ? }? ? ? ? System.out.println("請下注");? ? ? ? xscore[1]=scan.nextInt();? ? ? ? System.out.println("玩家下注:"+xscore[1]);if(num==2){? ? ? ? ? ? xscore[1]*=2;? ? ? ? }? ? ? ? System.out.println("第三輪發(fā)牌");? ? ? ? Poke pz3=getPoke(p,flag);? ? ? ? System.out.println("莊家:"+"底牌"+" "+pz2.getColor()+pz2.getSize()+" "+pz3.getColor()+pz3.getSize());? ? ? ? Poke px3=getPoke(p,flag);if(num!=1){? ? ? ? ? ? System.out.println("玩家:"+"底牌"+" "+px2.getColor()+px2.getSize()+" "+px3.getColor()+px3.getSize());? ? ? ? ? ? System.out.println("玩家家是否看牌:1.是? 2.不是");? ? ? ? ? ? num=scan.nextInt();if(num==1){? ? ? ? ? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize()+" "+px2.getColor()+px2.getSize()+" "+px3.getColor()+px3.getSize());? ? ? ? ? ? }else{? ? ? ? ? ? ? ? System.out.println("玩家未看底牌");? ? ? ? ? ? }? ? ? ? }else{? ? ? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize()+" "+px2.getColor()+px2.getSize()+" "+px3.getColor()+px3.getSize());? ? ? ? }? ? ? ? System.out.println("請下注");? ? ? ? xscore[2]=scan.nextInt();? ? ? ? System.out.println("玩家下注:"+xscore[2]);if(num==2){? ? ? ? ? ? xscore[2]*=2;? ? ? ? }? ? ? ? ? ? ? ? Poke[] pokez={pz1,pz2,pz3};? ? ? ? Poke[] pokex={px1,px2,px3};? ? ? ? ? ? ? ? System.out.println("請雙方亮牌");? ? ? ? System.out.println("莊家:"+pz1.getColor()+pz1.getSize()+" "+pz2.getColor()+pz2.getSize()+" "+pz3.getColor()+pz3.getSize());? ? ? ? System.out.println("玩家:"+px1.getColor()+px1.getSize()+" "+px2.getColor()+px2.getSize()+" "+px3.getColor()+px3.getSize());? ? ? ? ? ? ? ? sz=setScore(getTpye(pokez));? ? ? ? sx=setScore(getTpye(pokex));? ? ? ? ? ? ? ? String result=show(sz,sx,pokez,pokex);if("玩家贏".equals(result)){? ? ? ? ? ? score+=xscore[0]+xscore[1]+xscore[2];? ? ? ? ? ? System.out.println("本輪玩家贏");? ? ? ? }else{? ? ? ? ? ? score-=xscore[0]+xscore[1]+xscore[2];? ? ? ? ? ? System.out.println("本輪莊家贏");? ? ? ? }? ? ? ? System.out.println("玩家積分"+score);? ? ? ? ? ? ? ? }? ? ? ? ? ? }publicstaticPokegetPoke(Poke[] p,boolean[] flag){? ? ? ? Random r=newRandom();intindex;do{? ? ? ? ? ? index=r.nextInt(p.length);? ? ? ? }while(flag[index]);? ? ? ? flag[index]=true;returnp[index];? ? }//比較牌面大小publicstaticStringgetTpye(Poke[] pz){? ? ? ? ? ? ? ? Poke p;for(inti=1;ipz[j+1].getCode()){? ? ? ? ? ? ? ? ? ? p=pz[j];? ? ? ? ? ? ? ? ? ? pz[j]=pz[j+1];? ? ? ? ? ? ? ? ? ? pz[j+1]=p;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? }if(pz[0].getSize().equals(pz[1].getSize())&&pz[1].getSize().equals(pz[2].getSize())){return"三條";? ? ? ? }if(pz[0].getSize().equals(pz[1].getSize())||pz[1].getSize().equals(pz[2].getSize())||pz[0].getSize().equals(pz[2].getSize())){return"一對";? ? ? ? }if(!pz[0].getSize().equals(pz[1].getSize())&&!pz[1].getSize().equals(pz[2].getSize())&&!pz[0].getSize().equals(pz[2].getSize())? ? ? ? ? ? ? ? &&(pz[0].getCode()+1!=pz[1].getCode()||pz[1].getCode()+1!=pz[2].getCode())){return"單牌";? ? ? ? }if(pz[0].getCode()+1==pz[1].getCode()&&pz[1].getCode()+1==pz[2].getCode()? ? ? ? ? ? ? ? &&pz[0].getColor().equals(pz[1].getColor())&&pz[1].getColor().equals(pz[2].getColor())){return"同花順";? ? ? ? }if(pz[0].getCode()+1==pz[1].getCode()&&pz[1].getCode()+1==pz[2].getCode()){return"順子";? ? ? ? }if(pz[0].getColor().equals(pz[1].getColor())&&pz[1].getColor().equals(pz[2].getColor())){return"同花";? ? ? ? }returnnull;? ? }//比較輸贏publicstaticStringshow(intpz,intpx,Poke[] pz1,Poke[] px1){if(pz==px){if(pz1[2].getCode()>px1[2].getCode()){return"莊家贏";? ? ? ? ? ? }else{return"玩家贏";? ? ? ? ? ? }? ? ? ? }if(pz>px){return"莊家贏";? ? ? ? }else{return"玩家贏";? ? ? ? }? ? ? ? ? ? }//牌面積分publicstaticintsetScore(String type){intscore=0;if(type.equals("同花順")){? ? ? ? ? ? score=6;? ? ? ? }if(type.equals("三條")){? ? ? ? ? ? score=5;? ? ? ? }if(type.equals("同花")){? ? ? ? ? ? score=4;? ? ? ? }if(type.equals("順子")){? ? ? ? ? ? score=3;? ? ? ? }if(type.equals("一對")){? ? ? ? ? ? score=2;? ? ? ? }if(type.equals("單牌")){? ? ? ? ? ? score=1;? ? ? ? }returnscore;? ? }}

面向?qū)ο蟾呒壧匦?/p>

為什么使用繼承:

? ? 不同的類之間存在一些相同的屬性和方法


? ? 所以將類中相同的屬性和方法提取到公共類中

StudentTeather

name : Stringname : String

age : intage : int

sid : inttyear : int

eat();eat();

exam();checkPaper();;

什么是繼承:Java中通過extends 關(guān)鍵字讓一個(gè)類繼承另一個(gè)類灌具,被繼承的類叫父類(超類青团,基類),新的類叫子類(派生類)咖楣。子類可以擁有父類所有的屬性和方法繼承的語法和規(guī)則:? ? 語法:publicclassStudentextendsPerson{? 屬性 方法 }繼承的優(yōu)點(diǎn):代碼的復(fù)用督笆。例:創(chuàng)建一個(gè)建設(shè)銀行的ATM類 ,實(shí)現(xiàn)密碼校驗(yàn)方法诱贿,取款方法娃肿,手機(jī)充值方法創(chuàng)建一個(gè)工商銀行的ATM類,實(shí)現(xiàn)密碼校驗(yàn)方法珠十,取款方法料扰,轉(zhuǎn)賬方法發(fā)現(xiàn):其實(shí)密碼校驗(yàn)以及取款是每個(gè)銀行的ATM都存在的功能,在編碼時(shí)寫了重復(fù)代碼焙蹭,這時(shí)可以創(chuàng)建ATM類晒杈,讓它實(shí)現(xiàn)校驗(yàn)密碼和取款的方法。而其它的ATM類繼承該類孔厉,就可以使用這些方法了拯钻。Java中是單一繼承,一個(gè)類只能有一個(gè)父類子類實(shí)例化的過程:? ? 子類實(shí)例化會(huì)先實(shí)例化其父類撰豺,父類構(gòu)造器調(diào)用完畢粪般,才執(zhí)行子類構(gòu)造器? ? 子類繼承父類,在子類的構(gòu)造方法的第一句一定會(huì)調(diào)用父類的構(gòu)造方法? ? 如果父類沒有明確的構(gòu)造方法污桦,父類使用的是默認(rèn)構(gòu)造器刊驴。? ? 子類在繼承父類時(shí),在子類構(gòu)造方法中會(huì)默認(rèn)調(diào)用父類的默認(rèn)構(gòu)造器super()可以不寫? ? 子類在自己的構(gòu)造器中使用super關(guān)鍵字調(diào)用父類的構(gòu)造器super(參數(shù)1寡润,參數(shù)2捆憎,...)? ? 如果子類調(diào)用了父類的無參構(gòu)造器 而父類中沒有無參構(gòu)造器則會(huì)編譯報(bào)錯(cuò)? ? ? Super和this:? ? Super(); 指向父類的引用 調(diào)用父類的構(gòu)造器,只能出現(xiàn)在子類的構(gòu)造器中梭纹,? ? 且必須在第一行super()中有無參數(shù)躲惰,決定了調(diào)用哪個(gè)構(gòu)造器。? ? 在同一個(gè)構(gòu)造器中变抽,不能同時(shí)出現(xiàn)super和this

思考以下代碼的運(yùn)行結(jié)果

publicsclassCar{privateint site =4;//座位數(shù)Car(){? ? ? ? System.out.println ("載客量是"+site+"人);

? ? ? }

? ? ? public void setSite(int site){

? ? ? ? this.site = site;

? ? ? }

? ? ? void print(){

? ? ? ? System.out.print("載客量是"+site+"人");

? ? ? }

? }

? class Bus extends Car {

? ? ? Bus(int site){

? ? ? ? ? setSite(site);

? ? ? }

? }

? public static void main(String[] args) {

? ? ? Bus bus = new Bus(20);

? ? ? bus.print();

? }

封裝: 對類中的屬性和方法規(guī)定訪問權(quán)限础拨,保護(hù)類中數(shù)據(jù)的安全? ? ? 將類中的信息(屬性和方法)隱藏起來氮块,不允許外部程序之間訪問,而是通過該類? ? ? 提供的方法進(jìn)行訪問? ? ? ? ? ? 活中的例子:到飯館吃飯诡宗,你只需要跟服務(wù)員講你要吃什么飯菜服務(wù)員就會(huì)跟后臺(tái)廚房的廚師說明一下? ? ? 等待一段時(shí)間后滔蝉,飯菜就被服務(wù)員直接遞送到你面前,作為客戶的你是不知道也無需知道飯菜的具體做法塔沃,? ? ? 后臺(tái)廚房的廚師及做飯菜的過程就是被封裝的細(xì)節(jié)蝠引,而服務(wù)員則是公開暴露的訪問路徑,? ? ? 你只能通過服務(wù)員點(diǎn)餐然后獲得飯菜蛀柴,而不能直接去到后臺(tái)廚房要求廚師如何做飯菜螃概;? ? ? ? 類中存在屬性name ,調(diào)用類隨意對屬性進(jìn)行賦值 ,不會(huì)符合規(guī)范 沒有意義鸽疾。? ? 這是由于調(diào)用類可以直接訪問到類中的屬性? ? ? ? 訪問權(quán)限:用來控制類的成員和類的使用范圍private:私有地default:默認(rèn)地protected:受保護(hù)的public:公共的public和 默認(rèn) 可以修飾類? ? ? ? ? ? ? ? get方法和set方法訪問類中的屬性

多態(tài):子類和父類之間吊洼,不同的子類之間對于同一行為,有不同的實(shí)現(xiàn)方式

? ? 例:王者榮耀中的英雄都有技能 但不同的英雄技能不同

? ? ? ? 每個(gè)形狀都有面積 但不同的形狀面積不同

? ? 體現(xiàn):方法的重寫/override

? ? ? ? ? 方法的簽名相同(方法名制肮,參數(shù)列表) 冒窍,方法體不同。

例:定義形狀類 定義求面積 周長的方法? ? ? 定義圓形類 聲明屬性半徑? 繼承 形狀類? ? ? 由于不同形狀求面積方法不同 需要重寫父類的原始方法classShape{doublec;publicdoublearea();}classSquareextendsShape{publicSquare(doublec){this.c = c;? ? }publicdoublearea(){return0.0625*c*c;? ? }}classCircleextendsShape{publicCircle(doublec){this.c = c;? ? }publicdoublearea(){return0.0796*c*c;? ? }? ? }

? 重寫方法被調(diào)用時(shí)豺鼻,看對象類型综液。子類對象的重寫方法被調(diào)用時(shí),引用類型無論是父類還是子類拘领,運(yùn)行的都是子類重寫后的版本意乓。

? 方法重寫后的調(diào)用原理

? code..

可以通過super.方法名 在子類重寫方法中調(diào)用父類方法。? ? ? ? 重寫方法的注意事項(xiàng):1.方法名相同 约素,參數(shù)列表相同2.子類方法的返回值類型void等于父類,基本類型等于父類3.子類方法拋出的異常小于或等于父類4.子類方法的訪問權(quán)限大于或等于父類? ? ? ? ? ? ? 重載和重寫的區(qū)別:? ? ? ? 重寫:遵循“運(yùn)行期”的綁定届良,根據(jù)對象類型進(jìn)行調(diào)用? ? ? ? 重載:遵循“編譯器”的綁定,根據(jù)參數(shù)列表不同進(jìn)行調(diào)用

以下代碼中 那些是方法的重載圣猎,那些是方法的重寫 以及運(yùn)行結(jié)果publicclassOverrideOverloadDemo{publicstaticvoidmain(String[] args){? ? ? ? Goo g =newGoo();? ? ? ? Eoo e =newEoo();? ? ? ? g.show(e);? ? ? ? ? ? ? ? Foo f =newFoo();? ? ? ? g.show(f);? ? ? ? ? ? ? ? Eoo e1 =newFoo();? ? ? ? g.show(e1);? ? ? ? ? ? ? ? Foo f1 =newFoo();? ? ? ? g.show(f1);? ? }}//overloadclassGoo{voidshow(Eoo e){? ? ? ? System.out.println("父類參數(shù)");? ? ? ? e.show();? ? }voidshow(Foo f){? ? ? ? System.out.println("子類參數(shù)");? ? ? ? f.show();? ? }}classEoo{voidshow(){? ? ? ? System.out.println("父類show方法");? ? }}classFooextendsEoo{voidshow(){? ? ? ? System.out.println("子類show方法");? ? }}

? 引用數(shù)據(jù)類型的轉(zhuǎn)換:

? ? ? ? “麻煩你士葫,小王。幫我把那個(gè)東西拿過來好嗎”

? ? ? ? 在生活中送悔,你肯定用過這個(gè)詞--東西慢显。

? ? ? ? 小王:“你要讓我?guī)湍隳媚莻€(gè)水杯嗎?”

? ? ? ? 你要的是水杯類的對象欠啤。而東西是水杯的父類荚藻。通常東西類沒有實(shí)例對象,但我們有時(shí)需要東西(父類)的引用指向它的子類實(shí)例洁段。

? ? 父子類之間的轉(zhuǎn)換:

? ? 上溯造型(向上造成):子類對象- - > 父類對象应狱,造成子類特有的,擴(kuò)展的屬性和方法失效祠丝,只能有父類繼承的屬性和方法疾呻。

? ? ? ? ? ? 優(yōu)點(diǎn):有利于程序的維護(hù)和擴(kuò)展除嘹。

publicclassMaster{privateString name ="";// 主人名字privateintmoney =0;// 元寶數(shù)/**

? ? * 有參構(gòu)造方法。

? ? * @param name 主人名字

? ? * @param money 元寶數(shù)

? ? */publicMaster(String name,intmoney){this.name = name;this.money = money;? ? }publicvoidsetName(String name){this.name = name;? ? }publicvoidsetMoney(intmoney){this.money = money;? ? }publicintgetMoney(){returnmoney;? ? }publicStringgetName(){returnname;? ? }/**

? ? * 主人給Dog喂食岸蜗。

? ? */publicvoidfeed(Dog dog){? ? ? ? dog.eat();? ? }? }

publicclassPet{privateString name ="無名氏";// 昵稱privateinthealth =100;// 健康值privateintlove =0;// 親密度/**

? ? * 方法eat(),負(fù)責(zé)寵物吃飯功能尉咕。

? ? */publicvoideat();/**

? ? * 有參構(gòu)造方法。

? ? * @param name? 昵稱

? ? */publicPet(){? ? ? ? ? ? }publicPet(String name){this.name = name;? ? }publicvoidsetName(String name){this.name = name;? ? }publicvoidsetHealth(inthealth){this.health = health;? ? }publicvoidsetLove(intlove){this.love = love;? ? }publicStringgetName(){returnname;? ? }publicintgetHealth(){returnhealth;? ? }publicintgetLove(){returnlove;? ? } }

publicclassDogextendsPet{privateString strain;// 品種/**? ? * 有參構(gòu)造方法璃岳。? ? *@paramname? 昵稱? ? *@paramstrain? 品種? ? */publicDog(String name, String strain){super(name);this.strain = strain;? ? }publicStringgetStrain(){returnstrain;? ? }/**

? ? * 重寫吃食方法年缎。

? ? */publicvoideat(){if(getHealth()>=100){? ? ? ? ? ? System.out.println("狗狗"+this.getName() +"吃飽了,不需要喂食了矾睦!");? ? ? ? }else{this.setHealth(this.getHealth()+3);? ? ? ? ? ? System.out.println("狗狗"+this.getName() +"吃飽啦晦款!健康值增加3炎功。");? ? ? ? }? ? }}

如果再領(lǐng)養(yǎng)新種類XXX的寵物枚冗,就需要給XXX喂食,怎么辦蛇损?

添加XXX寵物類赁温,繼承Pet類,實(shí)現(xiàn)吃食方法

修改Master類淤齐,添加給XXX寵物喂食的方法

可以發(fā)現(xiàn)隨著程序的不斷擴(kuò)展股囊,需要對源程序進(jìn)行不斷的修改,這不符合程序的設(shè)計(jì)原則

頻繁修改代碼更啄,程序的可擴(kuò)展性稚疹、可維護(hù)性變得很差

使用多態(tài)優(yōu)化設(shè)計(jì)? ? ? 修改Master 類的eat()方法 將參數(shù) 改為Pet類型? ? ? 實(shí)現(xiàn)一個(gè)方法可以 對所有寵物喂食publicvoidfeed(Pet? pet){//父類的引用指向子類的對象pet.eat();? ? ? }? ? ? ? 調(diào)用Master類的喂食方法時(shí)可以傳入其子類對象 從而調(diào)用不同子類的喂食方法

下溯造成:父類-- >子類 直接強(qiáng)轉(zhuǎn)會(huì)報(bào)類型轉(zhuǎn)換錯(cuò)誤,要求父類對象必須是由子類對象向上轉(zhuǎn)換過的祭务,才可以向下轉(zhuǎn)換? ? ? ? ? ? ? ? 類型轉(zhuǎn)換這部分在講解時(shí)内狗,講解時(shí)學(xué)生能夠知道有這樣一種寫法。? ? 但是大多數(shù)學(xué)生不理解為什么要這么去寫义锥。所有需要設(shè)置一個(gè)案例柳沙,使學(xué)生能夠理解向上造型的用途。? ? 例:生產(chǎn)汽車根據(jù)不同的的參數(shù) 返回不同類型的汽車類 但方法的返回值是 汽車的父類? ? 抽象類abstract:該類不需要?jiǎng)?chuàng)建對象拌倍,提出了一個(gè)概念赂鲤,其中的方法有子類實(shí)現(xiàn)。? ? 特點(diǎn):抽象類不能實(shí)例化? ? ? ? ? 抽象類中可以有普通方法柱恤,可以有抽象方法? ? ? ? ? 向子類提供父類的定義数初,抽象類就是給其他類繼承的? ? ? ? ? ? ? 子類繼承抽象類:普通類必須實(shí)現(xiàn)抽象方法,抽象子類不實(shí)現(xiàn)? ? ? ? 抽象類作用:為子類提供一個(gè)公共的類型梗顺;? ? ? ? 抽象類的應(yīng)用——模板設(shè)計(jì)模式? ? 例如泡孩,現(xiàn)在有三類事物:? ? (1)機(jī)器人:充電,工作荚守;? ? (2)人:吃飯珍德,工作练般,睡覺;? ? (3)豬:進(jìn)食锈候,睡覺薄料。? ? 現(xiàn)要求實(shí)現(xiàn)一個(gè)程序,可以實(shí)現(xiàn)三種不同事物的行為泵琳。? ? 所有的子類如果要想正常的完成操作摄职,必須按照指定的方法進(jìn)行覆寫才可以? ? 而這個(gè)時(shí)候抽象類所起的功能就是一個(gè)類定義模板的功能。? 定義一個(gè)Employee抽象基類? 公司有以下幾種員工:? ? 開發(fā)人員:工資計(jì)算方式获列,每月固定工資? ? 銷售人員:底薪+提成? ? 小時(shí)工:按工作時(shí)間付工資谷市,每小時(shí)30元? ? 創(chuàng)建不同類型的3名員工對象,計(jì)算他們應(yīng)付的月工資之和

publicabstractclassEmployee{privateString name;publicEmployee(String name){this.name ="@"+ name +"@";? }protectedabstractintpaySalary();}

//開發(fā)人員publicclassDeveloperextendsEmployee{privateintsalary;publicDeveloper(String name,intsalary){super(name);this.salary = salary;? }@Override//方法重寫注解protectedintpaySalary(){returnsalary;? }}

//銷售人員publicclassSaleManextendsEmployee{privateintsalary;privateintcomm;//提成publicSaleMan(String name,intsalary,intcomm){super(name);this.salary = salary;this.comm = comm;? }@OverrideprotectedintpaySalary(){returnsalary + comm;? }}

//小時(shí)工publicclassHourlyWorkerextendsEmployee{privateinthours;//這個(gè)月工作了多少小時(shí)publicHourlyWorker(String name,inthours){super(name);this.hours = hours;? }@OverrideprotectedintpaySalary(){return30*hours;? }}

publicclassMain{publicstaticvoidmain(String[] args){? ? ? Employee[] employees =newEmployee[3];? ? ? employees[0] =newDeveloper("張三",5000);? ? ? employees[1] =newSaleMan("李四",2000,500);? ? ? employees[2] =newHourlyWorker("馮六",200);//計(jì)算總工資inttotal =0;for(inti =0; i < employees.length; i++)? ? ? {? ? ? ? ? total += employees[i].paySalary();? ? ? }? ? ? System.out.println("總共需要支付"+ total);? }}

關(guān)鍵字final修飾類:? 該類不能被繼承? ? 修飾屬性和變量:賦值后不允許修改數(shù)值击孩,地址不能改變? ? 修飾方法:方法不能被重寫final練習(xí)演示? ? 思考一個(gè)有趣的現(xiàn)象:byteb1=1;byteb2=3;byteb3=b1+b2;//當(dāng)程序執(zhí)行到這一行的時(shí)候會(huì)出錯(cuò)迫悠,因?yàn)閎1、b2可以自動(dòng)轉(zhuǎn)換成Int類型的變量巩梢,運(yùn)算時(shí)java虛擬機(jī)對它進(jìn)行了轉(zhuǎn)換创泄,結(jié)果導(dǎo)致把一個(gè)int賦值給byte-----出錯(cuò)如果對b1 b2加上final就不會(huì)出錯(cuò)finalbyteb1=1;finalbyteb2=3;? ? 關(guān)鍵字abstract和final不能同時(shí)使用? ? 接口 Interface:幾類完全不同的事物,擁有同樣的行為括蝠,這種行為定義在接口中鞠抑。接口是一種標(biāo)準(zhǔn),一種協(xié)議忌警,一種規(guī)范? ? USB接口本身沒有實(shí)現(xiàn)任何功能? ? USB接口規(guī)定了數(shù)據(jù)傳輸?shù)囊? ? USB接口可以被多種USB設(shè)備實(shí)現(xiàn)? ? ? ? 接口的特點(diǎn):? ? ? ? 接口不是類? ? ? ? 接口中定義的只能是抽象方法搁拙,無論是否書寫abstract關(guān)鍵字? ? ? ? 接口中屬性,必須是final修飾—常量 法绵,無論是否寫了final一個(gè)類可以實(shí)現(xiàn)多個(gè)接口, 接口可以繼承接口(多繼承)? 實(shí)現(xiàn)接口的演示publicinterfaceUsbInterface{//USB接口提供服務(wù)碟刺。voidservice();}publicclassUDiskimplementsUsbInterface{publicvoidservice(){? ? ? ? ? System.out.println("連接USB口疏唾,開始傳輸數(shù)據(jù)幸斥。");? ? ? ? }? }? ? 接口在多態(tài)中的體現(xiàn):1.繼承或?qū)崿F(xiàn)2.重寫3.父類(接口)的聲明指向子類的對象? ? 接口和抽象類的區(qū)別:? ? ? ? 一個(gè)是類勋篓,一個(gè)是接口? ? ? ? 抽象類可以有抽象方法,也可以有普通方法此熬,接口中都是抽象方法? ? ? ? 抽象類中可以有普通的屬性庭呜,接口中是常量

接口使用練習(xí)publicclassUnionPayTest{publicstaticvoidmain(String[] args){? ? ? ICBCImpl card1 =newICBCImpl(10000,"qwer12");? ? ? Scanner scan =newScanner(System.in);? ? ? System.out.println("請輸入密碼:");if(card1.checkPwd(scan.next())){? ? ? ? ? System.out.println("請輸入金額:");if(card1.drawMoney(scan.nextDouble())){? ? ? ? ? ? ? System.out.println("所剩金額:"+card1.getBalance());? ? ? ? ? }else{? ? ? ? ? ? ? System.out.println("金額不足");? ? ? ? ? }? ? ? }else{? ? ? ? ? System.out.println("密碼錯(cuò)誤");? ? ? }? }}interfaceUnionPay{publicdoublegetBalance();//查看余額publicbooleancheckPwd(String input);//檢查密碼publicbooleandrawMoney(doublenumber);//取錢}interfaceICBCextendsUnionPay{publicvoidpayOnline(doublenumber);//在線支付}interfaceABCextendsUnionPay{publicbooleanpayTelBill(String phoneNum,doublesum);//支付電話費(fèi)}classICBCImplimplementsICBC{privatedoublemoney;//賬戶余額privateString pwd;//賬戶密碼publicICBCImpl(doublemoney,String pwd){this.money = money;this.pwd = pwd;? }publicdoublegetBalance(){returnmoney;? }publicbooleancheckPwd(String input){if(pwd.equals(input)){returntrue;? ? ? }else{returnfalse;? ? ? }? }publicbooleandrawMoney(doublenumber){if(money-number>0){? ? ? ? ? money-=number;returntrue;? ? ? }else{returnfalse;? ? ? }? }publicvoidpayOnline(doublenumber){if(money>=number){? ? ? ? ? money-=number;? ? ? }? }}classABCImplimplementsABC{privatedoublemoney;privateString pwd;publicABCImpl(doublemoney,String pwd){this.money = money;this.pwd = pwd;? }publicdoublegetBalance(){returnmoney;? }publicbooleancheckPwd(String input){if(pwd.equals(input)){returntrue;? ? ? }returnfalse;? }publicbooleandrawMoney(doublenumber){if(money-number>-2000){? ? ? ? ? money-=number;returntrue;? ? ? }else{returnfalse;? ? ? }? }publicbooleanpayTelBill(String phoneNum,doublesum){if(phoneNum.length()==11&& money-sum>-2000){? ? ? ? ? money-=sum;returntrue;? ? ? }else{returnfalse;? ? ? }? }}

靜態(tài)static:? ? 類和對象的關(guān)系,類是對象的模板犀忱,類中有屬性和方法? ? Static修飾屬性:所有對象共享該屬性? ? Static修飾方法:所有對象共享該方法? ? 被static修飾的屬性和方法屬于類募谎,而不屬于某個(gè)對象? ? ? ? 靜態(tài)方法中不能直接使用非靜態(tài)屬性和方法,只能調(diào)用其他的靜態(tài)屬性和方法? ? 非靜態(tài)方法可以直接調(diào)用普通資源和靜態(tài)資源static可以修飾的元素和使用特點(diǎn)static可以修飾 屬性 方法 和 代碼塊static修飾屬性 :靜態(tài)變量? ? ? ? ? ? 所有對象共享 在類被載入時(shí)創(chuàng)建阴汇,只要類存在数冬,static變量就存在? ? ? ? ? ? 通過類名.屬性名 / 對象.屬性名 進(jìn)行訪問static修飾方法:靜態(tài)方法? ? ? ? ? ? 不需要實(shí)例化對象 可以直接通過類名.方法名 訪問? ? ? ? ? ? 實(shí)例化對象后 可以 對象.方法名 訪問? ? ? ? ? ? 注意事項(xiàng):? ? ? ? ? ? ? ? 靜態(tài)方法只能直接訪問靜態(tài)變量 不能直接訪問成員變量? ? ? ? ? ? ? ? 靜態(tài)方法中不能使用super和this關(guān)鍵字? ? ? ? ? ? ? ? 靜態(tài)方法不能被覆蓋(重寫)static修飾塊:靜態(tài)塊? ? ? ? ? ? 有static修飾的語句塊 不包含任何方法體的代碼塊? ? ? ? ? ? 當(dāng)類被加載時(shí) 靜態(tài)塊被執(zhí)行 并且只執(zhí)行一次? ? ? ? ? ? 常用于類屬性的初始化變量的作用域:? ? 類變量:? ? ? 用static修飾的成員變量,它們在類被載入時(shí)創(chuàng)建,只要類存在拐纱,static變量就存在? ? 實(shí)例變量:? ? ? 類體中聲明的成員變量铜异,即非static的屬性,創(chuàng)建對象后存在? ? 局部變量:? ? ? 方法體中聲明的變量秸架,方法中的參數(shù)揍庄,或代碼塊中聲明的變量,都是局部變量东抹。局部變量只在方法調(diào)用的過程中有效蚂子,方法調(diào)用結(jié)束后失效? ? 單例模式:在系統(tǒng)中該類只有一個(gè)實(shí)例化對象? ? 在系統(tǒng)中某些類只需要一個(gè)對象就可以完成所有操作,會(huì)將類設(shè)計(jì)為單例模式以節(jié)省系統(tǒng)的開銷? ? 分為:餓漢模式 缭黔,懶漢模式? ? Java的異常處理機(jī)制是Java程序在編譯或運(yùn)行期間食茎,發(fā)生的不可預(yù)期的意外,造成程序不能繼續(xù)執(zhí)行的情況Java中的異常是被管理起來的,當(dāng)程序發(fā)生異常馏谨,會(huì)創(chuàng)建出一個(gè)異常的對象Throwable? 所有異常的父類Error錯(cuò)誤:天災(zāi) 人力不可抗拒 計(jì)算機(jī)硬件的問題别渔,比如:硬盤壞了,內(nèi)存掉電java.lang.Exception? 異常: 人禍? 主要是因?yàn)槌绦蜷_發(fā)者不嚴(yán)謹(jǐn)造成的問題田巴,可以通過代碼來修補(bǔ)和解決? ? ? ? 檢查性異常(編譯)? ? ? ? ? ? 強(qiáng)制要求在代碼中處理異常? ? ? ? ? ? ? ? ? ? 運(yùn)行時(shí)異常(運(yùn)行)? java.lang.RuntimeException? 非檢查性異常? ? ? ? ? ? 不強(qiáng)制在代碼中處理異常? ? ? ? ? ? ? ? java.lang.ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常? ? ? ? ? ? IndexOutOfBoundsException? ? ? 下標(biāo)越界異常? ? ? ? ? ? java.lang.ArithmeticException? 除數(shù)為0異常? (整數(shù))? ? ? ? ? ? ? ? ? ? 浮點(diǎn)數(shù):6.0/0Infinity無窮大NaN非數(shù)? ? Not aNumberjava.lang.NullPointerException? 空指針異常 (重點(diǎn))? ? ? ? ? ? ? ? ? ? 調(diào)用了null值的屬性或方法? (null值沒有任何屬性和方法)if(o !=null){? ? ? ? ? ? ? ? ? ? ? ? o.toString();? ? ? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ? ..? ? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? java.lang.ClassCastException? 引用數(shù)據(jù)類型類型轉(zhuǎn)換異常? ? ? ? ? ? ? ? ? ? 父類向子類轉(zhuǎn)換時(shí)發(fā)生的異常(下溯造型時(shí)發(fā)生)? ? ? ? ? ? ? ? ? ? binstanceofBtrue變量b是B類的一個(gè)對象? ? ? ? ? ? ? ? ? ? ? ? ? ? flase? 變量b不是B類的一個(gè)對象if(oinstanceofB){? ? ? ? ? ? ? ? ? ? ? ? B b = (B)o;? ? ? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ? ..? ? ? ? ? ? ? ? ? ? }? ? ? ? 異常的處理1.上報(bào)/拋出throw人工制造異常? ? ? ? ? ? ? ? throws? 表示某個(gè)方法向上拋出異常? ? ? ? ? ? ? ? 面試:throw和throws的區(qū)別2.捕獲try{? ? ? ? ? ? ? ? 嘗試執(zhí)行代碼? ? ? ? ? ? ? ? }catch(Exception e){? ? ? ? ? ? ? ? 發(fā)生異常時(shí)捕獲钠糊,執(zhí)行此處? ? ? ? ? ? ? ? ? ? }finally{? ? ? ? ? ? ? ? 無論如何都會(huì)執(zhí)行? ? ? ? ? ? ? ? }? ? ? ? ? ? final和finally的區(qū)別挟秤?? ? ? ? ? ? ? ? final: 最終關(guān)鍵字? ? ? ? ? ? ? ? ? ? 修飾類:不能被繼承? ? ? ? ? ? ? ? ? ? 修改方法:不能被重寫? ? ? ? ? ? ? ? ? ? 修改屬性:常量finally:異常捕獲最終塊:finally中的代碼在try包的概念:? ? 什么是包? ? 包的作用:? 例window文件系統(tǒng) 使用文件夾可以解決文件同名問題? ? ? ? ? ? ? ? ? 使文檔分門別類易于查找? ? 包的命名方式:組織的域名反寫? ? Java源文件與包的位置關(guān)系

將一個(gè)正整數(shù)分解質(zhì)因數(shù)壹哺。例如:輸入90,打印出90=233*5。

提示:對n進(jìn)行分解質(zhì)因數(shù)艘刚,應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k管宵,然后按下述步驟完成:

(1)如果這個(gè)質(zhì)數(shù)恰等于n,則說明分解質(zhì)因數(shù)的過程已經(jīng)結(jié)束攀甚,打印出即可箩朴。

(2)如果n>k,但n能被k整除秋度,則應(yīng)打印出k的值炸庞,并用n除以k的商,作為新的正整數(shù)你n,重復(fù)執(zhí)行第一步。

(3)如果n不能被k整除荚斯,則用k+1作為k的值,重復(fù)執(zhí)行第一步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埠居,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子事期,更是在濱河造成了極大的恐慌滥壕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兽泣,死亡現(xiàn)場離奇詭異绎橘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唠倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門称鳞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涮较,“玉大人,你說我怎么就攤上這事冈止》ㄏ#” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵靶瘸,是天一觀的道長苫亦。 經(jīng)常有香客問我,道長怨咪,這世上最難降的妖魔是什么屋剑? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诗眨,結(jié)果婚禮上唉匾,老公的妹妹穿的比我還像新娘。我一直安慰自己匠楚,他們只是感情好巍膘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芋簿,像睡著了一般峡懈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上与斤,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天肪康,我揣著相機(jī)與錄音,去河邊找鬼撩穿。 笑死磷支,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的食寡。 我是一名探鬼主播雾狈,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抵皱!你這毒婦竟也來了善榛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叨叙,失蹤者是張志新(化名)和其女友劉穎锭弊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擂错,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡味滞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剑鞍。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昨凡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚁署,到底是詐尸還是另有隱情便脊,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布光戈,位于F島的核電站哪痰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏久妆。R本人自食惡果不足惜晌杰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筷弦。 院中可真熱鬧肋演,春花似錦、人聲如沸烂琴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸绷。三九已至梗夸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間健盒,已是汗流浹背绒瘦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扣癣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓憨降,卻偏偏與公主長得像父虑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子授药,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容