Java基礎課程05-第五章 類及對象_第1頁
Java基礎課程05-第五章 類及對象_第2頁
Java基礎課程05-第五章 類及對象_第3頁
Java基礎課程05-第五章 類及對象_第4頁
Java基礎課程05-第五章 類及對象_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、簡介本課件由網新(天津)軟件有限公司(以下簡稱:網新天津)編制,僅供網新仿真實訓的學員學習使用;網新天津享有本課件中的文字敘述、文檔格式、插圖、照片等所有信息資料的版權,受知識產權法及版權法等法律、法規的保護。任何個人或組織未經網新集團的書面授權許可,均不得以任何形式使用本課件的任何內容,否則將視為不法侵害,網新天津保留追究侵權人相關法律責任的權利 版權聲明上節課回顧流程控制順序結構分支結構循環結構循環控制數組聲明、賦值和初始化數組的遍歷數組的應用類的定義對象的定義和使用(重點)方法的定義和使用(重點)構造函數(重點)this關鍵字方法參數傳遞(難點)包訪問修飾符本課目標類的定義public

2、class 類名 /定義屬性部分 屬性1的類型 屬性1; 屬性2的類型 屬性2; 屬性n的類型 屬性n; /定義方法部分 方法1; 方法2; 方法m;類的定義 定義一個類的步驟1、定義類名2、編寫類的屬性3、編寫類的方法類的定義public class College /定義屬性 String name; / 學校全稱 String address; /學校地址 int teacherNum; /教職員工的數目 / 定義方法 public String toString() return name + “ 位于 ”+ address + “目前共有教職員工數:“ + teacherNum +

3、“個; 如何創建和使用對象 使用對象的步驟: 使用new創建類的一個對象 使用對象:使用“.”進行以下操作 給類的屬性賦值:對象名.屬性 調用類的方法:對象名.方法名()College college1= new College(); = “浙江大學浙江大學; /給屬性賦值給屬性賦值college1.toString(); /調用類的方法,該方法中的操作將被執行調用類的方法,該方法中的操作將被執行public class InitialCollege public static void main(String args) College college1= new

4、College(); System.out.println(college1); = “浙江大學; college1.address = “浙江杭州西溪路”; college1.teacherNum = 10000; System.out.println(college1); 創建和使用對象示例創建“浙江大學”對象演示示例:創建和使用對象說一說看到什么效果? 調用類的toString()方法是特例:這里使用college1.toString()和ccollege1作用相同更簡便綜合案例 編寫學生類,輸出學生相關信息 編寫教師類,輸出教師相關信息演示示例:創建和使用類

5、和對象方法的定義 方法就是類所具有的行為和功能訪問修飾符 其他修飾符 返回類型|void 方法名(參數列表) /編寫方法體1)無返回類型無參數2)無返回類型有參數3)有返回類型無參數4)有返回類型有參數方法的命名 如何給方法起名字? 必須以字母、_或開頭 可以包括數字,但不能以它開頭 遵循的命名規范 通常方法名是一個動詞,如果有兩個以上單詞組成,第一個單詞的首字母小寫,其后單詞首字母大寫方法的返回值兩種情況 如果方法具有返回值,方法中必須使用關鍵字return返回該值,返回類型為該返回值的類型 如果方法沒有返回值,返回類型為voidreturn 表達式;表達式;public class Stu

6、dent String name = 張三; public void getName() return name; 返回類型要匹配編譯錯誤方法調用 方法是個“黑匣子”,完成某個特定的應用程序功能,并返回結果 方法調用:執行方法中包含的語句 對象名.方法名();小結 編寫一個音樂類,添加歌名,類別,歌手,時長屬性,添加播放,暫停/繼續播放,停止等方法,并編寫測試類顯示音樂信息 編寫一個手機類,添加手機型號,顏色,品牌屬性,添加打電話,發短信,拍照方法,并編寫測試類顯示手機信息課間休息為什么需要包 生活案例 文檔分門別類,易于查找 不同內容的文檔可以放在不同的 袋子中,擁有相同的名字,避免沖突 易

7、于管理 為什么需要包 樹形文件系統 使用目錄解決文件同名沖突問題 如何存放兩個同名的類而不沖突?Sort.java 插入排序 Sort.java 冒泡排序 包 包解決類的同名問題允許類組成較小的單元(類似文件夾),易于找到和使用相應的文件 防止命名沖突 更好的保護類、數據和方法 A.java包如何創建包package chapter5.code ;public class Test public String toString() 包名 使用package聲明包,以分號結尾如果有包的聲明,一定作為Java源代碼的第一條語句 包命名規范 包名由小寫字母組成,不能以圓點開頭或結尾 自己設定的包名之

8、前最好加上唯一的前綴,通常使用組織倒置的網絡域名。如:域名 自己設定的包名部分依不同機構各自內部的規范不同而不同package mypackage;package net.javagroup.mypackage;package ject; 部門名 項目名 package .mypackage; 用MyEclipse 創建包使用MyEclipse創建包的兩種方法:分別創建包和類:創建項目創建包創建類創建類的過程中創建類所在的包創建項目創建類(在此過程中聲明所屬包,如無聲明,則顯示“缺省包”) 演示示例:使用MyEclipse創建包和類 包與目錄的關系

9、 創建好的包和Java源文件是如何存儲的? 創建包com.qiuxueke.chapter7,即創建了目錄結構:.comqiuxuekechapter7srccomqiuxuekechapter7Test1.javaTest2.java 演示示例:在包資源管理器和導航器中觀察包中的目錄結構 如何導入包 為了使用不在同一包中的類,需要在Java程序中使用import關鍵字導入這個類import java.util.*; /導入java.util包中所有類import java.io.*; /導入java.io包中所有類 關鍵字import并不陌生 import 包名. 類名;1、系統包(eg:j

10、ava.lang)2、自定義包:com.qiuxueke*: 指包中的所有類Test:指包中的Test類 25什么是封裝public class Teacher private String name; / 老師姓名/ 返回教員姓名public String getName() return name;/ 設定老師姓名public void setName(String name) = name;封裝,就是隱藏實現細節 將屬性私有化,提供公有方法訪問私有屬性 通過這些公有方法訪問私有屬性 Teacher teacher = new Teacher();teacher.set

11、Name (李芳);String tName = teacher.getName();通過setter、getter方法訪問name屬性this代表當前類的實例26實現封裝封裝的實現:1、修改屬性的可見性來限制對屬性的訪問2、為每個屬性創建一對賦值(setter)方法和取值(getter) 方法,用于對這些屬性的訪問public class Teacher private String name; / 教員姓名private int age; /年齡public int getAge() return age;public void setAge(int age) this.age = age

12、; /此處省略對name屬性的setter、getter方法12訪問修飾符28什么是構造方法 構造方法負責對象成員的初始化工作,為實例變量賦予合適的初始值 構造方法必須滿足以下語法規則:1、方法名與類名相同2、沒有返回類型public class Teacher private String name; / 姓名/ 構造方法public Teacher() name = “張三;public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); 使用new關鍵字調用構造方法

13、帶參數的構造方法 通過帶參數的構造方法,顯式地為實例變量賦予初始值 public class Teacherprivate String name; / 姓名private int age; / 年齡private String education; / 學歷private String position; / 職位/ 帶參數的構造方法public Teacher(String name,int age,String education,String position) = name;this.age = age; cation = education;th

14、is.position = position;public String introduction() return 大家好!我是 + name + ,我今年 + age + 歲,學歷 + education + ,目前職位是+position;30帶參數的構造方法 通過調用帶參數的構造方法,簡化對象初始化的代碼public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(李芳, 23, “本科”, “銷售助理);System.out.println(

15、roduction();創建對象時,一并完成了對象成員的初始化工作大家好!我是李芳,我今年23歲,學歷本科,目前職位是銷售助理構造函數注意事項構造方法是一種特殊的方法,具有以下特點。(1)構造方法的方法名必須與類名相同。(2)構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。(4)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。(5)構造方法可以重載,以參數的個數,類型,或排列順序區分。32小結 編寫一個類

16、Book2,代表教材:具有屬性:名稱(title)、頁數(pageNum),其中頁數不能少于200頁,否則輸出錯誤信息,并賦予默認值200具有方法: detail,用來在控制臺輸出每本教材的名稱和頁數。具有帶參數的構造方法:用來完成對象的初始化工作,并在構造方法中完成對頁數的最小值限制編寫測試類Book2Test進行測試:初始化一個Book2對象,并調用該Book2對象的detail方法,看看輸出是否正確課間休息生活中的方法重載類方法方法參數方法實現司機 轎車 巴士 火車 駕駛啟動、行駛、等待乘客上車、啟動、行駛、到站停車、正點發車、行駛、到站停車、如果用代碼實現,我們需要三個方法,這些方法的

17、方法名稱相同,參數類型不同 方法重載 方法重載并不陌生 java.io.PrintStream類的println方法能夠打印數據并換行,根據數據類型的不同,有多種實現方式public class Test public static void main(String args) int i = 0;char c = z;String str = hello;System.out.println(i);System.out.println(c);System.out.println(str);PrintStreamprintln(int)println(char)println(String)方

18、法名相同,參數類型不同調用不同的println方法方法重載方法重載 1、在同一類中,兩個或兩個以上的方法 2、他們的方法名稱相同,方法參數個數、參數類型、參數順序不同 例外: 訪問修飾符不足以區分 方法重載 返回類型不足以區分 方法重載方法重載 java.lang.Math類的max()方法能夠從兩個數字中取出最大值,它有多種實現方式 運行時,Java虛擬機先判斷給定參數的類型,然后決定到底執行哪個max()方法Mathmax(int a,int b)max(float a,float b)max(long a,long b)max(double a,double b)public class

19、 Test public static void main(String args) Math.max(1,2);Math.max(1.0F,2.F);Math.max(1.0,2);方法重載方法重載38構造方法重載 構造方法重載是方法重載的典型示例public class Teacher private String name; / 姓名private String college= “浙江大學”; / 所在大學public Teacher(String name) = name; /設定姓名public Teacher(String name, String ccoll

20、ege) = name; /設定姓名this.school = school; /設定所在大學public String introduction() return “大家好!我是來自 + school + 的 + name ;構造方法重載39構造方法重載通過調用不同的構造方法來表達對象的多種初始化行為例如: 默認情況下,老師來自浙江大學,初始化時,只需提供老師姓名 有時,需要提供所在大學名稱及老師姓名public class TeacherTest public static void main(String args) Teacher teacher1 = new Te

21、acher(李芳);System.out.println(roduction();Teacher teacher2 = new Teacher(“張欣”, “北京大學);System.out.println(roduction();大家好!我是來自浙江大學的李芳大家好!我是來自北京大學的張欣40小結編寫一個類Book3,代表教材:具有屬性:名稱(title)、頁數(pageNum)、種類(type)具有方法:detail,用來在控制臺輸出每本教材的名稱、頁數、種類具有兩個帶參構造方法:第一個構造方法中,設置教材種類為“計算機”(固定),其余屬性的

22、值由參數給定;第二個構造方法中,所有屬性的值都由參數給定編寫測試類Book3Test進行測試:分別以兩種方式完成對兩個Book3對象的初始化工作,并分別調用它們的detail方法,看看輸出是否正確場合一:在一個方法內,當局部變量和類的成員變量同名,或者局部變量和父類的成員變量同名時,按照變量的作用域規則,只有局部變量在方法內可見。private String name;public void setName(String name) = name;場合二:在一個類中,有多個構造函數,相互之間調用時。class A A(int a) A() this(10); this 關鍵字

23、方法參數傳遞當調用某個方法時,實參會取代形參,當實參為基本數據類型時,那么會發生什么情況;當實參為引用數據類型時,又會發生什么情況。public class Test1 public static void main(String args) int n = 3; System.out.println(Before change, n = + n); changeData(n); System.out.println(After changeData(n), n = + n); public static void changeData(int n) n = 10; Before change

24、, n = 3After changeData(n), n = 3基本類型作為參數傳遞時,是傳遞值的拷貝,無論你怎么改變這個拷貝,原值是不會改變的方法參數傳遞對于對象類型,也就是Object的子類,如果你在方法中修改了它的成員的值,那個修改是生效的,方法調用結束后,它的成員是新的值,但是如果你把它指向一個其它的對象,方法調用結束后,原來對它的引用并沒用指向新的對象。public class Test2 public static void main(String args) StringBuffer sb = new StringBuffer(Hello ); System.out.print

25、ln(Before change, sb = + sb); changeData(sb); System.out.println(After changeData(n), sb = + sb); public static void changeData(StringBuffer strBuf) strBuf.append(World!); Before change, sb = HelloAfter changeData(n), sb = Hello World!方法參數傳遞public class Test3 public static void main(String args) Str

26、ingBuffer sb = new StringBuffer(Hello ); System.out.println(Before change, sb = + sb); changeData(sb); System.out.println(After changeData(n), sb = + sb); public static void changeData(StringBuffer strBuf) strBuf = new StringBuffer(Hi ); strBuf.append(World!); Before change, sb = HelloAfter changeDa

27、ta(n), sb = Hello小結 public class Tester public static void main(String args) int primitive = 2; changePrimitive(primitive); MyClass myClass = new MyClass(); changeObject(myClass); System.out.println(primitive); System.out.println(myClass.i); public static void changePrimitive(int primitive) primitive = 3; public static void changeObject(MyClass myClass) myClass.i = 3; myClass = new MyClass(); class MyClass int i; Java1.5增加了新特性:可變參數:適用于參數個數不確定,類型確定的情況,java把可變參數當做數組處理。可變參數的特點:(1)只能出現在參數列表的最后; (2).位于變量類型和變量名之間,前后有無空格都可以;(3)調用可變

溫馨提示

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

評論

0/150

提交評論