java基礎(chǔ)知識總結(jié)_第1頁
java基礎(chǔ)知識總結(jié)_第2頁
java基礎(chǔ)知識總結(jié)_第3頁
java基礎(chǔ)知識總結(jié)_第4頁
java基礎(chǔ)知識總結(jié)_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

目錄TOC\o"1-5"\h\u12232目錄 19791、第一個java程序 637772、變量、數(shù)據(jù)類型、運(yùn)算符 6123442.1.1變量的概念 6160592.1.2定義變量的格式 6198202.2數(shù)據(jù)類型 6312002.2.1基本數(shù)據(jù)類型 654692.2.2引用數(shù)據(jù)類型 784592.3運(yùn)算符 7249572.3.1算術(shù)運(yùn)算符 7153342.3.2關(guān)系運(yùn)算符 7181492.3.3邏輯運(yùn)算符 7202013、控制語句 853193.1、if語句 8242193.2、switch語句 9202964、循環(huán)語句 9290494.1、for 9210354.1.1語法格式 9118874.1.2示例 9250944.2、while 9255474.2.1語法結(jié)構(gòu) 10265714.2.2示例 10253584.3、do{}while(); 10127804.3.1語法結(jié)構(gòu) 10163974.3.2示例 10121414.3.1語法結(jié)構(gòu) 11138784.3.2示例 11318915、跳轉(zhuǎn)語句 11197115.1、break 1256645.2、continue 13237495.3、跳轉(zhuǎn)語句小結(jié) 14284596、數(shù)組 14244876.1、基本用法 15182096.1.1、數(shù)據(jù)的基本要素 1556556.1.2、使用數(shù)組的方法 15185506.2、實用案例 1613496.3排序 16322556.3.1方法一:Arrays.sort(scores) 17178066.3.2方法二:冒泡排序 17235756.3.3方法三:選擇排序法 17174066.4九九乘法表 17190586.5多維數(shù)組 18233096.5.1楊輝三角 18115246.5.6多維數(shù)組的應(yīng)用 1973537、類和對象 2025567.1、類 2014037.1.1、類的表示方法 2081577.1.2、類的成員 21261247.2對象 21244937.2.1、創(chuàng)建對象的語法: 21106667.2.2、使用對象的語法 2253177.3對象數(shù)組 22284658、方法 23265968.1、構(gòu)造方法 2352008.2無參的構(gòu)造方法 23448.3有參構(gòu)造方法 2328578.3.1、值傳遞 24227048.3.2、引用傳遞 24220358.3.3、形參與實參的傳遞示意圖 248798 25237798.4方法的返回值 255858.4.1、無返回值 26260888.4.2、基本數(shù)據(jù)類型作為返回值 2619268.4.3、以對象作為返回值 2695768.5方法的重載 26192028.6方法的重寫 2715769、關(guān)鍵字 2750669.1、this和super 2794309.1.1this關(guān)鍵字 2877529.1.2、super關(guān)鍵字 29237809.2、static 30200089.3、abstract和final 30105649.3.1、abstract 31104059.3.2、final 312459310、封裝和抽象 33872610.1、封裝 331852810.1.1、封裝概述 332480610.1.2、封裝的屬性 331736710.2、抽象 342698411、繼承 352092311.1、繼承的作用 3528711.2、實例化子類對象 37807411.2、extends 371982711.3、訪問修飾符 371520712、接口 38433512.1、定義和實現(xiàn)一個簡單的接口 382428513、多態(tài) 4117267一、多態(tài) 411555613.1、以父類或者接口作為方法的參數(shù) 442586113.2、以父類或者接口作為方法的返回值 442133013.3、工廠模式 451028213.3.1、工廠模式的介紹 45296713.3.2、簡單工廠模式介紹 451430713.4、代理者模式 463122113.4.1、組成 461607413.4.2、優(yōu)點 462850813.4.3、模式結(jié)構(gòu) 461876214、異常處理 46590914.1、try-catch-finally 47790214.2、throw和throws 472623114.2.1、使用throws聲明拋出異常 47704414.2.2、使用throw拋出異常 48787514.3、log4j 48717214.3.1、log4j 48120414.3.2、怎么引入第三方工具包 48229514.4、java中的異常分類 482512414.4.1、Exception分為兩大類異常 4949415、集合框架 501870615.1、Collection和Map的區(qū)別 5018128Collection接口用來存儲一組不唯一,無序的對象; 5016390List接口存儲一組不唯一,有序(插入順序)的對象; 5031040Set接口存儲一組唯一,無序的對象; 5010861Map接口存儲一組鍵值對象,提供key到value的映射; 502406815.2、List類(集合類轉(zhuǎn)Array)轉(zhuǎn)換方法 51533715.3、Array類(數(shù)組類轉(zhuǎn)List)轉(zhuǎn)換方法 521811015.4、如何有序集合對象創(chuàng)建與使用ArrayList類的使用 52315215.4.1、創(chuàng)建一個集合對象 532010215.4.2、向集合中添加對象 538465獲取集合中的某一個元素 5310266刪除指定元素 5330835獲取集合的大小 5329373取出集合中所有的元素 5411980清空集合中所有的元素 5429449判斷是否包含某元素 544482將數(shù)組插入到指定的索引位置 5514133集合元素的替換 551502915.5、LinkedList類的使用 5510908在特殊位置添加元素addFrist(對象);或者addLast(對象); 56899215.6、Foreach循環(huán)(加強(qiáng)for循環(huán)) 573138115.7、Set接口 579256HashSet常用方法: 5832462HashSet的構(gòu)造方法: 5829484Set的子類和普通方法: 581070515.8、Iterator接口 591039115.9、Map接口 602722615.9.1、HashMap類存儲數(shù)據(jù) 611440315.9.2、Map類和Iterator迭代器的交互式使用方法 622780815.10、泛型的定義 651182015.10.1、泛型定義的語法 6525295參數(shù)化類型 6522918類型變量 653025715.10.2、Map.Entry<K,V>的用法 65862315.11、關(guān)于keySet()和entrySet()的區(qū)別 672019716、字符串 6723453構(gòu)造方法 6719993長度顯示 6827563比較 6814098大小寫轉(zhuǎn)換 687932定位 699617提取 6916588字符串的分割 6925689判斷字符出現(xiàn)的次數(shù) 702134817、文件操作、IO流 70329417.1、File類 702087617.1.1、常用的字段 702493117.1.2、常用的構(gòu)造方法 701758117.1.3、常用的方法 70744017.2、文件流 71743817.2.1、InputStream(讀數(shù)據(jù))——FileInputStream 714560構(gòu)造方法 7225796常用方法 7227119讀取數(shù)據(jù)完整示例 722746617.2.2、OutputStream(寫數(shù)據(jù))——FileOutputStream 7221455構(gòu)造方法 7214064常用方法 7320531寫入數(shù)據(jù)完整示例 731290717.2.3、Reader——BufferedReader 7324556構(gòu)造方法 7389常用方法 7329683讀取文件完整示例 732750917.2.4、Writer——BufferedWriter 7423338構(gòu)造方法 7425034常用方法 74864寫數(shù)據(jù)完整示例 74669917.3、字符流與字節(jié)流的選擇 75

第一個java程序編寫第一個java程序publicstaticvoidmain(String[]args){System.out.println(“helloworld”);}變量、數(shù)據(jù)類型、運(yùn)算符2.1.1變量的概念——內(nèi)存中的一個存儲區(qū)域——該區(qū)域有自己的名稱(變量名)和類型(數(shù)據(jù)類型)——java中每個變量必須先聲明后使用——該區(qū)域的數(shù)據(jù)可以在同意類型范圍內(nèi)不斷變化2.1.2定義變量的格式數(shù)據(jù)類型 變量名 = 初始值變量名的第一個符號只能是:英文字母、_、$,中間不能有其他符號的存在。變量是通過使用變量名來訪問這塊區(qū)域的,作用區(qū)域為靠近的的一對{}。2.2數(shù)據(jù)類型數(shù)據(jù)類型可以分為:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。引用數(shù)據(jù)類型可有方法返回值,基本數(shù)據(jù)類型沒有。2.2.1基本數(shù)據(jù)類型基本數(shù)據(jù)類型又包括:數(shù)值型、布爾型、字符型。數(shù)值型分為:整型和浮點型。整型:byte、short、int、long。由小到大排列浮點型:float、double布爾型:boolean。只有兩種結(jié)果true或者false、1或者0.字符型:char2.2.2引用數(shù)據(jù)類型引用數(shù)據(jù)類型:類、接口、數(shù)組類:class。強(qiáng)調(diào)String也是class類。接口:interface數(shù)組:[](array)2.3運(yùn)算符算術(shù)>關(guān)系>邏輯!>算術(shù)>關(guān)系>與>或2.3.1算術(shù)運(yùn)算符一般運(yùn)算符賦值運(yùn)算符自身賦值運(yùn)算符+3+36+=a+=3a=a+3++a++a=a+1-7-34-=a-=4a=a-4++a*2*36*=a*=8a=a*8--a--a=a-1/8/42/=a/=2a=a/2--a%9/41%a%=3a=a%32.3.2關(guān)系運(yùn)算符>大于<小于>=大于或等于<=小于或等于==等于!=不等于2.3.3邏輯運(yùn)算符邏輯運(yùn)算都是boolean的結(jié)果&AND與False&ture(全部判斷)false|OR或False|true(全部判斷)ture^XOR異或True^falsetrue!NOT非!truefalse&&AND短路False&&ture(有一個不成立就不用繼續(xù))false||OR短路False||true(有一個成立就不用繼續(xù)判斷)true3、控制語句3.1、if語句publicclassCeShiXiaoJie{ publicstaticvoidmain(String[]args){ if(條件){ 方法體 } }}importjava.util.Scanner;publicclassCeShiXiaoJie{ publicstaticvoidmain(String[]args){ Scannerinput=newScanner(System.in); inti=input.nextInt(); if(i>10){判斷條件 System.out.println();方法體 }elseif(i<=10&&i>0){ System.out.println(i); }else{ System.out.println(i); } input.close(); }}3.2、switch語句Key和value的關(guān)系,鍵值對,當(dāng)鍵滿足時,值對應(yīng)的條件成立 switch(i){Key和value的關(guān)系,鍵值對,當(dāng)鍵滿足時,值對應(yīng)的條件成立 case1: System.out.println(); break; case2: System.out.println(); break; default: System.out.println(); break; }循環(huán)語句4.1、for判斷條件一般是非程序結(jié)果4.1.1語法格式for(初始化表達(dá)式;判斷條件;迭代方式){循環(huán)體}或者初始表達(dá)式;for(;判斷條件;){循環(huán)體;迭代方式;}4.1.2示例for(inti=0;i<args.length;i++){ }4.2、while判斷條件一般是程序結(jié)果4.2.1語法結(jié)構(gòu)變量初始化;while(判斷條件){循環(huán)體;迭代;}4.2.2示例 Scannerinput=newScanner(System.in); System.out.println("請繼續(xù)輸入一個數(shù)字"); inti=input.nextInt();//變量初始化 while(i>0){//判斷條件 System.out.println("輸入的數(shù)字大于零");//循環(huán)體 System.out.println("請繼續(xù)輸入下一個數(shù)字");//循環(huán)體 i=input.nextInt();//迭代 }4.3、do{}while();無論判斷條件是否成立,循環(huán)體都會執(zhí)行一次。4.3.1語法結(jié)構(gòu)變量初始化;while(判斷條件){循環(huán)體;迭代;}4.3.2示例 inti=0; while(i<3){ System.out.println("i="+i); i++; }結(jié)果為:i=0i=1i=24.3.1語法結(jié)構(gòu)變量初始化;do{循環(huán)體;迭代;}while();4.3.2示例 inti=5; do{ System.out.println(i+"小于5嗎"); i++; }while(i<5);輸出結(jié)果為:5小于5嗎跳轉(zhuǎn)語句5.1、breakbreak用于終止每個語句塊的執(zhí)行,在循環(huán)中,用于終止break所在的循環(huán)。一般用于循環(huán)和switch語句中;示例: for(inti=0;i<4;i++){ System.out.println("當(dāng)i="+i+"時,j分別為"); for(intj=0;j<5;j++){ System.out.println(j); if(j==2) break; } }當(dāng)i=0時,j分別為012當(dāng)i=1時,j分別為012當(dāng)i=2時,j分別為012當(dāng)i=3時,j分別為012

break出現(xiàn)在多重嵌套的的語句塊中時,可以通過標(biāo)簽指明要終止的那一層的語句;示例 flag1:for(inti=0;i<4;i++){ System.out.println("當(dāng)i="+i+"時,j分別為"); flag2:for(intj=0;j<5;j++){ System.out.println(j); if(j==2){ breakflag1; } } }當(dāng)i=0時,j分別為012這中方法可以通過內(nèi)層循環(huán)空值外層循環(huán)。5.2、continuecontinue語句用于跳過某個循環(huán)語句塊的一次執(zhí)行示例: for(inti=0;i<4;i++){ System.out.println("當(dāng)i="+i+"時,j分別為"); for(intj=0;j<3;j++){ if(j==1) continue; System.out.println(j); }當(dāng)滿足某一條件時,當(dāng)前循環(huán)跳過,進(jìn)入下一循環(huán) }當(dāng)滿足某一條件時,當(dāng)前循環(huán)跳過,進(jìn)入下一循環(huán)結(jié)果為:當(dāng)i=0時,j分別為02當(dāng)i=1時,j分別為02當(dāng)i=2時,j分別為02當(dāng)i=3時,j分別為02continue語句出現(xiàn)在多層嵌套的循環(huán)語句體中時,可以通過標(biāo)簽指明要跳過的是哪一層循環(huán) flag1:for(inti=0;i<4;i++){ System.out.println("當(dāng)i="+i+"時,j分別為"); flag2:for(intj=0;j<3;j++){ if(j==1) continueflag1; System.out.println(j); }當(dāng)執(zhí)行到if語句時,如果滿足if條件,那么執(zhí)行continue的語句,flag1跳過,在此表示為:整個循環(huán)跳過,進(jìn)入下一次循環(huán) }當(dāng)執(zhí)行到if語句時,如果滿足if條件,那么執(zhí)行continue的語句,flag1跳過,在此表示為:整個循環(huán)跳過,進(jìn)入下一次循環(huán)結(jié)果為:當(dāng)i=0時,j分別為0當(dāng)i=1時,j分別為0當(dāng)i=2時,j分別為0當(dāng)i=3時,j分別為05.3、跳轉(zhuǎn)語句小結(jié)break只能用于switch語句和循環(huán)語句中。continue只能用于循環(huán)語句中。標(biāo)號語句必須緊接在循環(huán)的頭部。標(biāo)號語句不能用在非循環(huán)語句的前面。break和continue之后不能有其他的語句,因為程序永遠(yuǎn)不會執(zhí)行break和continue 之后的語句。

數(shù)組數(shù)組是多個相同類型數(shù)據(jù)的組合,實現(xiàn)對這些數(shù)據(jù)的統(tǒng)一管理數(shù)組屬引用類型,數(shù)組型數(shù)據(jù)是對象(Object),數(shù)組中的每個元素相當(dāng)于該對象的成員變量數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型6.1、基本用法6.1.1、數(shù)據(jù)的基本要素示例:int[]array={1,2,3}標(biāo)識符:array數(shù)組元素:{1,2,3}元素下標(biāo):0,1,2每個數(shù)組的下標(biāo)都是從0開始的元素類型:int6.1.2、使用數(shù)組的方法聲明數(shù)組:int[]array是個什么類型的數(shù)組分配空間:array=newint[5];分配幾個連續(xù)的內(nèi)存空間3賦值:array[0]=1;array[1]=2;向分配的格子里存儲數(shù)據(jù)處理數(shù)據(jù):array[0]*5邊聲明邊分配空間:int[]array=newint[5];邊聲明邊賦值:int[]array={1,2,3,4,5};int[]array=newint[]{1,2,3,4,5};6.2、實用案例給DT26班5個同學(xué)輸入第一次月考的成績 Scannerinput=newScanner(System.in); System.out.println("請為DT26班的5為同學(xué)輸入月考成績"); int[]scores=newint[5]; for(inti=0;i<scores.length;i++){ System.out.println("請輸入第"+(i+1)+"個學(xué)生成績:"); scores[0]=input.nextInt(); } System.out.println("輸入完畢");結(jié)果為:請為DT26班的5為同學(xué)輸入月考成績請輸入第1個學(xué)生成績:85請輸入第2個學(xué)生成績:92請輸入第3個學(xué)生成績:78請輸入第4個學(xué)生成績:67請輸入第5個學(xué)生成績:54輸入完畢6.3排序6.3.1方法一:Arrays.sort(scores)利用Arrays類中已有的升序排序方法進(jìn)行排序6.3.2方法二:冒泡排序 for(inti=0;i<array.length-1;i++){ for(intj=0;j<array.length-1-i;j++){ if(array[j]>array[j+1]){1.設(shè)計一個外層循環(huán)控制比較次數(shù)2.設(shè)計一個循環(huán),讓相鄰的元素比較,如果后面的元素比前面的元素小,換位,依次類推,直到確定比完 inttemp=array[j+1];1.設(shè)計一個外層循環(huán)控制比較次數(shù)2.設(shè)計一個循環(huán),讓相鄰的元素比較,如果后面的元素比前面的元素小,換位,依次類推,直到確定比完 array[j+1]=array[j]; array[j]=temp; } } }結(jié)果為:5 7 10 21 27 31 45 6.3.3方法三:選擇排序法 for(inti=array.length-1;i>0;i--){ for(intj=0;j<i;j++){1.設(shè)計一個循環(huán)控制比較的次數(shù)2.假設(shè)最后一個元素是最大值,將前面的所有的元素依次與其比較,如果有比他大的元素,則換位,直到除它之外的所有元素都比較完了。3.再進(jìn)行下一輪,依次比較 1.設(shè)計一個循環(huán)控制比較的次數(shù)2.假設(shè)最后一個元素是最大值,將前面的所有的元素依次與其比較,如果有比他大的元素,則換位,直到除它之外的所有元素都比較完了。3.再進(jìn)行下一輪,依次比較 inttemp=array[i]; array[i]=array[j]; array[j]=temp; } } } for(inti=0;i<array.length;i++){ System.out.print(array[i]+"\t"); }結(jié)果為:5 7 10 21 27 31 45

6.4九九乘法表 for(inti=1;i<=9;i++){ for(intj=1;j<=i;j++){ System.out.printf("%d*%d=%s\t",i,j,i*j);%d為基本數(shù)據(jù)類型%d為基本數(shù)據(jù)類型%s為引用數(shù)據(jù)類型 System.out.println(); }printf占位符替代結(jié)果為:printf占位符替代1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 34*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 6.5多維數(shù)組Java中的多維數(shù)組被作為數(shù)組的數(shù)組處理多維數(shù)組的每個元素都是數(shù)組;例如:int[][]yanghui=newint[10][];這是一個長度為10的二維數(shù)組,這個二維數(shù)組里面有10個一維數(shù)組;也可以這樣表示:int[][]yanghui={{1},{1,1},{1,2,1},{1,3,3,1},…{1,9,…9,1}};6.5.1楊輝三角 int[][]yanghui=newint[10][];//給二維數(shù)組分配內(nèi)存空間 for(inti=0;i<yanghui.length;i++){ yanghui[i]=newint[i+1];//給二維數(shù)組元素分配內(nèi)存空間 for(intj=0;j<yanghui[i].length;j++){ yanghui[i][j]=1;//給二維數(shù)組的元素的元素第一個元素賦值 yanghui[i][yanghui[i].length-1]=1;//給二維數(shù)組元素的元素的最后一個元素賦值 if((j!=0)&&(j!=yanghui[i].length-1)){ yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];//給二維數(shù)組元素的元素的其他元素賦值 } } } for(inti=0;i<yanghui.length;i++){ for(intj=0;j<yanghui[i].length;j++){ System.out.print(yanghui[i][j]+"\t"); } System.out.println(); }結(jié)果為:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 /** *1.聲明一個二維數(shù)組,并分配空間; *2.給二維數(shù)組元素的元素分配內(nèi)存空間; *3.給二維數(shù)組元素的元素第一個元素和最后一個元素賦值; *4.給二維數(shù)組元素的元素的其他元素賦值; */6.5.6多維數(shù)組的應(yīng)用二維數(shù)組可以應(yīng)用于平面;例如畫一個圖形“M” int[][]array=newint[4][13];//聲明一個二維數(shù)組然后分配內(nèi)存空間 introw=3;//聲明一個變量排數(shù)并賦值 booleanflag=true;//聲明一件事為真 for(inti=0;i<13;i++){//設(shè)計一個循環(huán),讓其運(yùn)行十三次 array[row][i]=1;//在每一行上依次取點 if(flag){ row--; }else{ row++; } if(row==0){//當(dāng)排數(shù)到極值時反向 flag=false; } if(row==3){ flag=true; } } for(inti=0;i<array.length;i++){ for(intj=0;j<array[i].length;j++){ if(array[i][j]!=0){ System.out.print("★"); }else{ System.out.print("☆"); } } System.out.println(); }結(jié)果為:☆☆☆★☆☆☆☆☆★☆☆☆☆☆★☆★☆☆☆★☆★☆☆☆★☆☆☆★☆★☆☆☆★☆★☆☆☆☆☆★☆☆☆☆☆★二維數(shù)組一般用于平面計算和構(gòu)造一個路線例如:計算兩個城市之間的距離;規(guī)劃一條地鐵線路;計算坐596公交,從麒麟路到卓刀泉的時間構(gòu)建一個表格,用來處理各種數(shù)據(jù)等等三維數(shù)組可以應(yīng)用于立體空間;類和對象7.1、類類:具有相同屬性和方法的一組對象的集合例如:人就是一類事物的集合,而男人,女人,老人,小孩,學(xué)生等都是人這個類中的一個對象。7.1.1、類的表示方法訪問修飾符)class類名{代碼塊}publicclassPerson{System.out.println(“代碼塊”);}7.1.2、類的成員屬性(訪問修飾符)數(shù)據(jù)類型 屬性名 ;private String name ;方法(訪問修飾符) 返回類型 方法名(參數(shù)類型參數(shù)名,參數(shù)類型參數(shù)名){方法體}publicvoidsetName(Stringn){name=n;}publicStringsetName(Stringn){name=n;returnname;//關(guān)鍵字return的結(jié)果必須是返回類型}7.2對象對象:用來描述客觀事物的一個實體類是一類事物的集合和抽象,代表這類事物共有的屬性和行為,一個對象就是一個類的實例,是類一次實例化的結(jié)果。類的對象可以調(diào)用類中的成員,如屬性和方法。7.2.1、創(chuàng)建對象的語法:類名 對象名 = new 類名();Person p = new Person();語法中注意:1.在語法中new是關(guān)鍵字;2.左邊是類名,為對象的數(shù)據(jù)類型;Person p數(shù)據(jù)類型 名 3.右邊的類名()稱為類的構(gòu)造方法;new Person();構(gòu)造方法7.2.2、使用對象的語法在Java中,要引用對象的屬性和方法,需要通過“.”。對象名.屬性 //引用對象的屬性對象名.方法 //引用對象的方法publicclassPerson{ publicStringname; publicStringgender; publicintage; publicvoidwork(){ System.out.println(name+"好好學(xué)習(xí)"); }}publicclassPersonTet{ publicstaticvoidmain(String[]args){ Personp=newPerson();//創(chuàng)建對象;實例化對象 ="周瑜";//使用對象并賦值 p.age=26; //使用對象并賦值 p.gender="男";//使用對象并賦值 p.work();//使用對象方法 }}7.3對象數(shù)組對象數(shù)組的數(shù)據(jù)類型就是具體的類名,對象數(shù)組的內(nèi)存儲就是這個類的對象,每一個元素就是一個類,當(dāng)根據(jù)下標(biāo)找到某個元素時,可以按照對象的使用法來使用元素的屬性方法8.1、構(gòu)造方法方法名與類名相同沒有返回值構(gòu)造方法通常不需要顯示調(diào)用,在實例化對象的同時自動調(diào)用默認(rèn)情況下,所有的類都有無參吳方法體的構(gòu)造函數(shù)如果顯示寫了的構(gòu)造方法,Java自帶的無參無方法體的構(gòu)造函數(shù)將不存在構(gòu)造方法通常來對自身的屬性記性初始化賦值publicclassPerson{ publicStringname; publicStringgender; publicintage;有參的構(gòu)造方法:[修飾符] 類名(參數(shù)類型參數(shù)名,參數(shù)類型參數(shù)名,……){方法體}無參的構(gòu)造方法:[修飾符] 類名(){方法體}系統(tǒng)默認(rèn)的構(gòu)造方法:[修飾符] 類名(){}8.2無參的構(gòu)造方法訪問修飾符返回值類型方法名(){方法體;}例如: publicvoidFangFa(){ System.out.println("周瑜很聰明"); }8.3有參構(gòu)造方法訪問修飾符返回值類型方法名(參數(shù)列表){方法體;}例如: publicvoidFangFa(Stringname){ if(name.equals("周瑜")){ System.out.println(name+"很聰明"); } }8.3.1、值傳遞值傳遞:(形式參數(shù)類型是基本數(shù)據(jù)類型)方法調(diào)用時,實際參數(shù)把它的值傳遞給對應(yīng)的形式參數(shù),形式參數(shù)只是用實際參數(shù)的值初始化自己的存儲單元內(nèi)容,是兩個不同的存儲單元,所以方法執(zhí)行中形式參數(shù)值的改變不影實際參數(shù)的值。8.3.2、引用傳遞引用傳遞:(形式參數(shù)類型是引用數(shù)據(jù)類型參數(shù)),也稱為傳地址。方法調(diào)用時,實際參數(shù)是對象(或數(shù)組),這時實際參數(shù)與形式參數(shù)指向同一個地址,在方法執(zhí)行中,對形式參數(shù)的操作實際上就是對實際參數(shù)的操作,這個結(jié)果在方法結(jié)束后被保留下來,所以,方法執(zhí)行中形式參數(shù)的改變將會影響實際參數(shù)。實參8.3.3、形參與實參的傳遞示意圖實參值傳遞方法的定義形參形參新值值值

值傳遞方法的定義形參形參新值值值值———>新值傳遞①存儲單元地址(引用)實參值———>新值傳遞①存儲單元地址(引用)實參方法的定義方法的定義形參存儲單元地址(引用)形參存儲單元地址(引用)②變化語句變化語句③publicclassDemo1{ publicclassDemo1{ intx; publicstaticvoidmain(String[]args){ Demo1obj=newDemo1(); obj.x=5; obj.change(obj); System.out.println(obj.x); } publicvoidchange(Demo1obj){ obj=newDemo1(); obj.x=3; }}結(jié)果為:5引用傳遞8.4方法的返回值8.4.1、無返回值當(dāng)方法無返回值時用void修飾例如: publicvoidFangFa(){ 方法體; }8.4.2、基本數(shù)據(jù)類型作為返回值返回值為基本數(shù)據(jù)類型時用相對應(yīng)的數(shù)據(jù)類型接受例如: publicintadd(intn,intm){ intnum=n+m; returnnum; }8.4.3、以對象作為返回值返回值為引用數(shù)據(jù)類型時,用相對應(yīng)的類(或接口)以及其父類來接受例如: publicStringname; publicStringchange(Stringname){ =name; return; }8.5方法的重載必須發(fā)生在同一個類中方法名必須相同參數(shù)個數(shù)或者類型必須不同方法重載與返回值無關(guān)對一般方法的一種升級,可以根據(jù)參數(shù)的不同,采用不同的實現(xiàn)方法,而不需要編寫多個名稱,只要記住一個方法名即可例如: publicvoidshow(intage){ } publicvoidshow(Stringname){ }8.6方法的重寫重寫方法和被重寫方法必須具有相同的方法名;重寫方法和被重寫必須具有相同的參數(shù)列表;重寫方法的返回值類型必須和被重寫方法的返回值類型相同;重寫方法不能縮小被重寫方法的訪問權(quán)限。重寫方法拋出的異常下不能超過父類相應(yīng)方法拋出的異常(子類異常不能大于父類異常)在java中,子類可以繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想要原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。例如:publicinterfaceFruit{ publicvoidshow();}publicclassPearimplementsFruit{ @Override publicvoidshow(){ System.out.println("賣梨子"); }關(guān)鍵字9.1、this和super9.1.1this關(guān)鍵字this關(guān)鍵字是對一個對象的默認(rèn)引用。每個實例方法內(nèi)部。都有一個this引用變量,指向調(diào)用這個方法的對象。this使用舉例如下:1.使用this調(diào)用成員變量,解決成員變量和局部變量同名的沖突publicvoidsetName(Stringname){ =name; }2.使用this調(diào)用成員方法

publicvoidshow(){ System.out.println("方法體");} publicvoidget(intage){ age=age+2; this.show(); //this可以省略,直接調(diào)用get()方法 }使用this調(diào)用重載的構(gòu)造方法,只能在構(gòu)造方法中使用,且必須是構(gòu)造方法的第一條語句。 publicPerson(){ this("男人"); //調(diào)用有參的構(gòu)造方法,必須第一條語句,否則就報錯 System.out.println("000"); } //重載構(gòu)造方法 publicPerson(Stringname){ //有參構(gòu)造方法 System.out.println("11111"); =name; }提示:

因為this是在對象內(nèi)部指代自身的引用,所以this只能調(diào)用實例變量,實例方法和構(gòu)造方法。this不能調(diào)用類變量和類的方法(被static修飾的變量和方法稱為類的變量和方法),this也不能調(diào)用局部變量。9.1.2、super關(guān)鍵字super關(guān)鍵字用在子類中,目的只有一個,就是訪問直接父類中被屏蔽的內(nèi)容,進(jìn)一步提高了代碼的重用性和靈活性。super關(guān)鍵字不僅可以訪問父類的構(gòu)造方法,還可以訪問父類的成員變量,包括父類的屬性。一般方法等。super訪問父類成員的語法如下:訪問父類構(gòu)造方法:super(參數(shù))父類:publicabstractclassVehicle{publicVehicle(){ super(); //TODOAuto-generatedconstructorstub } publicVehicle(Stringbrand,intprice){ super(); this.brand=brand; this.price=price; }子類:publicfinalclassBusextendsVehicle{ privateintseat; publicBus(Stringbrand,intprice,intseat){ super(brand,price);//訪問父類的構(gòu)造方法,有參的 this.seat=seat; }}訪問父類屬性/方法:super.父類屬性/方法publicdoublefindArea(){ return3.14*radius*radius;}publicdoublefindArea(){ returnsuper.findArea()*2+getRadius()*2*3.14*getLength(); }//super.findArea()訪問父類的方法在語法中:super只能出現(xiàn)在子類(子類的方法和構(gòu)造方法)中,而不是其他的位置。super用于訪問父類的成員,如父類的屬性、方法、構(gòu)造方法具有訪問權(quán)限的限制,如無法通過super訪問private成員。super也可以用在子類中,java能自動向上層類追溯。父類行為被調(diào)用時,就好像該行為是本類的行為一樣,而且調(diào)用行為不必發(fā)生在父類之中,它能自動向上層類追溯。通過super調(diào)用父類大的隱藏變量(private),必須要在父類中聲明getter()方法,因為生命為private的數(shù)據(jù)成員對子類是不可見的。值得注意的是在構(gòu)造方法中調(diào)用另一個構(gòu)造方法,調(diào)用動作必須置于最起始的位置。不能在構(gòu)造方法以外的任何方法內(nèi)調(diào)用構(gòu)造方法。在一個構(gòu)造方法內(nèi),只能調(diào)用一個構(gòu)造方法。如果編寫一個構(gòu)造方法,既沒有調(diào)用super()也沒有調(diào)用this(),編譯器會自動插入一個調(diào)用到父類構(gòu)造方法中,而且不帶參數(shù)。最后注意super與this區(qū)別:super不是一個對象的引用,不能將super賦值給另一個對象變量,它只是一個指示編譯器調(diào)用父類方法的特殊關(guān)鍵字。9.2、static被static修飾的屬性被該類所有的對象共享被static修飾的方法,也再不屬于具體的某個對象,而屬于類本身注意:靜態(tài)的屬性都隨著類加載的時候一起加載靜態(tài)代碼塊,永遠(yuǎn)值執(zhí)行一次,并且在構(gòu)造方法之間類第一次使用時的時候,靜態(tài)代碼塊就會執(zhí)行publicclassAddColor{ /** *static靜態(tài)代碼塊只要調(diào)用這個類 *就會優(yōu)先調(diào)用static代碼塊 *static修飾的屬性和方法也會優(yōu)先調(diào)用 **/ staticColor[]c; static{ c=newColor[10]; c[0]=newGreen(); c[1]=newGray(); c[2]=newBlue(); c[3]=newPink(); c[4]=newPurple(); }}不能在static修飾的方法里面出現(xiàn)沒有被static修飾的方法和屬性。因為被static修飾的方法和屬性是類的方法和屬性,在沒實例化對象時也可以調(diào)用但是未被static修飾的方法和屬性,只有在實例化對象時才可以調(diào)用。在static方法內(nèi)部只能訪問類的static屬性,不能訪問類的非static屬性。非靜態(tài)代碼塊類似一個不帶參數(shù)的構(gòu)造器,每次都會執(zhí)行{代碼塊}

publicclassAccount_test{ privatestaticinti=0; static{ i++; System.out.println(i); } publicAccount_test(){ i++; System.out.println(i); } publicstaticvoidmain(String[]args){ Account_testa1=newAccount_test();//輸出1,2; System.out.println("a1="+a1.getI());//輸出a1=2; Account_testa2=newAccount_test();//輸出3; System.out.println("a2="+a2.getI());//輸出a2=3; Account_testa3=newAccount_test();//輸出4; System.out.println("a3="+a3.getI());//輸出a3=4; Account_testa4=newAccount_test();//輸出5; System.out.println("a4="+a4.getI());//輸出a4=5; System.out.println(a1.getI()+"+"+a2.getI()+"+"+a3.getI()+"+" +a4.getI()); } publicstaticintgetI(){ returni; } publicstaticvoidsetI(inti){ Account_test.i=i;1、第一次使用這個類時候,類的靜態(tài)代碼塊也隨之生成,此時靜態(tài)代碼塊中的i=1;而構(gòu)造方法中的i=22、第二次實例化這個類時,類中的構(gòu)造方法運(yùn)行,于是i=i++=3;1、第一次使用這個類時候,類的靜態(tài)代碼塊也隨之生成,此時靜態(tài)代碼塊中的i=1;而構(gòu)造方法中的i=22、第二次實例化這個類時,類中的構(gòu)造方法運(yùn)行,于是i=i++=3;3、………………4、第四次實例化這個類時,類中的構(gòu)造方法第四次運(yùn)行,此時的i=5;由于i是被static所修飾,所以是類中屬性公用的,于是的到了a1=5,a2=5,a3=5,a4=5}12a1=23a2=34a3=45a4=55+5+5+5

被static修飾的屬性是類的屬性類的屬性都會隨著每次實例化對象而改變publicclassTest_Person{ publicstaticvoidmain(String[]args){ Personperson1=newPerson(); Personperson2=newPerson(); //Person.setCountry("中國"); person1.setCountry("美國"); person1.setAge(26);被static修飾的屬性成為了類的屬性類的屬性的值每次都會隨著重置而被改變 person1.setName("周瑜"被static修飾的屬性成為了類的屬性類的屬性的值每次都會隨著重置而被改變 person1.setGender('男'); person2.setCountry("日本"); person2.setAge(26); person2.setName("陳明"); person2.setGender('女'); //person2.setCountry("菲律賓"); System.out.println(person1); System.out.println(person2); }}結(jié)果:Person[country=日本,name=周瑜,age=26,gender=男]Person[country=日本,name=陳明,age=26,gender=女]publicclassAnimal{ privateintid; publicstaticinttotal=0; publicAnimal(){ total++; id=total; } publicstaticvoidmain(String[]args){ Animaldog=newAnimal(); System.out.println(dog.id); System.out.println(Animal.total); Animalcat=newAnimal(); System.out.println(cat.id); System.out.println(Animal.total); Animalsnake=newAnimal(); System.out.println(snake.id); System.out.println(Animal.total); Animalmokey=newAnimal(); System.out.println(mokey.id); System.out.println(Animal.total); } /** *@returntheid */ publicintgetId(){ returnid; } /** *@paramid *theidtoset */ publicvoidsetId(intid){ this.id=id; } /** *@returnthetotal */ publicstaticintgetTotal(){ returntotal; } /** *@paramtotal *thetotaltoset */ publicstaticvoidsetTotal(inttotal){ Animal.total=total; }}結(jié)果為:1,1,2,2,3,3,4,4

9.3、abstract和final9.3.1、abstract在java中,當(dāng)一個類被abstract關(guān)鍵字修飾時,該方法稱為抽象方法,抽象方法所在的類必須定義為抽象類,反之不成立。publicabstractclassColor當(dāng)一個方法被定義為抽象方法以后,意味著該方法不會有具體的實現(xiàn),而是在抽象類的子類通過方法重寫進(jìn)行實現(xiàn)。抽象方法的定義語句:訪問修飾符 abstract 返回值 方法名(參數(shù)列表);publicabstractColorchange(Colorcolor); publicabstractvoidshow();注意:抽象的類無法實例化Color c = new Color();//這種發(fā)發(fā)是錯誤的抽象的修飾訪問符只能是protected和public。9.3.2、final修飾類當(dāng)用final修飾一個類時,表明這個類不能被繼承。也就是說,如果一個類你永遠(yuǎn)不會讓他被繼承,就可以用final進(jìn)行修。Final類中的成員變量可以格局需要設(shè)為final,但是要注意final類中的所有成員方法都會被隱式地指定為final方法。publicfinalclassFangfa{}在使用final修飾類的時候,要注意謹(jǐn)慎選擇,除非這個類真的在以后不悔用來繼承或者處于安全的考慮,盡量不要將類設(shè)計為final類。修飾方法使用final方法的原因有兩個:第一個原因是把方法鎖定,以防止任何繼承類修改他的定義第二個原因是效率,在早期的java實現(xiàn)版中,會將java方法轉(zhuǎn)換為內(nèi)嵌調(diào)用。但是方法國語龐大,可能看不帶內(nèi)嵌調(diào)用帶來的任何性能提升。在最近的java版本中,不需要使用final方法進(jìn)行這些優(yōu)化了。因此,如果只有在想明確禁止該方法在子類中被覆蓋的情況下才將方法設(shè)置為final注:類的private方法會隱式地被指定為final方法修飾變量修飾變量是final用得最多的地方。對于一個final變量,如果是基本數(shù)據(jù)類型變量,則其數(shù)值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能在讓其指向另一個對象。publicclassFangfa{ privatefinalinti=1; publicFangfa(){ i=1;//不能對終態(tài)賦值 finalObjectobj=newObject(); obj=newObject();//不能對局部終態(tài)賦值; }現(xiàn)在用final舉例說明:publicclassFinal_shiyong{ publicstaticvoidmain(String[]args){ Stringa="hello2"; finalStringb="hello"; Stringd="hello"; Stringc=d+2; Stringe=b+2; System.out.println((a==c)); System.out.println((a==e)); }}結(jié)果為:falsetrue當(dāng)final變量是劇本數(shù)據(jù)類型以及String類型時,如果在編譯期間能知道它的確切值,則編譯器會把它當(dāng)作編譯期敞亮使用。也就是說在用到該final變量地方,相當(dāng)于直接訪問的這個常量,不需要在運(yùn)行時確定。另外一個:publicclassFinal_shiyong{ publicstaticvoidmain(String[]args){ Stringa="hellow2"; finalStringb=getHello(); Stringc=b+2; System.out.println((a==c)); } publicstaticStringgetHello(){ return"hello"; }}結(jié)果為:false下面比較一下final和static的區(qū)別publicclassFinal_shiyong{ publicstaticvoidmain(String[]args){ MyClassmyclass1=newMyClass(); MyClassmyclass2=newMyClass(); System.out.println(myclass1.i); System.out.println(myclass1.j); System.out.println(myclass2.i); System.out.println(myclass2.j);static的值結(jié)果最后都是一樣的static的值結(jié)果最后都是一樣的final的結(jié)果值兩次都不一樣Static代碼塊只會執(zhí)行依次,在調(diào)用這個類的時候;Final每次調(diào)用時候都會重復(fù)使用;0.75530302228652280.75375507193428750.66733834470917050.7537550719342875publicclassMyClass{ publicfinaldoublei=Math.random(); publicstaticdoublej=Math.random();}封裝和抽象10.1、封裝10.1.1、封裝概述封裝的實質(zhì)就是將類的狀態(tài)信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。封裝反映了事物的相對獨立性,有效避免了外部錯誤對此對象的影響,并且能對于對象使用者由于大一產(chǎn)生的錯誤起到預(yù)防作用。同樣面向?qū)ο笞兂商岢珜ο笾g實現(xiàn)松耦合關(guān)系。封裝的好處主要有隱藏類的實現(xiàn)細(xì)節(jié),讓使用者只能通過程序員規(guī)定的方法來訪問數(shù)據(jù),可以方便地加入存取空值語句,限制不合理操作。10.1.2、封裝的屬性private數(shù)據(jù)類型 屬性名;//屬性私有化publicclassPerson{ privateStringname; privateStringgender; privateintage;}設(shè)置setter/getter()方法添加setter/getter()方法時可以手動添加,也可以使用快捷鍵由系統(tǒng)添加。publicclassPerson{ privateStringname; privateStringgender; privateintage; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicStringgetGender(){ returngender; } publicvoidsetGender(Stringgender){ this.gender=gender; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; }}設(shè)置屬性的存取限制此時,屬性依然沒有限制作用,需要進(jìn)一步利用條件判斷語句進(jìn)行限制。publicvoidsetAge(intage){ if(age>18&&age<60){ this.age=age; }else{ System.out.println("輸入有誤"); }}此處的封裝就是將屬性私有化對外公開的方法有兩種一種是用來賦值(有限制的)一種用來取值以上過程可以看作是封裝10.2、抽象在面向?qū)ο蟮母拍钪?,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣的。并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表征我們在對于問題領(lǐng)域進(jìn)行分析、設(shè)計中得出的抽象概念,是一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。比如:我們進(jìn)行一個圖形編輯軟件的開發(fā),就會發(fā)現(xiàn)問題領(lǐng)域存在這圓、三角形、這樣一些具體概念,它們是不同,但是它們又都屬于形狀這樣一個概念,形狀這個概念在問題領(lǐng)域是不存在,他就是一個抽象概念。正是因為抽象的概念沒有對應(yīng)的具體概念。所以,表示抽象概念的抽象類不能夠?qū)崿F(xiàn)具體化。在面向?qū)ο箢I(lǐng)域,抽象類主要用來進(jìn)行類型隱藏。我們可以構(gòu)造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現(xiàn)方式。這個類就是抽象類,而這一組任意個可能的具體實現(xiàn)則表現(xiàn)為所有可能的派生類。模版可以操作一個抽象體。由于模塊依賴于一個固定的抽象提,因此它是不允許修改的;同時,通過這個抽象體派生,也可擴(kuò)展此模塊的行為功能。為了能實現(xiàn)面向?qū)ο笤O(shè)計的一個最核心的原則OCP(Open-Closed-Principle),抽象類是其中的關(guān)鍵字。繼承11.1、繼承的作用繼承是面向?qū)ο蟮娜筇卣髦?,繼承可以解決編程中代碼多次重復(fù)的問題,是實現(xiàn)代碼重用的重要手段十一。繼承是軟件可重用性的之中表現(xiàn)手段,心累可以在增加自身代碼的情況下,通過從現(xiàn)有的類中繼承其屬性和方法,來充實資深的肉榮,這種現(xiàn)象或者行為稱為繼承。幾個時候新類稱為子類,現(xiàn)有類稱為父類。繼承最基本的作用就是是的代碼可重寫,增加軟件的可擴(kuò)性。Java中只支持單繼承,即每一個子類只能有一個父類。繼承表達(dá)的是“xx is a xx”的關(guān)系,或者說是一種特殊和一般的關(guān)系,如Dog isaPet。同樣可以讓“學(xué)生”繼承“人”,讓“蘋果”繼承“水果”,讓“三角形”繼承“幾何圖形”等。在Java,子類可以從父類繼承一下類容:可以繼承public和protected修飾的屬性和方法,不論子類和父類是否在同一個包里??梢岳^承默認(rèn)訪問修飾修飾的屬性和方法,但是子類和父類必須在同一個包里。無法繼承父類的構(gòu)造方法。父類:publicclassCircle{ privatedoubleradius; publicCircle(){//無參有方法體的構(gòu)造方法 this.radius=1; } publicdoublegetRadius(){ returnradius; } publicvoidsetRadius(doubleradius){ this.radius=radius; } publicdoublefindArea(){ return3.14*radius*radius; }}子類:publicclassCylinderextendsCircle{ privatedoublelength; publicCylinder(){//無參有方法體的 this.length=1; } publicdoublegetLength(){ returnlength; } publicvoidsetLength(doublelength){ this.length=length; }/***當(dāng)子類中的方法findArea與父類中的方法findArea重構(gòu)時,根據(jù)需要來調(diào)用父類中的方法;*此時使用super.findArea來完成;**/ publicdoublefindArea(){ returnsuper.findArea()*2+getRadius()*2*3.14*getLength(); } publicdoublefindVolum(){ returnsuper.findArea()*length; }}publicclassTest{ publicstaticvoidmain(String[]args){ Cylinderc=newCylinder(); c.setRadius(2); System.out.println(c.findVolum()); }}如果子類和父類構(gòu)造器不同父類里面是一個有參的,子類中是一個無參的那么,在子類構(gòu)造器的第一個應(yīng)該給父類構(gòu)造器的形參賦值;父類是一個無參,子類是個有參的,那么在子類構(gòu)造器中第一個就要引用父類的構(gòu)造器但是如果父類中有其他的非空參的構(gòu)造函數(shù)而沒有空參的構(gòu)造函數(shù),在子類的構(gòu)造函數(shù)中第一行如果沒有去調(diào)用父類的非空構(gòu)造函數(shù),則會在編譯時報錯。因為子類中所有的構(gòu)造函數(shù)默認(rèn)都會訪問父類中的空參構(gòu)造函數(shù)。11.2、實例化子類對象在Java中,一個類的構(gòu)造方法在如下兩種情況中總會是執(zhí)行:創(chuàng)建該類的對象(實例化)創(chuàng)建該類的子類的對象(子類的實例化)因此,在子類在實例化時,會首先執(zhí)行其父類的構(gòu)造方法,然后才執(zhí)行子類構(gòu)造方法。換而言之,當(dāng)在Java語言中創(chuàng)建一個對象時,Java虛擬機(jī)會按照父類——子類的順序執(zhí)行一系列的構(gòu)造方法。子類繼承父類時構(gòu)造構(gòu)造方法調(diào)用規(guī)則如下:如果子類的構(gòu)造方法中沒有通過super顯示調(diào)用父類的有參構(gòu)造方法,也沒有通過this顯示調(diào)用自身的其他構(gòu)造方法,則系統(tǒng)會默認(rèn)先調(diào)用父類的無參構(gòu)造方法。在這種情況下,是否寫“super();”語句,效果是一樣的。如果子類的構(gòu)造方法中通過super顯式調(diào)用父類的有參構(gòu)造方法,那么將執(zhí)行父類相應(yīng)的構(gòu)造方法,而不執(zhí)行父類無參構(gòu)造方法。如果子類的構(gòu)造方法中通過this顯式調(diào)用自身的其他構(gòu)造方法,在構(gòu)造方法,在相應(yīng)用以上兩條規(guī)則。特別需要注意的是,如果存在多級繼承關(guān)系,在創(chuàng)建一個子類對象時,以上規(guī)則會多次向更高一級父類應(yīng)用,知道執(zhí)行頂級父類Object類的無參構(gòu)造方法為止。11.2、extendsextends用來實現(xiàn)繼承,java中的繼承是單繼承,一個類只能有一個父類,易于管理程序,同時一個類可以實現(xiàn)多個接口,從而克服單繼承的缺點。例如:publicclassCylinderextendsCircle11.3、訪問修飾符訪問權(quán)限修飾符:作用域當(dāng)前類同一package子類其他packagepublic√√√√protected√√√xfriendly(默認(rèn))√√xxprivate√xxxjava中,friendly這個修飾符并沒有顯式的聲明,在成員變量和方法前什么修飾符也不用,默認(rèn)的就是friendly。 訪問權(quán)限修飾符修飾成員變量和方法。public:表明該成員變量和方法是共有的,能在任何情況下被訪問protected:必須在同一包中才能被訪問。friendly:在一個包中或子類中才能被訪問private:只能在本類中訪問 實際上,把重要的數(shù)據(jù)修飾為private,然后寫一個public的函數(shù)訪問它,正好體現(xiàn)了OOP的封裝特性,是OOP安全性的體現(xiàn)。訪問權(quán)限修飾符修飾類不能用protected和private修飾類。用friendly修飾類叫友好類,在另外一個類中使用友好類創(chuàng)建對象時,要保證他們在同一包中。訪問權(quán)限修飾符與繼承這里的訪問修飾符指的是修飾成員變量和方法??梢苑譃閮煞N情況:子類與父類在同一包中此時只有生命為private的變量與方法不能被繼承(訪問)b)子類與父類不在同一包中此時的private與friendly均不能被繼承(訪問),protected和public可以。所以訪問權(quán)限修飾符權(quán)限從高到低排列是public、protected、friendly、private。接口Java中接口的作用和生活中的接口類似,它提供一種約定,使得實現(xiàn)接口的類(或結(jié)構(gòu))在形式上保持一致。如果抽象類中所有的方法都是抽象方法,就可以使用Java提供的接口來表示。從這個角度上來講,接口可以看作一種特殊的“抽象類”,但是采用與抽象類完全不同的語法來表示,兩者的設(shè)計理念也是不同的。12.1、定義和實現(xiàn)一個簡單的接口簡單的說,接口是一個不能實例化的類型。接口的定義類似與類的定義接口的定義語法:publicinterface接口名{ //接口的訪問修飾符只能是public接口成員包括:1.常量2.公共的抽象方法}例如:publicinterfaceAnimal{ publicfinalStringname="豬";//接口中的屬性必須初始化;//屬性和方法的修飾符只能是public、static、final,且必須有初始值,為一個常量。 publicvoidshow();}實現(xiàn)接口的語法:public類名implements接口名{實現(xiàn)方法(實現(xiàn)接口里的抽象方法)普通方法}例如:publicclassDogimplementsAnimal{ @Override publicvoidshow(){//實現(xiàn)方法 System.out.println("狗啃骨頭"); } publicvoidfeed(){//普通方法 System.out.println("吃肉"); }}

publicinterfaceAnimal{ publicStringname="豬"; publicvoidshow();}}publicclassPigimplementsAnimal{ @Override publicvoidshow(){ System.out.println("喂豬"); }}publicclassCatimplementsAnimal{ @Override publicvo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論