JAVA面向對象基礎課件_第1頁
JAVA面向對象基礎課件_第2頁
JAVA面向對象基礎課件_第3頁
JAVA面向對象基礎課件_第4頁
JAVA面向對象基礎課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第三章 面向對象基礎第三章 面向對象基礎目標: 介紹面向對象編程的基本思想,通過本課的學習,應該掌握如下知識:1)理解什么是類、對象、構造方法,2)對象在內存中的表現形式及如何使用對象等。3)Java的垃圾回收機制及訪問修飾符。目標:本章要點類和對象的關系面向對象的思想子類實例化的過程對象的創(chuàng)建構造方法變量的初始化順序對象創(chuàng)建的內存模型垃圾回收機制Java中的關鍵字this關鍵字static關鍵字本章要點類和對象的關系主要內容類和對象的關系1構造方法2對象創(chuàng)建的內存模型3Java中的關鍵字4主要內容類和對象的關系1構造方法2對象創(chuàng)建的內存模型3Jav類和對象的關系面向對象的思想( Object

2、 Oriented Programming,簡稱OOP)面向對象的基本思想是,從現實世界中客觀存在的事物出發(fā)來構造軟件系統,并在系統的構造中盡可能運用人類的自然思維方式面向對象更加強調運用人類在日常的思維邏輯中經常采用的思維方法與原則面向對象的三個特征封裝繼承多態(tài)類和對象的關系面向對象的思想( Object Oriente類和對象的關系面向對象與面向過程public class Icebox static void putThings(String things) System.out.println(把冰箱門打開); System.out.println(把+things+放進來); Sys

3、tem.out.println(把冰箱門關上); void OpenIcebox() printf(“把冰箱門打開n);void PutElephantI() printf(“把大象放冰箱n);void CloseIcebox() printf(“把冰箱們關上n);int main() OpenIcebox(); PutElephantIn(); CloseIcebox();public class Mine public static void main(String args ) Icebox.putThings(大象); 面向對象面向過程類和對象的關系面向對象與面向過程public cl

4、ass I類和對象的關系類的定義把相似的對象劃歸成一個類。在軟件設計中,類,就是一個模板,它定義了通用于一個特定種類的所有對象的屬性(變量)和行為(方法)。類和對象的關系類的定義類和對象的關系類的定義 ?西游記游戲軟件中的游戲人物孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐 僧:唐僧沒有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙 僧:沙僧的武器是月牙鏟 ,戰(zhàn)斗力三顆星,耐力四顆星類和對象的關系類的定義類和對象的關系類的定義修飾符一般為public,也可以沒有修飾符。注意類名的命名規(guī)范。類名一般大寫類的成員:成員變量(屬性)成員函數(方法)通過

5、“.”調用屬性和方法訪問權限控制符 class 類名 類的成員 類和對象的關系類的定義類的完全聲明形式public abstract | final class 類名稱 extends 父類名稱 implements 接口名稱列表 變量成員聲明及初始化; 方法聲明及方法體;類的完全聲明形式變量聲明格式public | protected | private static finaltransient volatile變量數據類型 變量名1=變量初值, 變量名2=變量初值, ;格式說明public、protected、private 為訪問控制符static指明這是一個靜態(tài)成員變量final指明

6、變量的值不能被修改transient指明變量是臨時狀態(tài)volatile指明變量是一個共享變量變量聲明格式類的方法聲明格式:public|protected|privatestaticfinalabstractnativesynchronized 返回類型 方法名(參數列表) throws exceptionList 方法體; 類的方法聲明格式:格式說明方法修飾public、protected、private 為存取控制符static指明方法是一個類方法final指明方法是一個終結方法abstract指明方法是一個抽象方法native用來集成java代碼和其它語言的代碼synchronized用

7、來控制多個并發(fā)線程對共享數據的訪問格式說明方法調用給對象發(fā)消息意味著調用對象的某個方法從對象中取得信息 修改對象的狀態(tài)或進行某種操作 進行計算及取得結果等調用格式.(參數列表)稱點操作符“.”前面的為消息的接收者(receiver)參數傳遞值傳遞:參數類型為基本數據類型時引用傳遞:參數類型為對象類型或數組時方法調用訪問修飾符該類或非該類均可訪問public只有該類可以訪問private相同數據包中的類可以訪問default該類及其子類的成員可以訪問,同一個包中的類也可訪問protected訪問修飾符該類或非該類均可訪問public只有該類可以訪問p訪問修飾符訪問修飾符可訪問性位置private

8、默認protectedpublic同一個類是是是是同一個包內的類否是是是不同包內的子類否否是是不同包并且不是子類否否否是訪問修飾符訪問修飾符可訪問性位置private默認prote類和對象的關系類的定義Employee.javaclass Employee String name; int age; double salary; public String showName() System.out.println(name); return name; public int showAge() System.out.println(age); return age; public void

9、updateName(String name2) name = name2; public void getSalary() System.out.println(The salary of this month is 2000); 屬性方法類和對象的關系類的定義class Employee 屬性方類和對象的關系類的定義 練習 Person.java定義一個Person類,Person類具有名字、年齡及性別等屬性,并具有一個getInfo( )方法可以打印出Person類的屬性, sayHello()方法和大家說“Hello everybody!”類和對象的關系類的定義類和對象的關系類的定義

10、練習 Point.java 定義一個點類Point,包含兩個成員變量x、y分別表示x和y的坐標,一個movePoint(int dx,int dy)方法實現點的位置的移動。public class Pointint x,y;void movePoint(int dx,int dy)x=dx; y=dy;類和對象的關系類的定義類和對象的關系類的定義 練習 MyDate.java 定義一個點日期MyDate,包含三個成員變量year 、month、day分別表示年、月、日,以及每個屬性對應的get和set方法(如,year有getYear( )方法用來獲得日期的年份,還有setYear(int y

11、)方法用來修改或設置日期的年份),最后還有printDate()方法,調用該方法可以把日期按照“yyyy-mm-dd”的形式輸出。類和對象的關系類的定義類和對象的關系類和對象的關系類(class) 是對某一類事物的描述對象(object) 是實際存在的某類事物的個體, 也稱為實例(instance)類是創(chuàng)建對象的模板,對象是類的實例。類和對象的關系類和對象的關系類和對象的關系對象的創(chuàng)建語法格式示例 TestEmployee.java類名 對象名 = new 構造函數Employee zhang = new Employee( )類和對象的關系對象的創(chuàng)建類名 對象名 = new 構類和對象的關系

12、對象的創(chuàng)建 練習 TestPerson.java在TestPerson類里寫一個main方法,在main( )方法中: 創(chuàng)建一個Person類的對象這個對象的名字叫小沈陽,年齡28,性別男在控制臺中打印這個實例的信息并調用這個對象的sayHello( )方法,向大家問好類和對象的關系對象的創(chuàng)建類和對象的關系對象的創(chuàng)建 練習 TestPoint.java在TestPoint類里寫一個main方法,在main( )方法中: 創(chuàng)建一個Point類的對象 這個點的坐標是(3,2) 將這個點移動到坐標為(5,6)的位置并把移動后的點的坐標按“(x,y)”形式打印在控制臺上類和對象的關系對象的創(chuàng)建類和對象

13、的關系對象的創(chuàng)建 練習 TestDate.java在TestDate類里寫一個main方法,在main( )方法中: 創(chuàng)建一個MyDate類的對象 通過setXXX方法將該日期對象的時間設置為“2013年10月8日” 在控制臺上打印該對象的月份 把該日期對象按“2013-10-8”的格式輸出類和對象的關系對象的創(chuàng)建類和對象的關系匿名對象創(chuàng)建完對象,在調用該對象的方法時,也可以不定義對象的句柄,而直接調用這個對象的方法。這樣的對象叫匿名對象使用匿名對象的情況如果對一個對象只需要進行一次方法調用new Person().sayHello()Person p1 = new Person();p1.s

14、ayHello();類和對象的關系匿名對象new Person().sayHelContents類和對象的關系1構造方法2對象創(chuàng)建的內存模型3Java中的關鍵字4Contents類和對象的關系1構造方法2對象創(chuàng)建的內存模型構造方法構造方法(構造函數/構造器,Constructor)具有與類相同的名稱不含返回值類型不能在方法中用return語句返回一個值一般訪問權限為public 在一個類中,具有上述特征的方法就是構造方法。構造方法的作用完成對象的創(chuàng)建,即完成對象的實例化一般使用構造方法來完成對成員變量的初始化 示例 TestPerson.java構造方法構造方法(構造函數/構造器,Constr

15、uctor)構造方法默認的構造方法在Java中,每個類都至少要有一個構造方法,如果程序員沒有在類里定義構造方法,系統會自動為這個類產生一個默認的構造方法一旦編程者為該類定義了構造方法,系統就不再提供默認的構造方法class Employee public Employee( ) class Employee構造方法默認的構造方法class Employee構造方法 練習 下列關于類的定義的選項中,哪些可以通過new Thing()方法來創(chuàng)建該類的一個對象_? A. public class Thing B. public class Thing public Thing() C. public

16、 class Thing D. public class Thing public Thing(void) public Thing(String s) E. public class Thing public void Thing() public Thing(String s) 答案:A、B構造方法 練習 答案:A、B構造方法 練習 給定下列代碼的執(zhí)行結果是_? public class A void A() System.out.println(“Class A”); public static void main(String args) new A(); A. Class A B.

17、在第2行處拋出異常 C. 編譯錯誤 D. 在第6行處拋出異常 E. 代碼執(zhí)行后沒有輸出答案:E構造方法 練習 答案:E構造方法類和對象的關系 練習 XiyoujiRole.java構造一個完整的西游記人物類,并定義一個構造方法,通過這個方法可以創(chuàng)建不同的西游記人物,并寫一個main函數進行驗證。 孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐 僧:唐僧沒有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙 僧:沙僧的武器是月牙鏟 ,戰(zhàn)斗力三顆星,耐力四顆星構造方法類和對象的關系 方法的重載方法的重載(overload)函數的重載就是在同一個類中允許同時

18、存在一個以上同名的函數方法重載的規(guī)則函數名稱相同函數的參數必須不同參數個數不同 或參數類型不同函數的返回值類型可以相同,也可以不同方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載 練習 下列選項中,哪些可以與void setAge(int year,int month,int day)方法在同一個類中定義_? A. public void setAge() B. void setAge(int age) C. void setAge(int y,int m,int d) D. int setAge(Date d)

19、 E. int setAge(int year,int month,int day) F. void setage(int year,int month,int dat)答案:ABDF方法的重載 練習 答案:ABDF方法的重載 練習 Person.java在上一個Person類的基礎上,完成以下功能:聲明一個有參的構造方法,使得通過調用該構造方法可以對Person類的三個成員變量進行初始化再聲明一個無參的構造方法,實現構造方法的重載方法的重載 練習 Person.java方法的重載 練習 MethodAdd.java在類MethodAdd中,聲明三個方法add,分別計算兩個整數的和三個整數的和

20、、兩個雙精度浮點數(double)數的和,并在該類寫一個主程序中調用這個三個函數, 并將其結果打印方法的重載 練習 MethodAdd.javaContents類和對象的關系1構造方法2對象創(chuàng)建的內存模型3Java中的關鍵字4Contents類和對象的關系1構造方法2對象創(chuàng)建的內存模型對象創(chuàng)建的內存模型引用類型變量除了8種基本數據類型的變量,其他變量都是引用類型變量類(class) 接口(interface) 數組Person p ;Animal a ;int c ;對象創(chuàng)建的內存模型引用類型變量Person p ;Anim對象創(chuàng)建的內存模型0 x80001.7444“l(fā)isi”Person

21、p0 x8000nameageheightPerson p = new Person( “l(fā)isi”, 44, 1.74); 引用類型變量的內存模型對象創(chuàng)建的內存模型0 x80001.7444“l(fā)isi”Per對象創(chuàng)建的內存模型0 x80000 x30001.7444“l(fā)isi”Person p0 x3000nameageheight1.7333“zhang”nameageheightPerson q0 x8000引用類型變量的內存模型Person p = new Person( “zhang”, 33,1.73);Person q = new Person( “l(fā)isi”, 44, 1.74

22、);對象創(chuàng)建的內存模型0 x80000 x30001.7444“變量的作用域變量的作用域全局變量類體中聲明的成員變量為全局變量全局變量在類的整個生命周期中都有效局部變量方法體中聲明的變量,方法中的參數,或代碼塊中聲明的變量,都是局部變量局部變量只在方法調用的過程中有效,方法調用結束后失效變量的作用域變量的作用域變量的作用域變量的作用域class Employee String name; int age; double salary; public String showName() String hello = “你好”; System.out.println(hello+name); re

23、turn name; public void updateName(String name2) name = name2; 全局變量局部變量變量的作用域變量的作用域class Employee 全局變量的作用域變量初始化的順序隱式賦予變量默認值成員變量顯式賦予初始值通過構造方法體賦予新值 示例 PersianCat.java各類型變量默認初始化值類型缺省值類型缺省值byte(byte)0charu0000 short(short)0float0.0Fint0double0.0Dlong0L引用對象nullbooleanfalse變量的作用域變量初始化的順序各類型變量默認初始化值類型缺省值變量的

24、作用域 練習 給定下列代碼的執(zhí)行結果是_? public class X ( private static int a; public static void main(String args) modify(a); System.out.println(a); public static void modify(int a) a+; A. 0 B. 1 C. 編譯錯誤 D. 運行時異常答案:A變量的作用域 練習 答案:A程序執(zhí)行過程 硬盤 程序 .java 編譯 .class 文件內存 執(zhí)行過程中的內存管理代碼JVM系統代碼 裝載到內存區(qū)stackheapdata segmentcodese

25、gment 找到main方法開始執(zhí)行基本數據類型變量引用類型變量地址引用變量靜態(tài)變量常量存放代碼Java代碼在系統中的執(zhí)行過程程序執(zhí)行過程 補充:參數傳值當方法被調用時,如果方法有參數,參數必須要實例化,即參數變量必須有具體的值。public class Date /類聲明 int year,month,day; /成員變量,表示年、月、日 void setDate(int y,int m,int d) /成員方法,設置日期值 /無返回值,有4個參數 year = y; month = m; day = d; public static void main(String args) Date1

26、 aday = new Date1() ; /創(chuàng)建對象 aday.setDate(2013,9,28); /調用類方法 補充:參數傳值當方法被調用時,如果方法有參數,參數必須要實例1基本數據類型參數的傳值值這種數據傳遞方式被稱為是值傳遞,方法接收參數的值,但不能改變這些參數的值。2引用類型參數的傳值地址引用傳值方式:Java的引用類型數據包括對象、數組和接口,當方法中參數是引用類型時,引用數據類型傳遞給方法的是數據在內存中的地址,方法中對參數變量的操作可以改變原變量的值。 1基本數據類型參數的傳值值這種數據傳遞方式被稱為是值傳class People String face;void setF

27、ace(String s) face = s;class C void f(int x, double y, People p) x = x + 1;y = y + 1;p.setFace(笑臉);System.out.println(參數x和y的值分別是: + x + , + y);System.out.println(參數對象p的face是: + p.face);public class Ep4_8 public static void main(String args) int m = 100;double n = 100.88;People zhang = new People();z

28、hang.setFace(很嚴肅的樣子);C a = new C();a.f(m, n, zhang);System.out.println(main方法中m和n的值仍然分別是: + m + , + n);System.out.println(main方法中對象zhang的face是: + zhang.face);zhang.face= 很嚴肅的樣子;改變形參值 導致實參值的改變zhang.face= “笑臉;參數x和y的值分別是:101,101.88參數對象p的face是:笑臉main方法中m和n的值仍然分別是:100,100.88main方法中對象zhang的face是:笑臉class P

29、eople zhang.face= 很嚴肅補充內容對象數組在Java中不但可以聲明由原始數據組成的數組,還可以聲明由對象組成的數組;聲明對象數組的方式如:/假設已經定義了一個Student類/*聲明由5個Student對象組成的數組*/Student stdAry = new Student5;補充內容對象數組在Java中不但可以聲明由原始數據組成的對象數組=引用數組錯誤的理解方式學生對象的實例學生對象的實例學生對象的實例學生對象的實例學生對象的實例01244堆棧stdAry堆棧stdAry正確的理解方式對象的引用01244對象的引用對象的引用對象的引用對象的引用對象數組=引用數組錯誤的理解方

30、式學生對象的實例學生對象的實對象數組示例/*對象數組示例,假設已經定義了Student類*/public static void main(String args) /*創(chuàng)建包含有5個Student引用的數組*/ Student stdAry = new Student5; /*逐一為每個引用創(chuàng)建對象實例*/ stdAry0 = new Student(張三, 18); stdAry1 = new Student(李四, 20); stdAry2 = new Student(王五, 24); stdAry4 = new Student(鄭六, 21); stdAry4 = new Studen

31、t(田七, 19); for (int i = 0; i stdAry.length; i+) stdAryi.display(); 對象數組示例/*對象數組示例,假設已經定義了Student類對象數組的存放形式堆棧stdAry0124stdAry0stdAry1stdAry2stdAry4stdAry44張三18李四20王五24鄭六21田七19對象數組的存放形式堆棧stdAry0124stdAry0垃圾回收機制垃圾回收器(GC, Garbage Collection)Java的一個重要特點句是具有一個垃圾回收器,并且能夠自動回收垃圾,這也是Java相對于其他語言有優(yōu)勢的地方對內存的釋放和回收

32、的工作是由Java運行系統(JRE)承擔的,不用編程者關注在Java程序運行過程中,一個垃圾回收器會不定時地被喚起檢查是否有不再被使用的對象,并釋放它們所占用的內存空間垃圾回收器的啟用不由程序員控制,也無規(guī)律可循垃圾回收機制垃圾回收器(GC, Garbage Collec垃圾回收機制垃圾回收機制 System.gc( )、nullJava里提供了一個System.gc( )方法,使用這個方法可以建議垃圾回收器回收垃圾在Java中,可以通過將對象的引用變量設置為null,來暗示垃圾回收器來回收該對象class Employee String name; int age; double salar

33、y;public static void main(String args) Employee e = new Employee(); new Employee(); e = null; System.gc(); System.out.println(“The program is end”); 垃圾回收機制垃圾回收機制 System.gc( )、nu垃圾回收機制后臺線程主線程Object o2 = new Object( );o2 = null;Object o1 = new Object( );o1 objectThe heap檢查出對象沒有引用指向調用o2對象的finalize()方法垃

34、圾回收機制回收分配給該對象的內存垃圾回收采用Java多線程機制o2 object 垃圾回收機制垃圾回收機制后臺線程主線程Object o2 = new O垃圾回收機制 練習 什么時候程序會銷毀一個對象x_? A. x.delete() B. x.finalize() C. System.gc() D. 設置對象的引用為null F. 只有垃圾回收器才可以銷毀一個對象答案:F垃圾回收機制 練習 答案:FContents類和對象的關系1構造方法2對象創(chuàng)建的內存模型3Java中的關鍵字4Contents類和對象的關系1構造方法2對象創(chuàng)建的內存模型Java中的關鍵字this關鍵字代表對象自身的引用一個引用指向調用該方法的當前對象通常在類的方法定義中使用用this關鍵字的情況方法中的變量與成員變量重名在一個構造方法中,調用其它重載的構造方法返回當前對象的引用 Java中的關鍵字this關鍵字成員變量和局部變量public class Employee int sideA, sideB, sideC;void setSide(int sideA, int sideB, int sideC) this.sideA = sideA;this.sideB = sideB;this.sideC = sideC;注:如果局部變量的名字與成員變量的名字相同,則成員變量

溫馨提示

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

評論

0/150

提交評論