《信息系統(tǒng)開發(fā)》系統(tǒng)分析與設(shè)計(jì)概述演示文檔
《《信息系統(tǒng)開發(fā)》系統(tǒng)分析與設(shè)計(jì)概述演示文檔》由會(huì)員分享,可在線閱讀,更多相關(guān)《《信息系統(tǒng)開發(fā)》系統(tǒng)分析與設(shè)計(jì)概述演示文檔(126頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
本章目標(biāo),掌握類和對(duì)象理解封裝會(huì)創(chuàng)建和使用對(duì)象,1/39,萬(wàn)物皆對(duì)象,世界是由什么組成的?,分類是人們認(rèn)識(shí)世界的一個(gè)很自然的過(guò)程,在日常生活中會(huì)不自覺地進(jìn)行分類,2/39,身邊的對(duì)象,張浩,李明,收銀員 員工號(hào)10001 姓名李明 部門財(cái)務(wù)部 操作: 收款 打印賬單,顧客姓名張浩年齡20體重60kg 操作: 購(gòu)買商品,3/40,3/39,對(duì)象的特征屬性,屬性對(duì)象具有的各種特征每個(gè)對(duì)象的每個(gè)屬性都擁有特定值例如:張浩和李明的年齡、姓名不一樣,20歲,張浩,屬性,60kg,顧客張浩,4/39,對(duì)象的特征方法,方法對(duì)象執(zhí)行的操作對(duì)象:用來(lái)描述客觀事物的一個(gè)實(shí)體,由一組屬性和方法構(gòu)成,打印賬單,方法,刷卡,收銀員李明,5/40,收銀,5/39,對(duì)象的屬性和方法,列出尼古拉斯凱奇駕駛的這輛法拉利F360 Spider的屬性和方法列出小狗對(duì)象的屬性和方法,屬性: 品牌:法拉利 型號(hào):F360 Spider 顏色:黃色 價(jià)格:380萬(wàn)元方法: 發(fā)動(dòng) 停止 加速,屬性: 顏色:白色方法: 叫 跑 吃,6/40,提問,6/39,封裝,對(duì)象同時(shí)具有屬性和方法兩項(xiàng)特性對(duì)象的屬性和方法通常被封裝在一起,共同體現(xiàn)事物的特性, 二者相輔相承,不能分割,一輛汽車,有完好的零件和特定的顏色還應(yīng)具備開動(dòng)、剎車等方法行為,7/39,小結(jié),說(shuō)一說(shuō)教室里的對(duì)象描述他們的屬性和方法,顏色:黑色品牌:BENQ投影,姓名:張三年齡:20學(xué)習(xí),類型:白熾燈開關(guān)變亮變暗,材制: 木質(zhì)支撐物品,提問,8/40,8/39,從對(duì)象抽象出“類”,轎車,抽取出下列對(duì)象的共同特征(屬性和方法),問題,顧客,9/39,類,顧客類轎車類 ,類是模子,定義對(duì)象將會(huì)擁有的特征(屬性)和行為(方法),類是對(duì)象的類型不同于int類型:具有方法,各種口味的球狀冰淇淋,10/40,10/39,類和對(duì)象的關(guān)系,類是抽象的概念,僅僅是模板比如說(shuō):“人”對(duì)象是一個(gè)你能夠看得到、摸得著的具體實(shí)體,小布什,普京,克林頓,11/39,Java 是面向?qū)ο蟮恼Z(yǔ)言,所有Java程序都以類class為組織單元關(guān)鍵字class定義自定義的數(shù)據(jù)類型,public class HelloWorld public static void main(String args)System.out.println(Hello World!);,12/40,類的基本框架,12/39,Java類模板,類將現(xiàn)實(shí)世界中的概念模擬到計(jì)算機(jī)程序中,public class 類名 /定義屬性部分 屬性1的類型 屬性1; 屬性2的類型 屬性2; 屬性n的類型 屬性n; /定義方法部分 方法1; 方法2; 方法m;,語(yǔ)法,13/39,定義類,定義一個(gè)類的步驟,14/39,public class School /定義屬性String schoolName;/學(xué)校名稱int classNumber;/教室數(shù)目int labNumber;/機(jī)房數(shù)目/定義方法public void showSchool()System.out.println(schoolName + classNumber + labNumber );,15/39,如何創(chuàng)建和使用對(duì)象,使用對(duì)象的步驟創(chuàng)建對(duì)象類名 對(duì)象名 = new 類名();引用對(duì)象成員:使用“.”進(jìn)行以下操作引用類的屬性:對(duì)象名.屬性引用類的方法:對(duì)象名.方法名(),School mySchool = new School();,mySchool.name = “西南交大; /給name屬性賦值mySchool.showSchool(); /調(diào)用showCenter()方法,語(yǔ)法,語(yǔ)法,16/39,創(chuàng)建和使用對(duì)象示例,一個(gè)景區(qū)根據(jù)游人的年齡收取不同價(jià)格的門票。請(qǐng)編寫游人類,根據(jù)年齡段決定能夠購(gòu)買的門票價(jià)格并輸出,問題,分析,17/40,17/39,創(chuàng)建和使用對(duì)象示例,18/39,19/39,創(chuàng)建和使用對(duì)象示例,小結(jié),類和對(duì)象的關(guān)系?如何創(chuàng)建和使用對(duì)象?,提問,經(jīng)驗(yàn),利用MyEclipse自動(dòng)提示功能,20/39,面向?qū)ο螅∣O)的優(yōu)點(diǎn),21/39,總結(jié),對(duì)象是用來(lái)描述客觀事物的一個(gè)實(shí)體類定義了對(duì)象將會(huì)擁有的特征(屬性)和行為(方法)類是對(duì)象的類型,對(duì)象是類的實(shí)例使用類的步驟,22/39,本章目標(biāo),會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋,23/38,類的方法,寫出獅子對(duì)象的“跑”方法、 “叫”方法,電動(dòng)玩具獅子屬性:顏色:黃色行為:跑叫,按此按鈕,獅子開始叫,按此按鈕,獅子開始跑,問題,24/38,類的方法示例,AutoLion類代碼實(shí)現(xiàn),public class AutoLion String color = 黃色; public void run() System.out.println(正在以0.1米/秒的速度向前奔跑); public String bark() String sound = 大聲吼叫 ; return sound; ,方法體,返回值類型,方法名稱,示例,25/38,如何定義類的方法,類的方法定義類的某種行為(或功能),定義類的方法,public 返回值類型 方法名() /這里編寫方法的主體,步驟一:定義方法名以及返回值類型,步驟二:編寫方法體,語(yǔ)法,26/38,方法的返回值,兩種情況如果方法具有返回值,方法中必須使用關(guān)鍵字return返回該值,返回值類型為該返回值的類型如果方法沒有返回值,返回值類型為void,public class Student String name = 張三; public String getName() return name; /,return 表達(dá)式;,作用: 跳出方法、返回結(jié)果,語(yǔ)法,27/38,public class Student String name = 張三; public void getName() /,方法調(diào)用,方法是個(gè)“黑匣子”,完成某個(gè)特定的應(yīng)用程序功能,并返回結(jié)果方法調(diào)用:執(zhí)行方法中包含的語(yǔ)句,對(duì)象名.方法名();,小明過(guò)生日,爸爸送他一個(gè)電動(dòng)獅子玩具,編程測(cè)試這個(gè)獅子能否正常工作,語(yǔ)法,問題,28/38,方法調(diào)用,public class AutoLion String color = 黃色; /顏色 /*跑*/ public void run() System.out.println(正在以0.1米/秒的速度向前奔跑。); /*叫*/ public String bark() String sound = 大聲吼叫 ; return sound; /*獲得顏色*/ public String getColor() return color; /*顯示獅子特性*/ public String showLion() return 這是一個(gè) + getColor() + 的玩具獅子!; ,public class TestLion public static void main(String args) AutoLion lion = new AutoLion(); System.out.println(lion.showLion(); lion.run(); System.out.println(lion.bark(); ,在類的方法中調(diào)用該類另一個(gè)方法,在main()方法中調(diào)用類的方法,29/38,方法調(diào)用小結(jié),方法之間允許相互調(diào)用,不需要知道方法的具體實(shí)現(xiàn),實(shí)現(xiàn)重用,提高效率,30/38,public class Student1 public void showInfo() return 我是一名學(xué)生; ,方法的返回值類型為void,方法中不能有return 返回值!,常見錯(cuò)誤4-1,代碼閱讀,31/38,注意,public class Student2 public double getInfo() double weight = 95.5; double height = 1.69; return weight, height; ,方法不能返回多個(gè)值!,常見錯(cuò)誤4-2,代碼閱讀,32/38,注意,public class Student3 public String showInfo() return 我是一名學(xué)生;public double getInfo() double weight = 95.5; double height = 1.69; return weight; ,多個(gè)方法不能相互嵌套定義!,常見錯(cuò)誤4-3,public class Student3 public String showInfo() return 我是一名學(xué)生;public double getInfo() double weight = 95.5; double height = 1.69; return weight;,代碼閱讀,33/38,注意,public class Student4 int age = 20;if(age 20) System.out.println(年齡不符合入學(xué)要求!); public void showInfo() return 我是一名學(xué)生;,不能在方法外部直接寫程序邏輯代碼!,常見錯(cuò)誤4-4,代碼閱讀,34/38,注意,本章目標(biāo),會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋,35/38,成員變量和局部變量2-1,變量聲明的位置決定變量作用域變量作用域確定可在程序中按變量名訪問該變量的區(qū)域,/for(int a = 0; a 4; a+) System.out.println (hello );System.out.println ( a );/,代碼錯(cuò)誤,a的作用域僅在for循環(huán)中,36/38,成員變量和局部變量2-2,誰(shuí)能使用這些變量?,37/38,變量1類型 變量1; 變量2類型 變量2;變量3類型 變量3;,public 返回類型 方法1() 變量4類型 變量4;public 返回類型 方法2() 變量5類型 變量5; ,public class AutoLion,AutoLion類的方法,其他類的方法,方法1,方法2,成員變量,局部變量,局部變量,問題,成員變量和局部變量的區(qū)別,作用域不同局部變量的作用域僅限于定義它的方法成員變量的作用域在整個(gè)類內(nèi)部都是可見的初始值不同Java會(huì)給成員變量一個(gè)初始值Java不會(huì)給局部變量賦予初始值,在同一個(gè)類中,成員變量和局部變量同名時(shí),局部變量具有更高的優(yōu)先級(jí),在同一個(gè)方法中,不允許有同名局部變量在不同的方法中,可以有同名局部變量,注意,38/38,public class Test int score1 = 88; int score2 = 98; public void calcAvg() int avg = (score1 + score2)/2; public void showAvg() System.out.println(平均分是: + avg); ,常見錯(cuò)誤,局部變量avg的作用域僅限于calcAvg()方法,代碼閱讀,39/38,注意,public static void main(String args) Scanner input = new Scanner(System.in); System.out.print(請(qǐng)輸入Java成績(jī):); int java = input.nextInt(); / /*計(jì)算并顯示輸出*/ int total = java + c + db; double avg = total / 3; System.out.print(總成績(jī): + total); System.out.print(n平均分: + avg);,面向?qū)ο蟮木幊蹋∣OP),ScoreCalc類 和 Test類,40/38,如果還要再執(zhí)行這個(gè)功能,難道還要重復(fù)再寫一遍?,本章目標(biāo),會(huì)定義和使用類的方法理解變量作用域會(huì)添加JavaDoc注釋,41/38,JavaDoc注釋,回顧學(xué)過(guò)的注釋方式單行注釋:/這里是單行注釋多行注釋:/*這里是多行注釋, 可以多行*/JavaDoc注釋:使用“/*”開始和“*/”結(jié)束,用來(lái)注釋類、屬性和方法等,/* * mySchool類 *author John *version 1.0 2016/06/21 */,描述信息,author :描述作者信息,version :描述版本信息,42/38,添加JavaDoc注釋,為ScoreCalc類添加JavaDoc注釋,/* * ScoreCalc類 * author 張小明 * version 2.0 2013/06/01 */public class ScoreCalc /* Java成績(jī) */int java;/./* * 計(jì)算總成績(jī) * return total */public int calcTotalScore() int total = java + c + db;return total;/.,方法的JavaDoc注釋,屬性的JavaDoc注釋,類的JavaDoc注釋,問題,43/38,如何生成JavaDoc文檔,JavaDoc能夠從源代碼中抽取類、屬性、方法等的注釋,形成一個(gè)配套的API幫助文檔 生成JavaDoc文檔使用命令行方式生成使用MyEclipse工具生成,44/38,總結(jié),定義類的方法必須包括以下三個(gè)部分方法的名稱方法返回值的類型方法的主體類的方法調(diào)用,使用如下兩種形式同一個(gè)類中的方法,直接使用“方法名()”調(diào)用不同類的方法,首先創(chuàng)建對(duì)象,再使用“對(duì)象名.方法名()”來(lái)調(diào)用在Java中,有成員變量和局部變量,它們的作用域各不相同JavaDoc注釋以“/*”開頭,以“*/”結(jié)尾,45/38,本章目標(biāo),會(huì)定義帶參方法會(huì)使用帶參方法會(huì)創(chuàng)建包組織Java工程,46/40,為什么要用帶參數(shù)的方法,工作原理,新鮮桃汁,新鮮蘋果汁,新鮮梨汁,輸出三種果汁,47/40,如何使用帶參數(shù)的方法3-1,定義帶參數(shù)的方法調(diào)用帶參數(shù)的方法,public class ZhazhiJi public String zhazhi ( String fruit ) String juice = fruit + 汁; return juice; ,/*調(diào)用zhazhi方法*/ZhazhiJi myZhazhiji = new ZhazhiJi();String myFruit = 蘋果;String myJuice = myZhazhi.zhazhi(myFruit);System.out.println(myJuice);,參數(shù)列表:(數(shù)據(jù)類型 參數(shù)1,數(shù)據(jù)類型 參數(shù)2),調(diào)用方法,傳遞的參數(shù)要與參數(shù)列表一一對(duì)應(yīng),48/40,如何使用帶參數(shù)的方法3-2, 返回類型 () /方法的主體,該方法允許被訪問調(diào)用的權(quán)限范圍,方法返回值的類型,public class StudentsBiz String names = new String30; public void addName(String name) /增加學(xué)生姓名public void showNames() /顯示全部學(xué)生姓名,傳送給方法的形參列表,一個(gè)形式參數(shù),沒有返回值,語(yǔ)法,示例,定義帶參數(shù)的方法,49/40,如何使用帶參數(shù)的方法3-3,public static void main(String args) StudentsBiz st = new StudentsBiz(); Scanner input = new Scanner(System.in); for(int i=0;i5;i+) System.out.print(請(qǐng)輸入學(xué)生姓名:); String newName = input.next(); st.addName(newName); st.showNames(); ,實(shí)參的類型、數(shù)量、順序都要與形參一一對(duì)應(yīng),先實(shí)例化對(duì)象,再使用方法,調(diào)用帶參數(shù)的方法,對(duì)象名.方法名(參數(shù)1, 參數(shù)2,,參數(shù)n),實(shí)參列表,語(yǔ)法,示例,50/40,帶多個(gè)參數(shù)的方法2-1,設(shè)計(jì)方法,通過(guò)傳遞三個(gè)參數(shù)(開始位置、結(jié)束位置、查找的姓名)來(lái)實(shí)現(xiàn),在保存了多個(gè)學(xué)生姓名的數(shù)組中,指定查找區(qū)間,查找某個(gè)學(xué)生姓名并顯示是否查找成功,問題,分析,51/40,public boolean searchName (int start,int end,String name) boolean find = false; / 是否找到標(biāo)識(shí)/ 指定區(qū)間數(shù)組中,查找姓名for(int i=start-1;iend;i+) if(namesi.equals(name) find=true; break; return find;,返回值類型,帶有三個(gè)形參,返回結(jié)果:boolean類型,帶多個(gè)參數(shù)的方法2-2,if(st.searchName(s,e,name) System.out.println(找到了!);elseSystem.out.println(沒找到該學(xué)生!);,傳遞三個(gè)實(shí)參,示例,52/40,/方法定義public void addName(String name) /方法體/方法調(diào)用對(duì)象名.addName(String 張三);,調(diào)用方法時(shí)不能指定實(shí)參類型!,常見錯(cuò)誤4-1,對(duì)象名.addName(張三);,代碼閱讀,注意,53/40,/方法定義public boolean searchName(int start ,int end ,String name)/方法體/方法調(diào)用String s=開始;int e=3;String name=張三;boolean flag=對(duì)象名. searchName(s ,e ,name);,形參和實(shí)參數(shù)據(jù)類型不一致!,常見錯(cuò)誤4-2,代碼閱讀,注意,54/40,/方法定義public boolean searchName(int start,int end,String name)/方法體/方法調(diào)用int s=1;int e=3;boolean flag= 對(duì)象名.searchName(s,e);,形參和實(shí)參數(shù)量不一致!,常見錯(cuò)誤4-3,代碼閱讀,注意,55/40,/方法定義public boolean searchName(int start,int end,String name)/方法體/方法調(diào)用int s=1;int e=3;String name=張三;對(duì)象名.searchName(s,e,name);,調(diào)用方法后沒有對(duì)返回值作任何處理!,常見錯(cuò)誤4-4,代碼閱讀,注意,56/40,數(shù)組作為參數(shù)的方法2-1,將5位學(xué)員的決賽成績(jī)保存在數(shù)組中設(shè)計(jì)求平均成績(jī)、最高成績(jī)的方法,并把數(shù)組作為參數(shù),有5位學(xué)員參加了Java知識(shí)競(jìng)賽的決賽,輸出決賽的平均成績(jī)和最高成績(jī),問題,分析,57/40,public double calAvg( int scores ) int sum=0; double avg=0.0; for(int i =0;iscores.length;i+) sum+=scoresi; avg=(double)sum/scores.length; return avg;,返回值類型,數(shù)組作為參數(shù)的方法2-2,示例,public int calMax( int scores ) int max=scores0; for(int i =1;iscores.length;i+) if(maxscoresi) max=scoresi; return max; ,int scores=new int5;/保存比賽成績(jī) /double avgScore=st.calAvg(scores);int maxScore=st.calMax(scores);,數(shù)組參數(shù),調(diào)用方法,58/40,對(duì)象作為參數(shù)的方法2-1,方式一:設(shè)計(jì)帶四個(gè)參數(shù)(學(xué)號(hào)、姓名、年齡、成績(jī))的方法方式二:將學(xué)生學(xué)號(hào)、姓名、年齡、成績(jī)封裝在學(xué)生對(duì)象中,設(shè)計(jì)方法,以學(xué)生對(duì)象作為參數(shù),在實(shí)現(xiàn)了增加一個(gè)學(xué)生姓名的基礎(chǔ)上,增加學(xué)生的學(xué)號(hào)、年齡和成績(jī),并顯示這些信息,如何實(shí)現(xiàn)?,問題,分析,可以將多個(gè)相關(guān)的信息封裝成對(duì)象,作為參數(shù)傳遞,避免方法有太多的參數(shù)!,經(jīng)驗(yàn),59/40,class Student public int id; public String name; public int age; public int score; public void showInfo() System.out.println(id+t+name+t+age+t+score); ,學(xué)生類,對(duì)象作為參數(shù)的方法2-2,示例,public void addStudent( Student stu ) for(int i =0;istudents.length;i+) if(studentsi=null) studentsi=stu; break; ,/studentsBiz.addStudent(student1);studentsBiz.addStudent(student2);,對(duì)象參數(shù),調(diào)用方法,60/40,本章目標(biāo),會(huì)定義帶參方法會(huì)使用帶參方法會(huì)創(chuàng)建包組織Java工程,61/40,為什么需要包,Windows樹形文件系統(tǒng)文檔分門別類,易于查找和管理使用目錄解決文件同名沖突問題如何存放兩個(gè)同名的類而不沖突?,問題,62/40,包,解決類的同名問題,允許類組成較小的單元(類似文件夾),易于找到和使用相應(yīng)的文件,防止命名沖突,更好的保護(hù)類、屬性和方法,63/40,如何創(chuàng)建包,package edu.swjtu.javaclass; /聲明包public class MySchool / public String toString() / ,包名,用package聲明包,以分號(hào)結(jié)尾,作為Java源代碼第一條語(yǔ)句,示例,64/40,包命名規(guī)范,包名由小寫字母組成,不能以圓點(diǎn)開頭或結(jié)尾包名之前最好加上唯一的前綴,通常使用組織倒置的網(wǎng)絡(luò)域名 包名后續(xù)部分依不同機(jī)構(gòu)內(nèi)部的規(guī)范不同而不同,package mypackage;,package net.javagroup.mypackage;,package net.javagroup.research.powerproject;,部門名,項(xiàng)目名,package .mypackage; ,65/40,用MyEclipse 創(chuàng)建包,使用MyEclipse創(chuàng)建包的兩種方法分別創(chuàng)建包和類創(chuàng)建類的過(guò)程中創(chuàng)建類所在的包,66/40,包與目錄的關(guān)系,創(chuàng)建好的包和Java源文件是如何存儲(chǔ)的?創(chuàng)建包edu.swjtu.javaclass , 即創(chuàng)建了目錄結(jié)構(gòu):eduswjtujavaclass,edu,swjtu,javaclass,MySchool.java,HelloAccp.java,問題,67/40,如何導(dǎo)入包,為了使用不在同一包中的類,需要在Java程序中使用import關(guān)鍵字導(dǎo)入這個(gè)類,import java.util.*; /導(dǎo)入java.util包中所有類,關(guān)鍵字import并不陌生,import 包名. 類名;,1. 系統(tǒng)包:java.util2. 自定義包: edu.swjtu.javaclass,*: 指包中的所有類MySchool :指包中的AccpSchool類,語(yǔ)法,68/40,總結(jié),帶參方法定義的一般形式形參是在定義方法時(shí)對(duì)參數(shù)的稱呼實(shí)參是在調(diào)用方法時(shí)傳遞給方法的實(shí)際的值調(diào)用帶參方法時(shí)要求實(shí)參與形參要匹配創(chuàng)建包使用關(guān)鍵字package導(dǎo)入包使用關(guān)鍵字import, 返回類型 () /方法的主體,69/40,70,目錄,2.1 方法重載2.2 類的訪問控制2.3 構(gòu)造方法2.4 類變量 2.5 應(yīng)用舉例,71,方法重載,方法重載一個(gè)類中名字相同的多個(gè)方法這些方法的參數(shù)必須不同,Java可通過(guò)參數(shù)列表的不同來(lái)辨別重載的方法或者參數(shù)個(gè)數(shù)不同或者參數(shù)類型不同返回值可以相同,也可以不同重載的價(jià)值在于它允許通過(guò)使用一個(gè)方法名來(lái)訪問多個(gè)方法,1 方法重載,72,通過(guò)方法重載分別接收一個(gè)或幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)class MethodOverloading public void receive(int i)System.out.println(Receive one int parameter. );System.out.println(i=+i);public void receive(double d)System.out.println(Receive one double parameter. );System.out.println(d=+d);public void receive(String s)System.out.println(Receive one String parameter. );System.out.println(s=+s);,1 方法重載,方法重載 (續(xù))例,73,public void receive(int i,int j)System.out.println(Receive two int parameters. );System.out.println(i= + i + j= + j);public void receive(int i,double d)System.out.println(Receive one int parameter and one double parameter. );System.out.println(i= + i + d= + d);public class Examp3_17 public static void main(String args)MethodOverloading m = new MethodOverloading();m.receive(2);m.receive(5.6);m.receive(3,4);m.receive(7,8.2);m.receive(Is it fun?);,1 方法重載,方法重載 (續(xù))例,74,運(yùn)行結(jié)果Receive one int parameter.i=2Receive one double parameter.d=5.6Receive two int parameters.i=3 j=4Receive one int parameter and one double parameter.i=7 d=8.2Receive one String parameter.s=Is it fun?,1 方法重載,1方法重載 (續(xù))例 運(yùn)行結(jié)果,75,目錄,2.1 方法重載2.2 類的訪問控制2.3 構(gòu)造方法2.4 類變量 2.5 應(yīng)用舉例,什么是封裝,面向?qū)ο笕筇卣髦?封裝封裝的概念封裝的好處,封裝:將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過(guò)該類提供的方法來(lái)實(shí)現(xiàn)對(duì)隱藏信息的操作和訪問,隱藏類的實(shí)現(xiàn)細(xì)節(jié),只能通過(guò)規(guī)定方法訪問數(shù)據(jù),方便加入控制語(yǔ)句,方便修改實(shí)現(xiàn),76/39,如何使用封裝,封裝的步驟,設(shè)為private,用于屬性的讀寫,對(duì)屬性值的合法性進(jìn)行判斷,77/39,78,類的訪問控制類的訪問控制只有public(公共類)及無(wú)修飾符(缺省類)兩種訪問權(quán)限符與訪問能力之間的關(guān)系如表,2 類的訪問控制,類的訪問控制,79,類成員的訪問控制公有(public)可以被其他任何對(duì)象訪問(前提是對(duì)類成員所在的類有訪問權(quán)限) 保護(hù)(protected)只可被同一類及其子類的實(shí)例對(duì)象訪問私有(private)只能被這個(gè)類本身訪問,在類外不可見默認(rèn)(default)僅允許同一個(gè)包內(nèi)的訪問;又被稱為“包(package)訪問權(quán)限”,2 類的訪問控制,類的訪問控制,80,2 類的訪問控制,類的訪問控制(續(xù)),81,Circle類,給實(shí)例變量加上private修飾符public class Circle static double PI = 3.14159265; private int radius; public double circumference() return 2 * PI * radius; ,2 類的訪問控制,類的訪問控制(續(xù))例,82,編譯CircumferenceTester.javapublic class CircumferenceTester public static void main(String args) Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); double circum2 = c2.circumference(); System.out.println(Circle 1 has circumference + circum1); System.out.println(Circle 2 has circumference + circum2); ,2 類的訪問控制,2.2.6 類的訪問控制(續(xù))例,83,編譯時(shí)會(huì)提示出錯(cuò)在編譯語(yǔ)句“c1.radius = 50;”及“c2.radius =10;”時(shí)會(huì)提示存在語(yǔ)法錯(cuò)誤“radius has private access in Circle”說(shuō)明由于在Circle類聲明中變量radius被聲明為private,因此在其它類中不能直接對(duì)radius進(jìn)行存取如果要允許其它類訪問radius的值,就需要在Circle類中聲明相應(yīng)的公有方法。通常有兩類典型的方法用于訪問屬性值,get方法及set方法,2 類的訪問控制,類的訪問控制(續(xù))例編譯,84,get方法功能是取得屬性變量的值get方法名以“get”開頭,后面是實(shí)例變量的名字一般具有以下格式:public get() return ; 對(duì)于實(shí)例變量radius,聲明其get方法如下:public int getRadius() return radius;,2 類的訪問控制,類的訪問控制(續(xù))get方法,85,set方法功能是修改屬性變量的值set方法名以“set”開頭,后面是實(shí)例變量的名字一般具有以下格式public void set( ) = ; 聲明實(shí)例變量radius的set方法如下:public void setRadius(int r) radius = r;,2 類的訪問控制,類的訪問控制(續(xù))set方法,86,關(guān)鍵字this的使用如果形式參數(shù)名與實(shí)例變量名相同,則需要在實(shí)例變量名之前加this關(guān)鍵字,否則系統(tǒng)會(huì)將實(shí)例變量當(dāng)成形式參數(shù)。在上面的set方法中,如果形式參數(shù)為radius,則需要在成員變量radius之前加上關(guān)鍵字this。代碼如下:public void setRadius(int radius) this.radius = radius; ,2 類的訪問控制,類的訪問控制(續(xù))set方法,87,目錄,2.1 方法重載2.2 類的訪問控制2.3 構(gòu)造方法2.4 類變量 2.5 應(yīng)用舉例,88,構(gòu)造方法,構(gòu)造方法一種和類同名的特殊方法用來(lái)初始化對(duì)象Java中的每個(gè)類都有構(gòu)造方法,用來(lái)初始化該類的一個(gè)新的對(duì)象沒有定義構(gòu)造方法的類,系統(tǒng)自動(dòng)提供默認(rèn)的構(gòu)造方法,3 構(gòu)造方法,89,構(gòu)造方法的特點(diǎn)方法名與類名相同沒有返回類型,修飾符void也不能有通常被聲明為公有的(public)可以有任意多個(gè)參數(shù)主要作用是完成對(duì)象的初始化工作不能在程序中顯式的調(diào)用在生成一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新生成的對(duì)象初始化,構(gòu)造方法(續(xù)),3 構(gòu)造方法,90,系統(tǒng)提供的默認(rèn)構(gòu)造方法如果在類的聲明中沒有聲明構(gòu)造方法,則Java編譯器會(huì)提供一個(gè)默認(rèn)的構(gòu)造方法默認(rèn)的構(gòu)造方法沒有參數(shù),其方法體為空使用默認(rèn)的構(gòu)造方法初始化對(duì)象時(shí),如果在類聲明中沒有給實(shí)例變量賦初值,則對(duì)象的屬性值為零或空,3 構(gòu)造方法,構(gòu)造方法(續(xù))默認(rèn)構(gòu)造方法,91,聲明一個(gè)銀行帳號(hào)類及測(cè)試代碼public class BankAccountString ownerName; int accountNumber; float balance;public class BankTester public static void main(String args) BankAccount myAccount = new BankAccount(); System.out.println(ownerName= + myAccount.ownerName); System.out.println(accountNumber= + myAccount.accountNumber); System.out.println(balance= + myAccount.balance);,3 構(gòu)造方法,構(gòu)造方法(續(xù))例(默認(rèn)構(gòu)造方法),92,運(yùn)行結(jié)果ownerName=nullaccountNumber=0balance=0.0,3 構(gòu)造方法,構(gòu)造方法(續(xù))例 運(yùn)行結(jié)果,93,自定義構(gòu)造方法與方法重載可在生成對(duì)象時(shí)給構(gòu)造方法傳送初始值,使用希望的值給對(duì)象初始化構(gòu)造方法可以被重載,構(gòu)造方法的重載和方法的重載一致一個(gè)類中有兩個(gè)及以上同名的方法,但參數(shù)表不同,這種情況就被稱為方法重載。在方法調(diào)用時(shí),Java可以通過(guò)參數(shù)列表的不同來(lái)辨別應(yīng)調(diào)用哪一個(gè)方法,3 構(gòu)造方法,構(gòu)造方法(續(xù))自定義構(gòu)造方法,94,為BankAccount聲明一個(gè)有三個(gè)參數(shù)的構(gòu)造方法public BankAccount(String initName, int initAccountNumber, float initBalance) ownerName = initName; accountNumber = initAccountNumber; balance = initBalance; 假設(shè)一個(gè)新帳號(hào)的初始余額可以為0,則可增加一個(gè)帶有兩個(gè)參數(shù)的構(gòu)造方法public BankAccount(String initName, int initAccountNumber) ownerName = initName; accountNumber = initAccountNumber; balance = 0.0f; ,3 構(gòu)造方法,構(gòu)造方法(續(xù))例,95,自定義無(wú)參的構(gòu)造方法無(wú)參的構(gòu)造方法對(duì)其子類的聲明很重要。如果在一個(gè)類中不存在無(wú)參的構(gòu)造方法,則要求其子類聲明時(shí)必須聲明構(gòu)造方法,否則在子類對(duì)象的初始化時(shí)會(huì)出錯(cuò),3 構(gòu)造方法,構(gòu)造方法(續(xù))自定義無(wú)參構(gòu)造方法,96,構(gòu)建一個(gè)Bush類,有兩個(gè)有參數(shù)的構(gòu)造方法class Bush Bush(int i) Bush(double d) 如果寫:new Bush(); 編譯器將要告訴你找不到對(duì)應(yīng)的構(gòu)造方法說(shuō)明用戶在進(jìn)行類聲明時(shí),如果沒有聲明任何構(gòu)造方法,系統(tǒng)會(huì)賦給此類一個(gè)默認(rèn)(無(wú)參)的構(gòu)造方法。但是,只要用戶聲明了構(gòu)造方法,即使沒有聲明無(wú)參的構(gòu)造方法,系統(tǒng)也不再賦默認(rèn)的構(gòu)造方法,3 構(gòu)造方法,構(gòu)造方法(續(xù))Bush.java,97,在例 基礎(chǔ)上再聲明一個(gè)無(wú)參的構(gòu)造方法public BankAccount() ownerName = ; accountNumber = 999999; balance = 0.0f; ,3 構(gòu)造方法,構(gòu)造方法(續(xù))例,98,目錄,2.1 方法重載2.2 類的訪問控制2.3 構(gòu)造方法2.4 類變量 2.5 應(yīng)用舉例,99,類變量也稱為靜態(tài)變量,聲明時(shí)需加static修飾符不管類的對(duì)象有多少,類變量只存在一份,在整個(gè)類中只有一個(gè)值類初始化的同時(shí)就被賦值適用情況類中所有對(duì)象都相同的屬性經(jīng)常需要共享的數(shù)據(jù)系統(tǒng)中用到的一些常量值引用格式.,4 類變量,100,4 類變量,101,對(duì)于一個(gè)圓類的所有對(duì)象,計(jì)算圓的面積時(shí),都需用到的值,可在Circle類的聲明中增加一個(gè)類屬性PIpublic class Circle static double PI = 3.14159265; int radius; 當(dāng)我們生成Circle類的實(shí)例時(shí),在每一個(gè)實(shí)例中并沒有存儲(chǔ)PI的值,PI的值存儲(chǔ)在類中,4 類變量,例,102,對(duì)類變量進(jìn)行測(cè)試public class ClassVariableTester public static void main(String args) Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); 測(cè)試結(jié)果3.141592653.141592653.143.14,例運(yùn)行結(jié)果,4 類變量,103,聲明一個(gè)Point類,有兩個(gè)私有變量保存點(diǎn)坐標(biāo),一個(gè)類變量保存已有點(diǎn)的個(gè)數(shù)public class Point private int x; private int y; public static int pointCount=0; public Point(int x, int y) this.x = x; this.y = y; pointCount+;,4 類變量,Point.java,104,測(cè)試類class ex2_4 public static void main(String args) Point p = new Point(1,1); System.out.println(p.pointCount); Point q = new Point(2,2); System.out.println(q.pointCount); System.out.println(q.pointCount = Point.pointCount); System.out.println(Point.pointCount);,4 類變量,Point類測(cè)試,105,測(cè)試結(jié)果12true2,4 類變量,Point類測(cè)試結(jié)果,106,目錄,2.1 方法重載2.2 類的訪問控制2.3 構(gòu)造方法2.4 類變量 2.5 應(yīng)用舉例,107,對(duì)銀行帳戶類BankAccount進(jìn)行一系列修改和測(cè)試聲明BankAccount類聲明toString()方法聲明存取款方法使用DecimalFormat類聲明類方法生成特殊的實(shí)例聲明類變量,應(yīng)用舉例,5 應(yīng)用舉例,108,包括狀態(tài)、構(gòu)造方法、get方法及set方法public class BankAccountprivate String ownerName; private int accountNumber; private float balance; public BankAccount() this(, 0, 0); public BankAccount(String initName, int initAccNum, float initBal) ownerName = initName; accountNumber = initAccNum; balance = initBal; ,5.1 聲明BankAccount類,5 應(yīng)用舉例,109,public String getOwnerName() return ownerName; public int getAccountNumber() return accountNumber; public float getBalance() return balance; public void setOwnerName(String newName) ownerName = newName; public void setAccountNumber(int newNum) accountNumber = newNum; public void setBalance(float newBalance) balance = newBalance; ,5 應(yīng)用舉例,5.1 聲明BankAccount類(續(xù))BankAccount.java,110,聲明測(cè)試類AccountTesterpublic class AccountTester public static void main(String args) BankAccount anAccount; anAccount = new BankAccount(ZhangLi, 100023,0); anAccount.setBalance(anAccount.getBalance() + 100); System.out.println(Here is the account: + anAccount); System.out.println(Account name: + anAccount.getOwnerName(); System.out.println(Account number: + anAccount.getAccountNumber(); System.out.println(Balance: $ + anAccount.getBalance(); ,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
5 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 信息系統(tǒng) 開發(fā) 系統(tǒng)分析 設(shè)計(jì) 概述 演示 文檔
鏈接地址:http://www.szxfmmzy.com/p-249536.html