




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第4 4章章 類和對象類和對象本章知識點本章知識點n利用數據抽象和數據隱藏技術創建類n創建和使用對象n對屬性和方法進行訪問n方法的重載n構造方法及其使用nthis引用的用法njava的垃圾收集機制nstatic方法和屬性的使用n類的組合方法n包的創建和使用4.1 面向對象程序設計的思想面向對象程序設計的思想4.1.1 面向對象編程思想4.1.2 定義時鐘類 4.1.3 類、屬性、方法和構造方法4.1.1 面向對象編程思想面向對象編程思想n面向對象編程技術n將數據及對數據的操作封裝在一起而形成了類,類是描述相同類型的對象集合。 面向對象編程(object-oriented programmin
2、g,oop)就是定義這些類。n類是抽象的數據類型,用類創建對象。n程序的執行,表現為一組對象之間的交互通信。對象之間通過公共接口進行通信,從而完成系統功能。對象的公共接口是該對象的應用程序編程接口,把對象的內部詳細信息隱藏起來,使得對象變得抽象,將這種技術稱為數據的抽象化。4.1.2 定義時鐘類定義時鐘類【例4-1】編寫一個時鐘類。n時鐘類的設計 時鐘類 timer屬性hourminutesecond方法構造方法 settime() 顯示時間24小時制 touniversalstring() 顯示時間12小時制tostandardstring()4.1.2 定義時鐘類定義時鐘類n時鐘類:tim
3、er.java。n測試類:timertest.java。timertest類包含main方法,在main方法中將創建timer類的一個對象,并調用對象的方法。4.1.2 定義時鐘類定義時鐘類public class timer extends object private int hour; private int minute; private int second; public timer() settime( 0, 0, 0 ); public void settime( int h, int m, int s ) hour = ( ( h = 0 & h = 0 & m = 0 &
4、s 60 ) ? s : 0 );秒設置時間構造方法秒屬性4.1.2 定義時鐘類定義時鐘類public string touniversalstring() return hour + : + minute + : + second ; public string tostandardstring() return ( (hour = 12 | hour = 0) ? 12 : hour % 12 ) + : + minute + : +second+( hour = 0 & hour = 0 & minute= 0 & second 60 ) ? second : 0 );public in
5、t gethour() /gethour方法方法return hour;public int getminute() /getminute方法方法return minute;public int getsecond() / getsecond方法方法return second;【例例4-6】 set和和get方法的使用。方法的使用。public class timer2test public static void main(string args) timer2 time = new timer2();time.sethour(23);time.setminute(39);time.sets
6、econd(20);system.out.println(time.gethour()+:+time.getminute() +:“ +time.getsecond();4.10 包包(package)的創建和訪問的創建和訪問n包:已被組織到某一目錄下并被命名的一組類的集合。n包機制:提供類的多層類命名空間,對各種用途的類進行分門別類的使用和存放。4.10.1 包的創建包的創建n每一個包中的文件在文件開頭在文件開頭必須含有包的說明,格式為: package 包名; 例如:pakage chap4; package chap4.lesson1; 包 子包【例例4-9-1】包的創建。包的創建。n帶
7、有包定義的代碼。package chap4.lesson2;public class course private string coursename; /課程名課程名public course(string coursename) this.coursename = coursename;public string getcoursename() return coursename;public void setcoursename(string coursename) this.coursename = coursename;void show () system.out.println(
8、coursename);【例例4-9-1】包的創建。包的創建。package chap4.lesson2; /與與course類所在包相同類所在包相同public class coursetest public static void main(string args) course course = new course(java程序設計程序設計);course.show();命令行方式下的編譯和執行命令行方式下的編譯和執行n帶有包的類的編譯: 需要將類文件按包所指定的路徑進行存儲。n編譯命令: javac d 路徑路徑 java源文件n常用形式:javac d . java源文件n演示,查
9、看class文件命令行方式下的編譯和執行命令行方式下的編譯和執行當前目錄 e:java_sourcechap4lesson2course.classcoursetest.classcoursetest.javacourse.javanjavac d . course.javanjavac d . coursetest.java命令行方式下的編譯和執行命令行方式下的編譯和執行n帶包定義的類的執行n需要在包的上級目錄執行類的class文件njava chap4.lesson2.coursetest當前目錄e:java_sourcechap4lesson2course.classcoursetest
10、.classcoursetest.javacourse.java命令行方式下的編譯和執行命令行方式下的編譯和執行e:java_sourcechap4lessoncoursetest.classcoursetest.javan設置環境變量classpath:指定尋找類字節碼的路徑包的上級文件夾。當前目錄當前目錄classpath=e:java_source;設置classpath后,在任意路徑都可以執行包下面的類。4.10.2 包的使用包的使用n同一個包中的類互相引用時不需要寫出包名。n引用其他包中的類的方法n方式一:包名.類名n例如:chap4.lesson2.coursen缺點:書寫類時比較
11、麻煩,總要寫出包名。n方式二:用import語句導入例:import chap4.lesson2.course; import javax.swing.joptionpane; import java.util.*; n“*”表示導入整個包下的所有類n注意:導入包導入子包【例例4-9-2】包的使用。包的使用。n不同包下加包前綴package chap4.lesson3; /與與course類所在包不同類所在包不同public class coursetest public static void main(string args) course course = new chap4.lesso
12、n2.course(java程序設計程序設計);course.show();【例例4-9-2】包的創建及使用。包的創建及使用。n不同包下導入package chap4.lesson3;import chap4.lesson2.*;public class coursetest public static void main(string args) course course = new course(java程序設計程序設計);course.show();4.2 類類的作用域的作用域n 定義類的作用域的修飾符(modifier)n public(公共作用域):一個具有公共作用域的類在封裝它的
13、包外面是可見的。n package(包作用域, 缺省值):一個具有包作用域的類只是在封裝它的包中是可見的。4.2 類類的作用域的作用域public class c1 package sub1;class c21 package sub2.sub3;class c3 package sub1;public class c22 sub1 當前路徑當前路徑c22c21sub3c3c1sub2類的類的存儲存儲類的使用使用:c1sub1.c21sub1.c22sub2.sub3.c34.2 類類的作用域的作用域public class c1 package sub1;class c21 package
14、sub2.sub3;class c3 package sub1;public class c22 package命令指定類存儲的位置類的修飾符指定類被使用的范圍公共作用域包作用域sub1 當前路徑當前路徑c22c21sub3c3c1sub2類的類的作用域作用域4.3 成員成員訪問控制訪問控制修修 飾飾 符符作作 用用publicprotecteddefault (package)privaten成員訪問控制:用來控制類中成員的訪問范圍。聲明類的公有成員,可以在類外被使用聲明類的公有成員,可以在類外被使用聲明保護成員,可以在同一包中或子類聲明保護成員,可以在同一包中或子類(同包同包/不同包不同包
15、)中使用中使用聲明包作用域成員,該成員只能在同一包中被使用聲明包作用域成員,該成員只能在同一包中被使用聲明私有成員,該成員只能在自身類中訪問聲明私有成員,該成員只能在自身類中訪問大大小小類中定義的成員可以在自身類中各方法中使用,相當于存在于類中的“全局變量”【例例4-2】成員訪問控制舉例成員訪問控制舉例1。public class timer extends object private int hour; / 0 - 23 private int minute; / 0 - 59 private int second; / 0 - 59 public timer() . public voi
16、d settime( int h, int m, int s ) . public string touniversalstring() . public string tostandardstring() . public class timertest2 public static void main( string args) timer time = new timer(); time.hour = 7; /error time.minute = 15; /error time.second = 30; /error private成員不能在定義自身的類外使用【例例4-3】成員訪問控制
17、舉例成員訪問控制舉例2。public class accessmodifier private int a; int b; protected double c; public char d; class accessmodifiertest public static void main( string args) accessmodifier obj = new accessmodifier(); obj.a=1; obj.b = 2; obj.c = 1.5; obj.d=#; 設兩個類在同一個包中(包未命名)。創建類的對象private屬性的使用default成員的使用protecte
18、d成員的使用public成員的使用public void seta(int a1) a=a1;obj.seta(1);4.5 thisnthis:被調用的方法/屬性的當前對象的引用。n說明:this引用僅能出現在類中的方法中。nthis的使用n通過this引用成員變量(屬性)n通過this引用方法【例例4-5】通過通過this引用成員變量。引用成員變量。class simpletime private int hour, minute, second; public simpletime( int hour, int minute, int second ) void show() syste
19、m.out.print(hour+:+minute+:+second);類的成員變量方法的局部變量public class simpletimetest public static void main(string args) simpletime time = new simpletime(12, 30, 19); time.show(); 當類的成員變量與方法中的局部變量同名時,成員變量使用this引用。this.hour = hour; this.minute = minute;this.second = second;4.9 類的組合類的組合(composition)n類的組合類的組合
20、:指類之間的一種”has a”的關系,即一個類中的成員是其他類的引用。【例例4-8】類的組合舉例。類的組合舉例。學生類 student屬性姓名 stuname年級 grade選課course courses方法set及get方法構造方法顯示信息方法 showstudent()課程類 course屬性課程名 coursename學分 credithour方法set及get方法構造方法n定義一個學生類和一個課程類,表示現實生活中一個學生可以選擇多門課程的情況。 【例例4-8】類的組合舉例。類的組合舉例。public class course private string coursename; /
21、課程名課程名private int credithour; /學分學分public course(string coursename, int credithour) this.coursename = coursename;this.credithour = credithour;public string getcoursename() return coursename;public void setcoursename(string coursename) this.coursename = coursename;public int getcredithour() return cr
22、edithour;public void setcredithour(int credithour) this.credithour = credithour;【例例4-8】類的組合舉例。類的組合舉例。public class student private string stuname;private int grade;private course courses; /學生選擇的多門課程學生選擇的多門課程public student() public int getgrade() return grade; public void setgrade(int grade) this.grad
23、e = grade;public course getcourses() return courses;public void setcourses(course courses) this.courses = courses;public string getstuname() return stuname;public void setstuname(string stuname) this.stuname = stuname;public void showstudent()system.out.println(stuname+ + grade+年級年級 );system.out.pri
24、ntln(“選修的課程包括:選修的課程包括:);for(int i=0; icourses.length; i+)system.out.println(coursesi.getcoursename()+ + coursesi.getcredithour()+個學分個學分);【例例4-8】類的組合舉例。類的組合舉例。public class studenttest public static void main(string args) student stu = new student();stu.setstuname(lucy);stu.setgrade(3);course courses
25、= new course2;courses0=new course(java程序設計程序設計, 4);courses1=new course(數據庫應用數據庫應用 , 3);stu.setcourses(courses);stu.showstudent();4.7 垃圾收集垃圾收集(garbage collector)njava中的內存管理n如果忽略系統資源的限制,java平臺允許創建任意多個對象。當對象不再使用時自動會被清除,這個過程就是所謂的“垃圾收集”。n垃圾收集的時機:當對象不再被引用的時候,對象就會被作為垃圾收集的對象而被清除。n為了使對象不再被引用,可以通過將對象的引用置為null
26、。n例如: timer timer=new timer(); timer=null;4.7 垃圾收集垃圾收集(garbage collector)1垃圾收集器njava中有一個垃圾收集器,它周期性地將不再被引用的對象從內存中清除掉。n垃圾收集器自動執行,它掃描對象的動態存儲區,將沒有被引用的對象收集起來,定期地釋放不再被引用的對象所占用的存儲空間。n顯式地運行垃圾收集器 system.gc()方法4.7 垃圾收集垃圾收集(garbage collector)2finalize方法n當一個對象被垃圾收集器收集前,垃圾收集器給對象一個機會調用自己的finalize方法(繼承自父object類)。4
27、.8 static方法和屬性方法和屬性n當在類中聲明一個成員時,可以指定它是為一個類的各個對象各自擁有(實例成員),還是為一個類的所有對象共享(類范圍的成員)。n類范圍的成員稱為靜態成員,以關鍵字static聲明。 static int count;n類的靜態成員的使用格式 類名.靜態變量名 或者 對象引用.靜態變量名 類名.靜態方法 或者 對象引用.靜態方法名 joptionpane.showmessagedialog(.);joptionpane.showinputdialog();靜態成員既可以通過類引用,也可以通過對象引用。更多的使用類引用方式。【例例4-7】靜態方法和屬性的應用。靜態
28、方法和屬性的應用。雇員類 employee 屬性名字 firstname姓 lastname雇員計數 count(靜態屬性)方法構造方法getfirstname()getlastname()getcount() (靜態方法)finalize()(垃圾回收前被執行)【例例4-7】靜態方法和屬性的應用。靜態方法和屬性的應用。public class employee private string firstname; private string lastname; /定義一個靜態變量表示內存中employee類對象的數目 private static int count = 0; public
29、employee( string firstname, string lastname ) /構造方法 this.firstname = firstname; this.lastname = lastname; count+; /將靜態變量加1 system.out.println( “創建employee對象: + firstname + + lastname );【例例4-7】靜態方法和屬性的應用。靜態方法和屬性的應用。/* 垃圾回收器回收對象前執行finalize()方法 */ protected void finalize() count-; /被回收前將靜態變量count的值減1 s
30、ystem.out.println( employee finalizer: + firstname + + lastname + ; count = + count ); public string getfirstname() return firstname; public string getlastname() return lastname; /定義靜態方法定義靜態方法getcount,獲取靜態變量,獲取靜態變量count的值的值 public static int getcount() return count; 【例例4-7】靜態方法和屬性的應用。靜態方法和屬性的應用。publ
31、ic class employeetest public static void main( string args )system.out.println(對象創建前對象創建前:employee.getcount(): + employee.getcount()+n);employee e1 = new employee( susan, baker );system.out.println(一個對象創建后一個對象創建后: e1.getcount(): + e1.getcount() + ;employee.getcount(): + employee.getcount()+n);employ
32、ee e2 = new employee( bob, jones );system.out.println(兩個對象創建后兩個對象創建后: e1.getcount(): + e1.getcount() + ;e2.getcount(): + e2.getcount() + ;employee.getcount(): + employee.getcount()+n); /將對象引用置空,準備回收將對象引用置空,準備回收e1 = null;e2 = null;system.gc(); / 顯式地運行垃圾收集程序顯式地運行垃圾收集程序system.out.println(after system.g
33、c():count= + employee.getcount();4.8 static方法和屬性方法和屬性n注意: static方法的方法體中使用的成員必須是static成員(屬性和方法)。nstatic方法中只能使用static屬性nstatic方法只能調用static方法4.8 static方法和屬性方法和屬性private static int square( int intvalue ) system.out.print(調用int型參數的square方法:); return intvalue * intvalue; private static double square( doub
34、le doublevalue ) system.out.print(調用double型參數的square方法:); return doublevalue * doublevalue; public static void main(string args)system.out.println(square(10);system.out.println(square(10.0);n靜態方法間的調用本章小結本章小結 n本章介紹了面向對象程序設計的重要概念-類和對象。類是一種抽象的數據類型,用來表示具有相同性質的一類事物。n類的設計n一個類的成員包括屬性、方法n成員的訪問控制符本章小結本章小結n構造
35、方法提供了創建對象(new)的不同形式。好的習慣:提供一個無參的構造方法。n為類的私有屬性其提供公有的set和get方法進行存取n某些成員可以定義為static類型,稱之為類成員。類成員可以直接通過類名進行訪問。static屬性:所有對象共享;static方法:利用類名直接調用。本章小結本章小結n類的訪問控制符:訪問控制符:限定其它類對該類及類的成員的訪問。類的訪問控制符有兩種,public和默認(package)。public作用域的類在封裝它的包外面是可見的。package作用域的類只是在封裝它的包中是可見的(在包外試圖import也無法成功)。n包提供了類的多層類命名空間,對各種用途的類
36、進行分門別類的使用和存放。相同包下的類可以直接引用,不同包下的類最好利用“先導入、再使用”的方式引用。本章小結本章小結nthis表示當前對象的一個引用,通常:當類的屬性與類方法中的局部變量同名時,利用this引用類的屬性加以區分。n多個類在使用過程中,可以存在“has a”的關系,即將一個類組合到另一個類中,該類的對象作為另外一個類的成員存在。n對象數組 nstudent stu = new student5; /初值為nullnstu0 = new student();考核目標【掌握】n類的定義方法(屬性、方法、構造方法)n類的兩種訪問控制修飾符及其作用n為類的私有屬性定義set和get方法
37、n利用構造方法創建對象n正確使用this引用n在eclipse下正確地定義和使用包【理解】nstatic成員的特征及訪問方式n類的組合方法的定義n帶有包的類的命令行編譯及執行方式【了解】njava中的垃圾回收機制n類中成員的protected, package兩種訪問控制符作用練 習n定義一個學生類(student),屬性包括:學號(no),班號(classno ),姓名(name),性別(sex),年齡(age);方法包括:獲得學號,獲得班號,獲得姓名,獲得性別,獲得年齡,修改學號,修改班號,修改姓名,修改性別,修改年齡。定義一個學生數組對象。設計程序進行測試。酒店前臺管理系統n為某酒店設計
38、一套簡單的前臺房間管理系統,該系統可以通過在命令為某酒店設計一套簡單的前臺房間管理系統,該系統可以通過在命令行輸入命令來為客人辦理入住和退房手續。要求該系統支持通過命令行輸入命令來為客人辦理入住和退房手續。要求該系統支持通過命令行輸入以下命令來進行入住,退房及查詢的操作:行輸入以下命令來進行入住,退房及查詢的操作:searchsearch:查詢所有房間的狀態:查詢所有房間的狀態in 1202 song in 1202 song :姓名為:姓名為songsong的客人入住的客人入住12021202房間房間out 1202out 1202:12021202房間退房房間退房quitquit:退出程序
39、:退出程序說明說明 :1 1)該習題主要考察的知識點:控制臺輸入,循環控制,數組的使用,方)該習題主要考察的知識點:控制臺輸入,循環控制,數組的使用,方法調用等。法調用等。2 2)酒店房間的狀態可以用一個二維數組來存放,如果有客人已經入住,)酒店房間的狀態可以用一個二維數組來存放,如果有客人已經入住,則存放該客人的姓名,如果沒有客人入住,則存放則存放該客人的姓名,如果沒有客人入住,則存放”empty”empty”。3 3)可以從控制臺讀入命令的第一個單詞,來決定調用哪個方法負責處理)可以從控制臺讀入命令的第一個單詞,來決定調用哪個方法負責處理該類命令。該類命令。4 4)可以將每個命令要完成的功
40、能分別用一個方法來描述,在主控方法)可以將每個命令要完成的功能分別用一個方法來描述,在主控方法runrun中調用這些方法。中調用這些方法。酒店前臺管理系統酒店類 hotel屬性樓層數 height每層房間數 width酒店房間 rooms方法set及get方法構造方法其他業務處理方法酒店前臺管理系統n其他業務方法npublic void run() 主控方法nprivate void initroom( ) 初始化房間為空”empty”nprivate void search( ) 輸出房間狀態nprivate boolean testroomno(int roomno) 判斷房間號是否合法n
41、private void in( int roomno, string name) 入住nprivate void out( int roomno) 退房學生成績查詢系統n將所有學生的課程成績保留在一個二維數組中,每一行代表一個學生將所有學生的課程成績保留在一個二維數組中,每一行代表一個學生的成績,每一列代表一門課程的成績;將每門課程的名稱保留在一個的成績,每一列代表一門課程的成績;將每門課程的名稱保留在一個一維數組中(課程的下標序號與二維數組的列號匹配);將每個學生一維數組中(課程的下標序號與二維數組的列號匹配);將每個學生的姓名保留在一個一維數組中(學生的下標序號與二維數組的行號匹的姓名保留在一個一維數組中(學生的下標序號與二維數組的行號匹配);要求編寫程序實現成績的查詢,程序運行時從命令行輸入統計配);要求編寫程序實現成績的查詢,程序運行時從命令行輸入統計命令及參數,程序則輸出結果,例如:命令及參數,程序則輸出結果,例如:avgavg ja
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品市場的品牌策略試題及答案
- 考研英語完形試題及答案
- 系統架構設計師在企業管理中的核心地位試題及答案
- 初中語文九年級下冊第二單元豐富小說天地綜觀人生百態大單元教學設計
- 部編五年級語文下學期期中知識點歸納復習加深練習題
- 2025-2030婦科擴張器行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030女性內衣行業兼并重組機會研究及決策咨詢報告
- 2025-2030城鄉市容管理產業市場深度調研及發展趨勢與投資戰略研究報告
- 2025-2030地板市場發展分析及行業投資戰略研究報告
- 辦公茶桌轉讓合同樣本
- 我最喜歡的電影綠皮書課件
- 技師承諾不涉黃協議書
- 刑事證據課件
- 資源環境與可持續發展PPT完整全套教學課件
- 西方經濟學(上下冊)PPT全套教學課件
- 新型(花籃螺栓)工字鋼懸挑梁腳手架講解
- 雨季及防汛施工安全教育
- 函數的極值與最大(小)值(第二課時)【高效備課精研+知識精講提升】 高二數學 課件(人教A版2019選擇性必修第二冊)
- 中華優秀傳統文化的內涵與特點【考點精研+知識架構+提分專練】高中歷史統編版(2019)選擇性必修三文化交流與傳播
- GB/T 34855-2017洗手液
- GB/T 26358-2010旅游度假區等級劃分
評論
0/150
提交評論