Java_5高級特征_第1頁
Java_5高級特征_第2頁
Java_5高級特征_第3頁
Java_5高級特征_第4頁
Java_5高級特征_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1第五章第五章 Java 高級特征高級特征static關(guān)鍵字關(guān)鍵字 final 關(guān)鍵字關(guān)鍵字抽象類抽象類 Interface package 泛型泛型常用類常用類25.1 static關(guān)鍵字z成員變量可以分為實例變量和類變量。同樣,類中的方法也可分為實例方法和類方法。用static關(guān)鍵字修飾的變量是類變量,也稱靜態(tài)變量,同樣的,用static關(guān)鍵字修飾的方法是類方法,也稱靜態(tài)方法z目的:使該變量或方法獨立于類的實例,使用類去訪問,而不用類實例3類變量類變量(static)在該類在該類所有對象之間共享所有對象之間共享。在加載該類時,只分配。在加載該類時,只分配一次空間,并初始化。一次空間,并初始

2、化。例:例:class Employee static int com ;則運行時,則運行時,comcomcomcome1e2e34類變量可用來在實例之間進行通信或跟蹤該類實例的數(shù)類變量可用來在實例之間進行通信或跟蹤該類實例的數(shù)目。目。對于對于除除private 類型的類變量類型的類變量外外,可以在類外,可以在類外直接用類名直接用類名調(diào)用調(diào)用而不需要而不需要實例實例化化。class StaticVarpublic static int number ;class Otherclasspublic void method()int x = StaticVar.number ;類變量類變量5類類方

3、法方法(靜態(tài)方法靜態(tài)方法)靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員(即靜態(tài)成員靜態(tài)方法在訪問本類的成員時,只允許訪問靜態(tài)成員(即靜態(tài)成員 變量和靜態(tài)方法),而不允許訪問實例成員變量和實例方法;變量和靜態(tài)方法),而不允許訪問實例成員變量和實例方法;靜態(tài)方法中沒有靜態(tài)方法中沒有thisthis引用變量引用變量子類不能重寫父類的靜態(tài)方法子類不能重寫父類的靜態(tài)方法MainMain方法最終訪問所在類的成員時,必須首先創(chuàng)建方法最終訪問所在類的成員時,必須首先創(chuàng)建 相應(yīng)的對象相應(yīng)的對象可以直接通過類名調(diào)用,而不需要生成任何實例可以直接通過類名調(diào)用,而不需要生成任何實例class accessMembe

4、rprivate static int sa; /定義一個靜態(tài)成員變量private int ia; /定義一個實例成員變量/下面定義一個靜態(tài)方法static void statMethod()int i = 0; /正確,可以有自己的局部變量sa = 10; /正確,靜態(tài)方法可以使用靜態(tài)變量otherStat(); /正確,可以調(diào)用靜態(tài)方法ia = 20; /錯誤,不能使用實例變量insMethod(); /錯誤,不能調(diào)用實例方法class GeneralFunctionpublic static int addUp(int x, int y)return x+y ;public calss

5、 UseGeneralpublic void method()int c = GeneralFunction.addUp(9,10);6靜態(tài)方法-非靜態(tài)方法z靜態(tài)方法(static修飾)在類Test被實例化以前就已經(jīng)存在于內(nèi)存中z靜態(tài)方法使所有該類的實例也就是對象共有的方法z一般的非靜態(tài)方法只有在類被實例化以后,才被加載到內(nèi)存中,具體存儲在堆中,z非靜態(tài)方法是每個該類的實例也就是對象所私有的7靜態(tài)初始化程序靜態(tài)初始化程序 不存在于任何方法體中的靜態(tài)語句塊。在加載該不存在于任何方法體中的靜態(tài)語句塊。在加載該類時類時執(zhí)行且只執(zhí)行一次執(zhí)行且只執(zhí)行一次。class StaticInitDemostat

6、ic int i=5; static System.out.println(Static code: i=+i+);public class test public static void main(String args)for(int j=0;j3;j+)System.out.println( Main code: i=+StaticInitDemo.i);Static code: i=5 Main code: i=6 Main code: i=6 Main code: i=68static關(guān)鍵字注意:z如果在聲明時不用static關(guān)鍵字修飾,則默認聲明為實例變量和實例方法。z每個對象的實

7、例變量都分配內(nèi)存,通過該對象來訪問這些實例變量,不同的實例變量是不同的。z類變量僅在生成第一個對象時分配內(nèi)存,所有實例對象共享同一個類變量,z每個實例對象對類變量的改變都會影響到其它的實例對象。z類變量類方法可通過類名直接訪問,無需先生成一個實例對象,也可以通過實例對象訪問。95.2 final 關(guān)鍵字關(guān)鍵字final可用來修飾變量、方法和類。可用來修飾變量、方法和類。 final的屬性或變量,即是一個常量。的屬性或變量,即是一個常量。 final的方法不能被的方法不能被重寫重寫。 final的類不能被的類不能被繼承繼承。 J2SDK中提供有許多中提供有許多final類,例類,例String、

8、Math、Boolean等。(參看等。(參看API文檔)文檔) 如果自己的類不想被別人繼承,可用如果自己的類不想被別人繼承,可用final修飾。修飾。finalfinal的成員變量:只能被的成員變量:只能被初始化一次初始化一次(定義時或在構(gòu)造(定義時或在構(gòu)造方法中進行)方法中進行)finalfinal的局部變量:代表的是一個常量。方法體內(nèi)任何位的局部變量:代表的是一個常量。方法體內(nèi)任何位置都可以初始化,但置都可以初始化,但賦值一次賦值一次。101 1final final 修飾成員變量修飾成員變量final修飾變量,則成為常量,例如 final type variableName; 修飾成員變

9、量時,定義時同時給出初始值,而修飾局部變量時不做要求。 112 2final final 修飾成員方法修飾成員方法final修飾方法,則該方法不能被子類重寫。final returnType methodName(paramList) 123 3final final 類類zfinal修飾類,則類不能被繼承。如果一個類被final關(guān)鍵字修飾,說明這個類不能再被其他類所繼承,該類被稱為最終類。final class finalClassName 在默認情況下,所有的成員變量或成員方法都可以被隱藏或重寫,如果父類的成員不希望被子類的成員所隱藏或重寫則將其聲明為final。13class ep3_1

10、2_a static final double pi = 3.1415926; / 聲明靜態(tài)常量 public final void f() / 聲明最終方法System.out.println(pi= + pi); class ep3_12_b extends ep3_12_a int num = 100;private void f() System.out.println(num= + num);class testpublic static void main(String args) ep3_12_b One = new ep3_12_b();One.f();z 需要注意的是:需要注

11、意的是:y被被private聲明為私有的方法,以及包含在聲明為私有的方法,以及包含在final類中的方法都被默認為是類中的方法都被默認為是最終的。最終的。y用用static和和final兩個關(guān)鍵字修飾變量時,若不給定初始值,則按照默認規(guī)兩個關(guān)鍵字修飾變量時,若不給定初始值,則按照默認規(guī)則對變量初始化。若只用則對變量初始化。若只用final修飾而不用修飾而不用static,就必須且只能對該變量,就必須且只能對該變量賦值一次,不能默認。賦值一次,不能默認。 / 出錯,不可覆蓋父類的最終方法145.3抽象類抽象類用用abstract關(guān)鍵字修飾的類,即抽象類。關(guān)鍵字修飾的類,即抽象類。 作用:描述作用

12、:描述概念性概念性的內(nèi)容,這樣可以提高開發(fā)效率,更好地的內(nèi)容,這樣可以提高開發(fā)效率,更好地統(tǒng)一用戶統(tǒng)一用戶“接口接口”。語法格式:語法格式: 抽象類必須被繼承,抽象方法必須被重寫。抽象類必須被繼承,抽象方法必須被重寫。 抽象類不能被實例化;抽象類不能被實例化;抽象方法只需聲明,無需實現(xiàn)。抽象方法只需聲明,無需實現(xiàn)。 抽象類通常包括一個或多個抽象方法,但不是一定包括抽象類通常包括一個或多個抽象方法,但不是一定包括 若類中包含了抽象方法,則該類必須被定義為抽象類。若類中包含了抽象方法,則該類必須被定義為抽象類。abstract class 抽象類名抽象類名 abstract 返回類型返回類型 抽象

13、方法抽象方法(參數(shù)表參數(shù)表);155.3抽象類抽象類抽象類也可有普通的成員變量或方法。抽象類也可有普通的成員變量或方法。 可以生成抽象類的變量,該變量可以指向具體的一個可以生成抽象類的變量,該變量可以指向具體的一個子類的實例。子類的實例。abstract class Employeeabstract void raiseSalary(int i) ;class Manager extends Employeevoid raiseSalary(int i ) .Employee e = new Manager( ) ;Employee f = new Employee ( ) ;/錯誤錯誤165

14、.4 5.4 接口(接口(interfaceinterface)5.4.1 interface的含義的含義interface定義了一組行為的協(xié)議。定義了一組行為的協(xié)議。實現(xiàn)一個接口的類將具實現(xiàn)一個接口的類將具有規(guī)定的行為,對有規(guī)定的行為,對象之間通過這個協(xié)議進行通信。象之間通過這個協(xié)議進行通信。interface 不屬于類層次結(jié)構(gòu)。不相關(guān)的類可以實現(xiàn)相同不屬于類層次結(jié)構(gòu)。不相關(guān)的類可以實現(xiàn)相同的接口。的接口。175.4.2接口定義接口定義是是抽象方法和常量抽象方法和常量的定義的集合。的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只中

15、只包含包含常量常量和和方法方法的聲明的聲明,而,而沒有沒有變量和方法的變量和方法的實現(xiàn)實現(xiàn)接口的定義格式:接口的定義格式:public interface 接口名接口名 extends 父接口名列表父接口名列表 type NAME = value; /該常量被實現(xiàn)該接口的多個類共享;該常量被實現(xiàn)該接口的多個類共享; /缺省的具有缺省的具有public, final, static的屬性的屬性 returntype methodName(paramlist); /缺省的具有缺省的具有 public和和abstract屬性屬性18計算機科學與技術(shù)系計算機科學與技術(shù)系l 特性:特性:l接口中聲明的成

16、員變量默認為接口中聲明的成員變量默認為public static final的,的,且也只能是且也只能是public static final的;的;l接口中只能定義為抽象方法,而且這些方法默認為接口中只能定義為抽象方法,而且這些方法默認為public的,且也只能為的,且也只能為public的的l接口可以繼承其它接口,并添加新的屬性和抽象方接口可以繼承其它接口,并添加新的屬性和抽象方法。法。l接口可以接口可以多繼承多繼承其它其它接口。接口。即一個接口可有多個父接口,用逗號隔開即一個接口可有多個父接口,用逗號隔開5.4.25.4.2接口定義接口定義19計算機科學與技術(shù)系計算機科學與技術(shù)系inte

17、rface avoid aa();interface bvoid bb();interface c extends a,bvoid cc();5.4.25.4.2接口定義接口定義20 用用implements表示一個類實現(xiàn)了某個接口。表示一個類實現(xiàn)了某個接口。 該類中必須實現(xiàn)接口中的該類中必須實現(xiàn)接口中的所有方法所有方法。例:例:interface SayHello void printMessage( ); class SayHelloImpl implements SayHellovoid printMessage( )System.out.println(“Hello”);5.4.3實現(xiàn)

18、接口實現(xiàn)接口215.4.4 5.4.4 多重繼承多重繼承可以通過實現(xiàn)接口實現(xiàn)多重繼承:一個類可只繼承可以通過實現(xiàn)接口實現(xiàn)多重繼承:一個類可只繼承一個父類,并實現(xiàn)多個接口。一個父類,并實現(xiàn)多個接口。interface I1 ;interface I2 ;class E . ;class M extends E implements I1,I2 說明:說明: extends子句必須放在子句必須放在 implements 子句之前225.4.45.4.4多重繼承多重繼承抽象或具體父類抽象或具體父類父類方法父類方法 interface_1 interface_2 interface_ninterfac

19、e_1interface_2interface_n子類子類235.4.55.4.5接口的使用接口的使用Interface可以作為一種數(shù)據(jù)類型使用。并且可可以作為一種數(shù)據(jù)類型使用。并且可以支持多態(tài)。以支持多態(tài)。Interface Human void showNameInNativeLanguage();class Chinese implements Humanvoid showNameInNativeLanguage() System.out.println(“Chinese”)class Japanese implements Human.Human e = new Chinese( );

20、 Human e = new Japanese( );e.showNameInNativeLanguage();245.4.65.4.6接口與抽象類接口與抽象類接口中的所有方法都是抽象的,而抽象類可以定義帶有方接口中的所有方法都是抽象的,而抽象類可以定義帶有方法體的不同方法;法體的不同方法;一個類可以實現(xiàn)多個接口,但只能繼承一個抽象父類;一個類可以實現(xiàn)多個接口,但只能繼承一個抽象父類;接口與實現(xiàn)它的類不構(gòu)成類的繼承體系,不相關(guān)的類可以接口與實現(xiàn)它的類不構(gòu)成類的繼承體系,不相關(guān)的類可以實現(xiàn)相同的接口,而抽象類是屬于一個類的繼承體系,并實現(xiàn)相同的接口,而抽象類是屬于一個類的繼承體系,并且一般位于類

21、體系的頂層。且一般位于類體系的頂層。255.5.1 5.5.1 什么是包什么是包包包(package)是相關(guān)類與接口的一個集合,它提供是相關(guān)類與接口的一個集合,它提供訪問控訪問控制與命名空間管理制與命名空間管理。 Java平臺中的類與接口都是根據(jù)功能以平臺中的類與接口都是根據(jù)功能以包組織的。包組織的。包機制的好處:包機制的好處:程序員容易確定包中的類是相關(guān)的,并且容易根據(jù)所需的功能找到相應(yīng)的類。每個包都創(chuàng)建一個新的命名空間,因此不同包中的類名不會沖突。同一個包中的類之間有比較寬松的訪問控制。265.5.2 創(chuàng)建包創(chuàng)建包用用package語句指定源文件中的類屬于一個特定包:語句指定源文件中的類屬

22、于一個特定包: 說明:說明: 包定義語句在每個源程序中只能有一條包定義語句在每個源程序中只能有一條,即一個類只能屬于一個包。,即一個類只能屬于一個包。 包定義語句必須在程序的包定義語句必須在程序的第一行第一行(之前可有空格及注釋)。(之前可有空格及注釋)。多個包名用多個包名用“.” 分隔。分隔。如在程序第一行加上如在程序第一行加上package語句,則在當前文件夾下創(chuàng)建一個子文件語句,則在當前文件夾下創(chuàng)建一個子文件夾,夾,存放其存放其.class文件。文件。package的命名全都是小寫的英文字母。的命名全都是小寫的英文字母。如果如果package未指定,則所有的類被組合到一個未命名的缺省包中

23、,未指定,則所有的類被組合到一個未命名的缺省包中,不不能被其他包中的類使用能被其他包中的類使用package pkg1.pkg2.pkg3;275.5.2包成員的使用包成員的使用將將package 引入源程序,格式:引入源程序,格式:import 包名包名.*;import 包名包名. 類名;類名; 說明:說明: import 語句必須在源程序之前,在語句必須在源程序之前,在package 聲明之后聲明之后 package . /缺省是缺省是package . import . /缺省是缺省是import java.lang.* 類聲明類聲明 使用長名引用包成員使用長名引用包成員 包名包名.類

24、名類名28方法的訪問控制方法的訪問控制publicprotecteddefaultprivate同類同包子類通用性(不同包且非子類)不同情形下295.6.1泛型概念泛型概念類和方法的泛化類和方法的泛化泛型是泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)數(shù)據(jù)類型被指定為一個參數(shù)。這。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。為泛型類、泛型接口、泛型方法。30z規(guī)則限制規(guī)則限制z1、泛型的類型參數(shù)只能是類類型

25、(包括自定義類),不能是簡單類型。z2、泛型的類型參數(shù)可以有多個。z3、泛型的參數(shù)類型可以使用extends語句,例如。z4、泛型的參數(shù)類型還可以是通配符類型。例如Class classType = Class.forName(java.lang.String);315.6.2泛型的定義和使用泛型的定義和使用class MyBox private T t; public void add(T t) this.t = t; public T get() return t; public class MyBoxTestpublic static void main(String args)MyBo

26、x aBox;aBox = new MyBox(); aBox.add(new Integer(1000);Integer i = aBox.get(); System.out.println(The Integer is : +i); 注:注:T是類型參數(shù),可以是除了基本類型之外的任意類型是類型參數(shù),可以是除了基本類型之外的任意類型32z class Gen z private T ob; / 定義泛型成員變量 z public Gen(T ob) this.ob = ob; z public T getOb() return ob; z public void setOb(T ob) th

27、is.ob = ob; z public void showType() z System.out.println(T的實際類型是: + ob.getClass().getName();z z z public class test z public static void main(String args) / 定義泛型類Gen的一個Integer版本z Gen intOb = new Gen(88);z intOb.showType();z int i = intOb.getOb();z System.out.println(value= + i);z System.out.println

28、(-);z / 定義泛型類Gen的一個String版本z Gen strOb = new Gen(Hello Gen!);z strOb.showType();z String s = strOb.getOb();z System.out.println(value= + s);z 335.8包裝類(包裝類(Wrapper) Wrapper將基本類型表示成類。將基本類型表示成類。每個每個wrapper類對象都封裝了基本類型的一個值。類對象都封裝了基本類型的一個值。Primitive Data Type Wrapper ClassbooleanBooleanbyteBytecharCharact

29、ershortShortint IntegerlongLongfloatFloatdoubleDouble345.8.25.8.2自動裝箱與拆箱自動裝箱與拆箱l 裝箱(裝箱(Box):把基本類型的數(shù)據(jù)通過相應(yīng)把基本類型的數(shù)據(jù)通過相應(yīng)Wrapper類形類形成對象成對象l 拆箱(拆箱(Unbox):把一個):把一個Wrapper類對象中的基本數(shù)據(jù)類對象中的基本數(shù)據(jù)類型提取出來。類型提取出來。l 自動裝箱與拆箱自動裝箱與拆箱Integer i = 10;int j = i;355.9 Java5.9 Java常用類常用類 類庫的結(jié)構(gòu)類庫的結(jié)構(gòu)java.lang 語言基礎(chǔ)類庫(System、Math、

30、 Thread、基本數(shù)據(jù)類型類)java.util Java的工具類庫(向量、棧、日期)java.io Java的標準輸入輸出類庫java.applet 用于實現(xiàn)Java Applet小程序的類庫java.awt 用于構(gòu)建圖形用戶界面的類庫java.awt.event 界面用戶交互控制和事件響應(yīng)類 庫 Java的用于實現(xiàn)網(wǎng)絡(luò)功能的類庫 使用使用JDK Document查看類庫查看類庫365.9.2 5.9.2 字符串相關(guān)類字符串相關(guān)類StringString類類l Java語言將字符串作為對象處理,對應(yīng)的類為語言將字符串作為對象處理,對應(yīng)的類為java.lang.Stringl “*”是該類的

31、一個對象,即用是該類的一個對象,即用雙引號雙引號括住的一括住的一串字符,代表串字符,代表不可變的字符序列不可變的字符序列。l 例:例:l String通常用來產(chǎn)生字符串常量。通常用來產(chǎn)生字符串常量。Hello World! 375.9.2 5.9.2 字符串相關(guān)類字符串相關(guān)類StringString類類2. 用用String類產(chǎn)生字符串對象,有兩種方式:類產(chǎn)生字符串對象,有兩種方式: 例:例: 注意:使用這兩種方式產(chǎn)生出來的字符串,它們在注意:使用這兩種方式產(chǎn)生出來的字符串,它們在內(nèi)存中存放的方式不一樣。內(nèi)存中存放的方式不一樣。l調(diào)用調(diào)用String類的構(gòu)造方法類的構(gòu)造方法l使用雙引號使用雙引

32、號“ ”String str1 = new String(“Java”);String str2 = “Java”; 38l 比如比如:5.9.2 5.9.2 字符串相關(guān)類字符串相關(guān)類StringString類類String str1 = new String(“Java”);String str2 = new String(“Java”);str1str2stacknullnullheap“Java”0 x876543210 x12345678“Java”395.9.2 5.9.2 字符串相關(guān)類字符串相關(guān)類StringString類類String str3 = “Java”;String str4 = “Java”;stacknullnullstr3str4Data Seg“Java”0 x876543210 x87654321405.2 5.2 字符串相關(guān)類字符串相關(guān)類StringString類類l 字符串的比較字符串的比較l 例:例:l運算符運算符= /比較兩個對象的內(nèi)存地址比較兩個對象的內(nèi)存地址lbo

溫馨提示

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

評論

0/150

提交評論