




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java程序設計(SP3002)講述人:林若欽軟件工程系第3講 類與對象qOOP簡述q類與對象的關系q類的組成q對象的創建與使用q對象重構qthis關鍵字q靜態關鍵字staticq對象的進一步討論q包Java程序設計(SP3002)21.面向對象編程與面向過程編程的比較面向對象編程與面向過程編程的比較面向過程:面向過程:強調處理問題的過程。開始順序,階段結束面向對象:面向對象:利用對象間的消息傳遞來驅動程序的執行。對象0對象1對象2對象3對象5對象4優點:真實表現客觀世界,對象間的關系清晰,對象間的消息處理高效。不足之處:代碼難修和復用,無法真實描繪客觀世界。Java程序設計(SP3002)3
2、2. 類與對象的關系類與對象類與對象是面向對象程序設計中核心的概念,下面舉例是面向對象程序設計中核心的概念,下面舉例說明:說明:8:00:008:00:0010:30:0010:30:0019:00:0019:00:00 時間類:時間類:TimeTime成員變量:時、分、秒,成員變量:時、分、秒,表示屬性。表示屬性。成員方法:設置時間、成員方法:設置時間、輸出時間等,所實現的功能輸出時間等,所實現的功能右邊的各時點表示的是某一具體時間,而左邊的時間類Time表示的則是對時間的一般描述。Java程序設計(SP3002)4由上可知,類與對象之間的關系如下:l 類是對象的抽象類是對象的抽象(代表了同
3、一批對象的共性與特征);l 對象是類的具體實例對象是類的具體實例(不同對象之間還存在著差異);l 同一個類可以定義多個對象同一個類可以定義多個對象(一對多關系)。汽車Java程序設計(SP3002)5類的組成類的概念類的概念類:是一種抽象的數據類型,是一類事物經過抽象,所共有屬性的集合,它是Java程序的基本組成要素,類是用來定義對象的模板。包括兩方面內容:n成員變量:描述對象的屬性、狀態n成員方法:描述對象的行為、功能例如:現實世界中的實體學生數據描述:姓名、學號 、性別、出生年月、專業、籍貫等;行為描述:設置、修改相關屬性值,輸出學生信息等。Java程序設計(SP3002)6類的聲明類的聲
4、明修飾符 class class 類名類名 extendsextends 父類名 implementsimplements 接口名/ 類體開始成員變量的聲明;/ 描述屬性成員方法的聲明;/ 描述功能/ 類體結束說明:說明:nclass是聲明類的關鍵字,不能省略;n類名要“見名知意”,多為英文單詞的連寫,如:Student、StudentTest等,一般不使用A、B、C等名字;n類名首字母要大寫,后面各單詞的首字母也要大寫。Java程序設計(SP3002)7/聲明時間類聲明時間類class Timeprivate int hour;/小時數小時數: 0-23private int minute;
5、/分鐘數分鐘數: 0-59private int second;/秒鐘數秒鐘數: 0-59public Time()/構造方法構造方法,又稱構造器又稱構造器hour=0;minute=0;second=0;public void setTime(int hh, int mm, int ss)/設置時間的方法設置時間的方法,又稱設置器又稱設置器hour=(hh=0 & hh=0 & hh=0 & ss=0 & hh=0 & hh=0 & ss=0 & hh=0 & hh=0 & ss=59)? ss: 0);public String toString()/輸出時間輸出時間return (hou
6、r+:+minute+:+second);Java程序設計(SP3002)13構造方法n構造方法(Constructor,又稱構造函數、構造器),它是類聲明中的一個特殊方法,其作用是對創建的新對象進行初始化工作。n要求:Java程序設計(SP3002)14構造方法(續)n格式:修飾符類名(參數,參數,參數n) 屬性參數; 屬性2參數2; 屬性n參數n;注意:若無參數,通常給屬性賦常量Java程序設計(SP3002)15例如:例如:Time類的構造器類的構造器public Time()/構造方法構造方法,又稱構造器又稱構造器hour=0;minute=0;second=0;3.4.2 封裝n概念
7、:把數據和行為結合在一個塊中,對于對象的使用者隱藏了數據的實現過程,對象的使用者只能通過特定的方法訪問對象的成員變量。即相當于一個“黑箱”,只要知道對象的輸出數據和輸入數據,而不必關心數據的內部具體實現流程。Java程序設計(SP3002)16電視機的電視機的按鍵按鍵電視機采用電視機采用“外殼外殼”進行進行封裝,使得元器件不會暴封裝,使得元器件不會暴露在大眾的視野之中,用露在大眾的視野之中,用戶只能通過有關的按鍵或戶只能通過有關的按鍵或遙控器來控制電視機。遙控器來控制電視機。 Java通過將成員變量聲明為private權限,再提供一個或多個public權限的方法來實現對該屬性的操作,以實現以下
8、目的:n隱藏一個類的實現細節;n使用者只能通過事先定制好的方法來訪問數據,可以方便地加入控制邏輯,限制對屬性的不合理操作;n便于修改,增強代碼的可維護性。Java程序設計(SP3002)17訪問器n是以get開頭的方法,只是查看對象的狀態,并沒有改變對象的任何狀態;n特點:n方法聲明部分有返回值類型;n該方法不帶參數;n方法體內有返回語句。設置器n是以set開頭的方法,是修改對象某種狀態的方法;n特點:n方法返回類型為void,也即說不返回類型;n該方法至少帶有一個參數;n方法體內肯定有賦值語句。Java程序設計(SP3002)18用用UML(統一建模語言的簡稱統一建模語言的簡稱)圖表示類圖表
9、示類Time - hour : int- minute : int- second : int+ Time()+ setTime(int hh, int mm, int ss): void+ toString() : String類名類名成員變量成員變量成員方法成員方法+ +:publicpublic型型- -:privateprivate型型# #:protectedprotected型型Java程序設計(SP3002)19實例:class Student private String strName = ;/學生姓名學生姓名private String strNumber = ;/學號學號
10、private String strSex = ;/性別性別private String strBirthday = ;/出生年月出生年月private String strSpeciality = ;/專業專業private String strAddress = ;/地址地址public Student(String name, String number)strName = name;strNumber = number;public String getStudentName() return strName;Java程序設計(SP3002)20public void setStude
11、ntSex(String sex)strSex = sex;public String getStudentSex()return strSex;public String getStudentBirthday()return strBirthday;public void setStudentBirthday(String birthday)strBirthday = birthday;public String getStudentSpeciality()return strSpeciality;public void setStudentSpeciality(String special
12、ity)strSpeciality = speciality;Java程序設計(SP3002)21public String getStudentAddress()return strAddress;public void setStudentAddress(String address)strAddress = address;public String toString()String information = 學生姓名學生姓名= + strName + , 學號學號= + strNumber; if( !strSex.equals() )information += , 性別性別= +
13、 strSex;if( !strBirthday.equals()information += , 出生年月出生年月= + strBirthday;if( !strSpeciality.equals() )information += , 專業專業= + strSpeciality;if( !strAddress.equals() )information += , 籍貫籍貫= + strAddress;return information;Java程序設計(SP3002)22對象的創建與使用對象的創建與使用對象有兩個層次的概念:n 現實生活中對象指的是客觀世界的實體;n 程序中對象就是一組變
14、量和相關方法的集合,其中變量表明對象的狀態,方法表明對象所具有的行為。變量變量方法方法對象的三個主要特征:對象的行為、對象的狀態、對象對象的三個主要特征:對象的行為、對象的狀態、對象的標識符。的標識符。Java程序設計(SP3002)23對象句柄對象句柄n概念:操縱對象的標識符,它是指向一個對象的句柄。這是操縱對象類型變量的唯一方式。n注意:對象句柄是一個變量名,它分配在棧中。而對象是通過new關鍵字創建的,在堆中分配存儲空間。由此可見,對象句柄不同于對象。兩者之間的聯系是把對象的首地址賦給對象句柄,從而實現對象句柄對對象的控制。Java程序設計(SP3002)24對象句柄對象句柄(續續)n例
15、如:Time t1; / 只是聲明了一個對象句柄,但它不指向任何對象。而 Time t2=new Time( ) ; /創建了一個對象,并由對象句柄t2來操縱它。對象的創建對象的創建n格式:類名類名 對象句柄 = new 類名類名( 參數表);或類名類名 對象句柄;對象句柄 = new 類名類名( 參數表);Java程序設計(SP3002)25對象的創建對象的創建(續續)程序開始執行時內存狀態程序開始執行時內存狀態棧內存棧內存堆內存堆內存mainmainJava程序設計(SP3002)26對象的創建對象的創建(續續)n例如: Time t1=new Time( ) ; /自動調用構造方法mai
16、n棧內存堆內存內存狀態354752t1000Java程序設計(SP3002)27對象的使用對象的使用n格式:對象名對象名. 成員變量成員變量對象名對象名.成員方法成員方法( 參數表參數表)不過,要注意是否擁有這樣的訪問權限/TimeTest類類public class TimeTest public static void main(String args)Time t1=new Time();System.out.println(時間時間: +t1.toString();t1.setTime(19,0,0);System.out.println(時間時間: +t1.toString();Ja
17、va程序設計(SP3002)28練習nWrite a program to input the length and width of a rectangle and calculate and print the perimeter and area of the rectangleJava程序設計(SP3002)29Java程序設計(SP3002)30方法重載方法重載含義:是指多個方法有相同的名字,但這些方法在參數上(包括參數類型、參數個數及參數次序方面)存在著差異。/方法重載的例子方法重載的例子class OverLoadpublic void display(int a, int b)
18、/兩個參數兩個參數,均為均為int型型System.out.println(a);System.out.println(b);public void display(int a, char c)/兩個參數兩個參數,一個為一個為int型型,另一個為另一個為char型型System.out.println(a);System.out.println(c);Java程序設計(SP3002)31public void display(char c, int a)/兩個參數兩個參數,一個為一個為char型型,另一個為另一個為int型型System.out.println(c);System.out.pr
19、intln(a);public void display(int a, int b, char c)/三個參數三個參數,兩個為兩個為int型型,第三個為第三個為char型型System.out.println(a);System.out.println(b);System.out.println(c);public class OverLoadTest public static void main(String args)OverLoad ol=new OverLoad();ol.display(2007,5);ol.display(2007, x);ol.display(x, 2007);
20、ol.display(2007,5,x);程序運行結果:程序運行結果:200720075 520072007x xx x20072007200720075 5x xJava程序設計(SP3002)32Java中把方法名和參數類型( 不包含返回值)稱為型構,上例中的方法型構有4種,即:display(int, int)、display(int, char)、display(char, int)、display(int, int, char)調用時,Java編譯器會根據方法的實參,自動找到與這種型構匹配的方法來執行。構造方法重載構造方法重載一個類可以擁有多個構造方法,從而可以根據需要以不同的方式來
21、初始化對象。例如:學生類中可以有3個不同的構造方法:Student( )、Student(String name)、Student(String name, String number)類似這樣的構造方法重載在類似這樣的構造方法重載在Java 的類庫中是很常見的。的類庫中是很常見的。Java程序設計(SP3002)33默認構造方法默認構造方法(即無參數的構造方法)請注意以下兩點:n在一個類中,如果沒有構造方法,系統將會自動提供一個空的構造方法,以構造類的對象。例如:系統會自動提供一個系統會自動提供一個默認構造方法默認構造方法: :public Garden()public Garden() J
22、ava程序設計(SP3002)34n一個類中,如果已經有了構造器,系統就不再提供一個空的構造方法。例如:系統不會提供默認構造方法系統不會提供默認構造方法: :public Student()public Student() 假若需要,則應顯式聲明假若需要,則應顯式聲明Java程序設計(SP3002)35this關鍵字this關鍵字表示是“當前對象”,當出現在類的實例方法中,代表使用該方法的對象;出現在類的構造方法中,代表使用該構造方法創建的對象。事實上,當成員變量出現在方法中,默認的格式是:this.this.成員變量成員變量。class Hiint a;void setA(int b)a=b
23、;int getA( )return a;等同于class Hiint a;void setA(int b)this.a=b;int getA( )return this.a;Java程序設計(SP3002)36在下列三種情況下,必須使用this關鍵字:n方法的形式參數與類的成員變量同名;class PersonString name;int age;public Person(String name, int age)=name;this.age=age;n一個類中的構造器調用同一個類中的另一個構造器;調用的方法: this(參數列表) /構造器的第一條語句Java程序設計
24、(SP3002)37class PersonString name;int age;public Person(String name)=name;public Person(String name, int age)this(name);/構造器的第一條語句this.age=age;n假設有一個容器類和一個組件類,在容器類的某個方法中要創建組件類的實例對象,而組件類的構造方法要接收一個代表其所在容器的參數(這種模型在事件處理中很常見)。Java程序設計(SP3002)38class Container/容器類容器類Component comp;public void add
25、Component()comp=new Component(this) ;/將this作為對象引用傳遞class Component/組件類組件類Container mycontainer;public Componet(Container c)mycontainer=c ;Java程序設計(SP3002)393. 靜態關鍵字static 前面,我們介紹了對象的成員變量和成員方法內容,它們都與對象密切相關:不同的對象各自為成員變量分配內存空間,只有第一個對象創建后才為各成員方法分配入口地址,以后創建的對象就共享這一入口地址。class PersonString name;/實例變量int ag
26、e;/實例變量public void setAge(int age)/實例方法this.age=age;public int getAge()/實例方法return age;int count; /int count; /統計人數統計人數不屬于某一不屬于某一對象私有對象私有Java程序設計(SP3002)40靜態成員 在成員變量、成員方法的前面加上static關鍵字,表明該變量、該方法是屬于類的,故稱為類變量或類方法。若無static修飾,則是實例變量或實例 方法。staticstatic 成員變量; /靜態變量staticstatic 成員方法; /靜態方法說明:說明:n靜態成員屬于類所有,
27、不屬于某一具體對象私有;n靜態成員隨類加載時被靜態地分配內存空間、方法的入口地址,通常通過 類名類名.靜態成員靜態成員 方式訪問。Java程序設計(SP3002)413.2 靜態變量(類變量) 創建一個類的多個對象時,每個對象不會為靜態變量各自分配空間,而是多個對象共享一個靜態變量所占有的內存空間,因此,類的任何一個具體對象的訪問靜態變量取得都是相同的值;任何一個對象去修改靜態變量時,都是對同一內存單元進行操作。class PersonString name;int age;static int count; /靜態變量靜態變量public Person(String name, int ag
28、e)=name;this.age=age;count+; 對象對象1 1非類變量非類變量 對象對象3 3 非類變量非類變量 對象對象4 4 非類變量非類變量靜態變量靜態變量 對象對象2 2 非類變量非類變量Java程序設計(SP3002)42StudentTest2.javaclass Student private static int nextNumber=1; /靜態變量public void setStudentNumber()number=nextNumber;nextNumber+;類變量所占的內存空間是在程序退出時才釋放類變量所占的內存空間是在程序退出時才釋放;
29、加上加上final關鍵字后的靜態變量就成了靜態常量,如關鍵字后的靜態變量就成了靜態常量,如System.out。類變量的訪問方式類變量的訪問方式: n類內:直接訪問n類外:類名.靜態變量 (前提條件:public權限)Java程序設計(SP3002)43靜態方法(即類方法)n 調用格式:n 1 類名.類方法名(實參列表); /推薦使用 n2 對象名.類方法名(實參列表) ;靜態方法主要是操作類變量,在使用時要注意以下幾點:n而靜態方法只能訪問該類的類成員變量和類方法,不能直接訪而靜態方法只能訪問該類的類成員變量和類方法,不能直接訪問實例的成員變量和方法;問實例的成員變量和方法;n同一個類的實例
30、方法和靜態方法,可以訪問該類的靜態變量和同一個類的實例方法和靜態方法,可以訪問該類的靜態變量和靜態方法。靜態方法。Java程序設計(SP3002)44不正確的引用class StaticError String mystring=“hello”; public static void main(String args) System.out.println(mystring); 編譯時錯誤信息:編譯時錯誤信息:無法從靜態上下文中引用非靜態無法從靜態上下文中引用非靜態 變量變量 mystring System.out.println(mystring); 問題:出錯的原因是什么?問題:出錯的原因
31、是什么?Java程序設計(SP3002)45兩種解決的辦法/1.將變量改成將變量改成靜態靜態變量變量class NoStaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); /2.先創建一個類的實例對象先創建一個類的實例對象class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticError noError =
32、new NoStaticError(); System.out.println(noError.mystring); Java程序設計(SP3002)46main() 方法n是一個靜態方法,一個類最多只能有一個main();nmain()的執行是在類加載之后進行,此時不存在任何對象。只有在執行main()之后,才創建所需要的對象;n每一個類都可以有一個main(),這是對類進行單元測試的一個很方便的技巧。在在Java中,有些類的對象不是用中,有些類的對象不是用new關鍵字生成,而是通過調用一關鍵字生成,而是通過調用一些類的靜態方法來生成,這稱為工廠方法。例如:些類的靜態方法來生成,這稱為工廠方
33、法。例如:Calendar calendar=Calendar.getInstance();Java程序設計(SP3002)47static塊的使用nstatic塊會在類被加載的時候執行且僅會被執行一次僅會被執行一次,一般用來初始化靜態變量和調用靜態方法。class Person String name; public Person(String name) =name; /靜態塊靜態塊 static System.out.println(static語句塊執行語句塊執行); public class test public static void main(String a
34、rgs) Person p1=new Person(張三張三 ); Person p2=new Person(李四李四 ); Person p3=new Person(王五王五 ); 不管構建多少次不管構建多少次Person類的對象實類的對象實例,例,static都會被都會被執行且只執行一次。執行且只執行一次。所以會輸出一次所以會輸出一次“static語句塊被執語句塊被執行行”Java程序設計(SP3002)48static塊的使用n如果當一個類中有多個static的時候,按照static的定義順序,從前往后從前往后執行,而且先執行完static語句塊的內容,才會執行調用語句。public c
35、lass test static System.out.println(1); static System.out.println(2); public static void main(String args) System.out.println(5); static System.out.println(3); static System.out.println(4); 程序的運行結果為:程序的運行結果為:輸出輸出1,2,3,4,5Java程序設計(SP3002)49靜態引入(JDK.以后)nJDK1.5 以后新增加一種靜態導入語法,用來導入指定類的某個靜態屬性值或全部靜態屬性值。靜態導
36、入語句使用 import static 語句,分別用于導入指定類的單個靜態屬性和全部靜態屬性。import static java.lang.System.*;import static java.lang.Math.*;public classStaticImportpublic static void main(String args)/ out 是是 java.lang.System 類的靜態屬性,代表標準輸出類的靜態屬性,代表標準輸出/ PI 是是 java.lang.Math 類的靜態屬性,表示類的靜態屬性,表示 常量常量out.println(PI); Java程序設計(SP300
37、2)50對象的進一步討論對象的進一步討論對象賦值對象賦值Date now; /定義對象句柄棧內存棧內存堆內存堆內存now.getTime(); /錯誤,未指向對象now=new Date(); /正確,創建一介記錄系統當前時間的對象,并由now對象句柄來操縱Date then=new Date(); /創建另一個對象,它們時間值不同now=then; /now和then同時指向第二個創建的對象,而第一個對象沒有了對象句柄,成為垃圾。now日期對象日期對象1 1then日期對象日期對象2 2成為垃圾,成為垃圾,將由垃圾收將由垃圾收集器回收集器回收Java程序設計(SP3002)51匿名對象匿名對
38、象n不定義對象句柄,直接用創建的對象調用方法,例如:new Date( ).getTime( )。n匿名對象執行完方法成為垃圾。n適用場合:n對一個對象,只需要調用一次方法;n將匿名對象作為實參傳遞給一個方法調用。Java程序設計(SP3002)52包(package)問題的提出問題的提出Java作為一種面向對象的編程語言提供了十分豐富的類庫,用戶也可以根據實際情況編寫自己的類,如何存放、管理這些類就是我們面臨的一個問題。Java是采用“包”的方式來管理接口和類的,它將功能相同的接口和類放在一個包中,即使兩個接口或類的名字相同,如果它們位于不同的包中,則它們也是兩個不同的接口或類,這樣就能達到
39、分門別類管理,相互區分的目的。例如:java.util.Date與java.sql.Date,盡管類名相同,但它們仍是兩個互不相關的類。Java程序設計(SP3002)53包的必要性:包的必要性:n用于區分不同的類; 例如:java.util.Date t1=new java.util.Date();與 java.sql.Date t2=new java.sql.Date();就是創建了兩個不同類的對象,因為類名相同,如果不借助包就無法相互區分;n將功能相同的類歸于同一包中方便管理和使用; 例如:java.lang包中就集中了與Java語言運行密切相關的類, java.awt包中的類則是與圖形
40、有關。n部署、發布軟件的需要:一個應用程序可能由多個模塊構成,包含多個類,可將它們歸到一個包中一起發布;n實現更多層面的訪問控制,不同訪問權限在包中的表現有差異。Java程序設計(SP3002)54包的定義包的定義n概念:包是相關的類和接口構成的庫,是一個容器;n允許用戶可以構建包的層次結構;n相鄰層次的包名之間可以使用點號(.)進行分隔,格式為:package pack1.pack2.pack3,從大到小排列例如:java.lang包n用戶必須記住非常重要的另一點:必須在Java 開發系統的文件系統中維護包的層次結構:例如:上例的包層次結構應該存在于:Unix或Linux中:pack1/pack2/pack3 Windo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- YC/T 598-2023煙葉醇化倉庫基礎環境參數監測指南
- 2002年江蘇省淮安市中考數學真題【含答案、解析】
- 安全防范系統項目管理工作領域4安全防范系統施工質量管理88
- 考研復習-風景園林基礎考研試題a4版附答案詳解
- 生物發酵法農藥原藥及綠色農藥制劑項目可行性研究報告寫作模板-申批備案
- 《風景園林招投標與概預算》試題A附參考答案詳解【突破訓練】
- 2025-2026年高校教師資格證之《高等教育法規》通關題庫帶答案詳解ab卷
- 2024年濟南演藝集團有限責任公司人員招聘筆試備考題庫及答案詳解(真題匯編)
- 2025年黑龍江省五常市輔警招聘考試試題題庫及答案詳解(各地真題)
- 激光雷達船舶靠泊跟蹤助航技術
- 咨詢公司項目管理制度
- 自動化控制技術試題及答案
- 2025-2030中國船用滑動軸承座行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025屆河南省青桐鳴5月全真模擬卷·高考考前適應性考試-生物試題(含答案)
- 辦公軟件MS Office應用試題及答案
- 人員結構分析總結模版
- 農村三資管理
- 2025年“鑄牢中華民族共同體意識”知識競賽題庫及答案
- 【機床輸出軸零件的加工工藝及夾具設計9500字(論文)】
- 2024年湖南出版中南傳媒招聘筆試真題
- 【初中地理】七年級地理下冊全冊期末總復習(課件)-2024-2025學年七年級地理課件(人教版2024年)
評論
0/150
提交評論