java程序設計教程第5章.ppt_第1頁
java程序設計教程第5章.ppt_第2頁
java程序設計教程第5章.ppt_第3頁
java程序設計教程第5章.ppt_第4頁
java程序設計教程第5章.ppt_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,第5章 接口、內部類和包,5.1 接口 5.2 內部類 5.3 包 5.4 Java API基礎 本章小結 習題,5.1 接 口Java支持單重繼承機制,不支持多重繼承,即一個類只能有一個超類。單繼承機制使得Java結構簡單,層次清楚,易于管理,但在實際應用中也需要使用多重繼承功能。為了實現(xiàn)像C+中的多繼承性,Java中引入了接口概念,接口和單重繼承相結合很好地實現(xiàn)了多重繼承的功能。接口和類非常相似,接口用于定義幾個類具有的但又不在這些類中定義的功能,通過在接口中設置這些方法,描述出共同的特性,然后由類本身定義如何實現(xiàn)。,5.1.1 接口定義接口是由常量和抽象方法組成的特殊類。接口定義由關鍵

2、字interface引導,分為接口的聲明和接口體。其中,interface聲明接口名,在接口體中定義常量和方法。在接口體中只進行方法的聲明,不能進行方法的實現(xiàn)。具體定義語法如下:publicinterface接口名extends父接口名列表publicstaticfinal域類型 域名=常量值;常量域聲明publicabstractnative返回值 方法名(參數列表)throw異常列表;抽象方法聲明,有關接口的定義要注意以下幾點:(1) interface是聲明接口的關鍵字,可以把它看成一個特殊的類。(2) 聲明接口可給出訪問控制符,用public修飾的是公共接口,可以被所有的類和接口使用。

3、若接口聲明為public,則接口中的方法和變量也全部為public。如果是默認修飾符的接口,則只能被同一個包中的其他類和接口使用。(3) 接口名要求符合Java標識符的規(guī)定。,(4) 接口也具有繼承性,定義一個接口時,可以通過extends關鍵字聲明該接口是某個已經存在的父接口的派生接口,它將繼承父接口的所有屬性和方法。一個接口還可以繼承多個父接口,父接口間用逗號分隔。(5) 系統(tǒng)默認接口中所有屬性的修飾都是public static final。(6) 系統(tǒng)默認接口中所有方法的修飾都是public abstract。,(7) 在接口中對抽象方法聲明時,只能給出這些抽象方法的方法名、返回值和參

4、數列表,而不能定義方法體,即這些接口僅僅是規(guī)定了一組信息交換、傳輸和處理的“接口”。以下是接口定義的一個示例,聲明了一個接口Student_info,表示學生情況,其中有一個數據成員year,兩個成員方法age和output。定義在接口中的變量全部隱含為final和static,因此成員變量year必須設置初值。接口在語句構成上與類相似,但是其中只有方法的聲明,沒有方法的實現(xiàn)。,【示例5-1】 Student_info.java。public interface Student_info int year = 2008;int age( );void output( );,5.1.2 實現(xiàn)接口

5、接口是抽象類的一種,不能直接用于創(chuàng)建對象。接口的作用在于規(guī)定了一些功能框架。接口的定義僅僅是實現(xiàn)某一特定功能的一組功能的對外接口和規(guī)范,具體功能的實現(xiàn)則由遵守該接口約束的類去完成,即由這些類來具體定義接口中各種抽象方法的方法體。因而在Java中,通常把對接口功能的“繼承”稱為“實現(xiàn)”。,一旦一個接口被定義,一個或多個類就可以實現(xiàn)該接口。用關鍵字implements聲明一個類將實現(xiàn)一個接口。其聲明格式如下:class extendsimplements,其中,可以是public,也可以省略。,有關接口的實現(xiàn),應該注意以下問題:(1) 一個類可以實現(xiàn)多個接口,用逗號分隔接口列表。(2) 如果實現(xiàn)某

6、接口的類不是abstract的抽象類,則在類的定義部分必須實現(xiàn)指定接口的所有抽象方法,即為所有抽象方法定義方法體,而且方法頭部分應該與接口中的定義完全一致,即有完全相同的返回值和參數列表。,(3) 如果實現(xiàn)某接口的類是abstract的抽象類,則它可以不實現(xiàn)該接口所有的方法。但是對于這個抽象類的任何一個非抽象的子類而言,它們的父類所實現(xiàn)的接口中的所有抽象方法都必須有實在的方法體。這些方法體可以來自抽象的父類,也可以來自子類自身,但是不允許存在未被實現(xiàn)的接口方法。這主要體現(xiàn)了非抽象類中不能存在抽象方法的原則。(4) 接口的抽象方法的訪問限制符都已指定為public,一個類在實現(xiàn)一個接口時,必須實

7、現(xiàn)接口中的所有方法,并且方法必須聲明為public。,下面是一個類實現(xiàn)接口的示例,聲明的類Student實現(xiàn)接口Student_info,其中Student類中有自己的三個成員變量name、sex和birth_year,實現(xiàn)接口方法age時使用了接口中的變量year值。,【示例5-2】 Student.java。public class Student implements Student_info String name;String sex;int birth_year;public Student(String n, String s, int y) name = n;sex = s;b

8、irth_year = y;,public int age( ) return year - birth_year;public void output( ) System.out.println( + + this.sex + + this.age( ) + 歲);public static void main(String args) Student stu = new Student(小紅, 女, 1983);stu.output( );,程序運行結果:小紅 女 25歲從上例可以看出,一個類實現(xiàn)一個接口,必須給出接口中所有方法的實現(xiàn)。如果不能實現(xiàn)某方法,也必須寫出一個空

9、方法。此外,Java允許多個類實現(xiàn)同一個接口,這些類之間可以是無聯(lián)系的,每個類各有自己實現(xiàn)方法的細節(jié),這是與繼承機制的不同之處。,【示例5-3】 erface fee public void charge( );class bus implements fee public void charge( ) System.out.println(“bus:全程1元”);,class car implements fee public void charge( ) System.out.println(“car:6元起價,1.70元/公里”);class tran

10、sport public static void main(String args) bus 七路 = new bus( );car 富康 = new car( );七路.charge( );富康.charge( );,程序運行結果:bus:全程1元car:6元起價,1.70元/公里在本例中,定義了一個接口fee,包括成員方法charge,而聲明的類bus和類car都實現(xiàn)同一個接口fee,這樣就完成了多個類實現(xiàn)同一個接口。,Java允許多個類實現(xiàn)同一個接口的同時,一個類也能實現(xiàn)多個接口,這樣就解決了多重繼承的問題。多重繼承是指一個子類可以有多個直接父類,該子類可以全部或部分繼承所有直接父類的數

11、據成員及成員方法。Java中不允許類的多重繼承,但允許接口的多重繼承??梢园呀涌诶斫獬蔀橐环N特殊的類,即由常量和抽象方法組成的特殊類。一個類只能有一個父類,但是它可以同時實現(xiàn)若干個接口。在這種情況下,如果把接口理解成特殊的類,那么這個類利用接口實際上就獲得了多個父類,即實現(xiàn)了多重繼承,如圖5-1所示。,圖5-1 繼承機制,下例是通過Java接口實現(xiàn)多重繼承的示例,首先聲明兩個接口theShape和showShape,其中包括兩個成員方法getArea和showInfor?!臼纠?-4】 Cerface theShape double PI = 3.14159;dou

12、ble getArea( );,interface showShape void showInfor( );public class Circle implements theShape, showShape int r;Circle(int r) this.r = r;,public double getArea( ) return r * r * PI;public void showInfor( ) System.out.print(r= + r + t the area: + getArea();,public static void main(String args) Circle

13、c = new Circle(10);c.showInfor( );程序運行結果:r= 10 the area: 314.159,5.2 內 部 類在一個類中定義另外一個類,這個類就叫做內部類或內置類(inner class),也稱嵌套類,包含內部類的類稱為外部類(outer class)。內部類與外部類存在邏輯上的所屬關系,內部類的使用要依托外部類,內部類一般用來實現(xiàn)一些沒有通用意義的邏輯功能。與一般的類相同,內部類可以具有數據成員和成員方法。通過建立內部類的對象,可以存取其數據成員和調用其成員方法。,以下是內部類定義的一個簡單示例,本例中聲明的Group類中包含有Student類。相對而言

14、,Group類稱為外部類,Student類稱為內部類,內部類中也可以聲明數據成員和成員方法。,【示例5-5】 Group.java。public class Group int count;public class Student String name;public void output( ) System.out.println( + zz);,與類的其他成員一樣,內部類也分為static和非static,前者稱為靜態(tài)內部類,后者稱為成員類(非靜態(tài)內部類)。同時,內部類也可以在某個方法中定義,這種內部類稱為局部內部類。另一種匿名內部類則是創(chuàng)建對象的同時定義類的實現(xiàn),但是

15、未規(guī)定類名。,5.2.1 成員類下面示例中,聲明OuterOne外部類中包含有內部類InnerOne,其中外部類和內部類的其他成員處于同級位置,所以稱為成員類。,【示例5-6】 OuterOne.java。public class OuterOne private int x = 3;InnerOne ino = new InnerOne( ); /外部類有一個屬性指向創(chuàng)建的內部類的對象public class InnerOne /內部類private int y = 5;public void innerMethod( ) System.out.println(y is + y);,publ

16、ic void innerMethod2( ) System.out.println(“x2 is ” + x);/訪問外部類變量 /內部類結束public void OuterMethod( ) System.out.println(x is + x);ino.innerMethod( );ino.innerMethod2( );,public static void main(String arg) OuterOne my = new OuterOne( );my.OuterMethod( );程序運行結果:x is 3y is 5x2 is 3,需要注意的是,內部類是一個編譯時的概念,編

17、譯成功后就會成為完全不同的兩類。一個名為OuterOne的外部類和其內部定義的名為InnerOne的內部類經過編譯后出現(xiàn)OuterOne$InnerOne.class和OuterOne.class 兩類。內部類的命名除了不能與自己的外部類同名外,不必擔心與其他類名的沖突,因為其真實的名字上加了外部類名作為前綴。在內部類中可以訪問外部類的成員。與外部類的成員一樣,在內部類中可以使用訪問控制符public、protected、private修飾。,在外部類中訪問內部類一般通過在外部類的成員定義中創(chuàng)建內部類的對象,例如InnerOne ino=new InnerOne( )。在內部類中使用this,

18、this指內部類的對象,要訪問外部類的當前對象須加上外部類名作前提。例如外部類OuterOne,內部類InnerOne,用OuterOne.this代表外部類的this對象。,5.2.2 靜態(tài)內部類和普通的類一樣,內部類也可以有靜態(tài)的。定義為static的內部類稱為靜態(tài)內部類。和非靜態(tài)內部類相比,靜態(tài)內部類沒有了指向外部的引用。同時,非靜態(tài)內部類不能聲明靜態(tài)成員,只有靜態(tài)內部類才能聲明靜態(tài)成員。,靜態(tài)內部類將自動轉化為頂層類(top-levelclass),即它沒有父類,而且不能引用外部類成員或其他內部類成員。當一個內部類不需要引用外部類成員,只需要隱藏在另一個類中時,可以將該內部類聲明為靜態(tài)

19、的。以下是一個簡單的例子,本例的類Test中聲明的一個內部類Person是靜態(tài)的、公用的,其中可以聲明靜態(tài)變量count。靜態(tài)內部類Person中不能訪問外部類成員。,【示例5-7】 StaticTest.java。public class StaticTest public static class Person private int age;private String name;static int count = 0;Person(String n, int a) name = n;age = a;count+;,public void display( ) System.out.p

20、rintln(count= + count + t + name + t + age);,public static void main(String args) StaticTest.Person person1 = new StaticTest.Person(“Lily”, 16);person1.display( );StaticTest.Person person2 = new StaticTest.Person(“Jason”, 25);person2.display( );StaticTest.Person person3 = new StaticTest.Person(“Limi

21、ng”, 30);person3.display( );,程序運行結果:count= 1Lily16count= 2Jason25count= 3Liming30,5.2.3 局部內部類Java內部類也可以是局部的,它可以定義在一個方法甚至一個代碼塊之內?!臼纠?-8】 Testpart.java。public class Testpart public static void main(String args) final int i = 8;class person public String name;,public void show( ) System.out.println(i);

22、System.out.println();person p = new person( ); = “Zhangbei”;p.show( );,程序運行結果:8Zhangbei上例中,在main方法中定義了類person,它是一個內部類。內部類方法show訪問了main方法中定義的final類型的局部變量。其中,方法中內部類只能訪問方法中final類型的局部變量,而不能訪問其他類型的局部變量,但可以訪問外部類的所有數據成員和成員方法。,5.2.4 匿名內部類Java語言允許創(chuàng)建對象的同時定義類的實現(xiàn),但是未規(guī)定類名,Java將其定義為匿名內部類。Java的匿名內部類

23、同匿名數組一樣,在只需要創(chuàng)建一個類的對象并且用不上它的名字時,或者說有的內部類只需要創(chuàng)建一個它的對象,以后不會用到這個類,在這種情況下一般使用匿名內部類比較合適。匿名內部類的語法規(guī)則如下:new interfacename( );或new superclassname( );下例中,先聲明一個接口Contents。,【示例5-9】 Contents.java。public interface Contents int value( ); 下例中,方法cont( )使用匿名內部類直接返回了一個實現(xiàn)了接口Contents的類的對象。,【示例5-10】 Goods.java。public class

24、 Goods public Contents cont( ) return new Contents( ) private int i = 11;public int value( ) return i;/在這里需要一個分號,示例5-10中,cont( )方法將下面兩個動作合并在一起:返回值的生成;表示這個返回值的類的定義。cont( )方法創(chuàng)建了一個繼承自Contents的匿名類的對象,通過new表達式返回的引用被自動向上轉型為Contents的引用。需要注意的是,匿名內部類因為沒有名字,所以它沒有構造方法(但是如果這個匿名內部類繼承了一個只含有帶參數構造方法的父類,創(chuàng)建它的時候就必須帶上這

25、些參數,并在實現(xiàn)的過程中使用super關鍵字調用相應的內容)。如果要初始化它的數據成員,可以采用下面幾種方法:,(1) 如果是一個方法的匿名內部類,通過這個方法傳進需要的參數,同時這些參數必須被聲明為final。(2) 將匿名內部類改造成有名字的局部內部類,這樣這個類就可以擁有構造方法。(3) 在匿名內部類中使用初始化代碼塊。通過上面的講述,可以看出,內部類是位于一個類中的代碼,其訪問權限和類中的方法一樣。在內部類中可以直接引用它的外部類中的成員,而在外部類中,需要通過一個內部類的對象引用內部類中的成員。,在一種情況下需要實現(xiàn)一個接口,而在另一種情況下又不需要實現(xiàn)這個接口時,這時可以使用內部類

26、來解決這一問題,讓內部類來實現(xiàn)這個接口。使用內部類來實現(xiàn)接口,可以更好地定位與接口關聯(lián)的方法在代碼中的位置。Java內部類有效地解決了多重繼承的問題。,5.3 包為了便于管理大型軟件系統(tǒng)中數目眾多的類,解決類命名沖突的問題,Java引入了包(package)。包是Java提供的一種區(qū)別類名空間的機制,是類的組織方式,包對應一個文件夾,包中還可以再有包,稱為包等級。,5.3.1 包的創(chuàng)建包的創(chuàng)建就是將源程序文件中的接口和類納入指定的包。在一般情況下,Java源程序由以下五部分組成。(1) package:一個包(package)說明語句(可選項),其作用是將源文件中的接口和類納入指定包。源文件中

27、若有包說明符,則必須是第一個語句。(2) import:若干個(import)語句(可選項),其作用是引入源文件中需要使用的包。(3) public class:一個public的類聲明,在一個源文件中只能有一個public類。(4) class:若干個屬于本包的類聲明。(5) interface:聲明接口。,創(chuàng)建一個包就是把包含一個package的命令作為一個Java源文件的第一句。該文件中定義的任何類型將屬于指定的包。package語句定義了一個存儲類的名字空間。如果省略package語句,類名將被輸入一個默認的沒有名稱的包。下面是package聲明的一般形式:package ;其中,pa

28、ckage是關鍵字,是標識符。通過這個語句就可以創(chuàng)建一個具有指定名字的包。例如:package MyPackage;,多個文件可以包含相同的package聲明。package聲明僅僅指定了文件中所定義的類屬于哪一個包,不排除其他文件中的其他類也屬于同一個包。包中的類可以來自不同的源文件,大多數包都伸展到很多文件,即多個文件可以有同一個package語句。實際上,創(chuàng)建包就是在當前文件夾下創(chuàng)建一個子文件夾,這個包中所有類的字節(jié)碼文件將存放在該文件夾下,即存放這個包中包含的所有類的.class文件。以下是創(chuàng)建包的一個示例。,【示例5-11】 Circle_area.java。package test

29、;public class Circle_area public static void main(String args) final float PI = 3.14f;float r = 3.6f, area;area = PI * r * r;System.out.println(“Area(” + r + “)=” + area);,程序運行結果:Area(3.6)=40.694397上例中將圓面積的計算封裝在Circle_area類中。package語句指示將該類安排在test包中,實際上,就是將該類文件存放在當前路徑的test子文件包下。另外,還可以創(chuàng)建包層次,將每個包名與它的上層

30、包名用點“.”分隔開。一個多級包聲明的通用格式如下:package 包名1.包名2.包名3; 例如:package MyPackage.NewDate;,package MyPackage.NewDate;語句中的符號“.”代表了目錄分隔符,說明這個語句創(chuàng)建了兩個文件夾:一個是當前文件夾下的子文件夾MyPackage;一個是MyPackage下的子文件夾NewDate,當前包中的所有類就存放在這個文件夾里。,5.3.2 包的引入將類組織成包的目的是為了更好地利用包中的類。Java使用了import語句來引入特定的類甚至整個包。一旦被引入,類可以被直呼其名地引用。在Java源程序文件中,impo

31、rt語句緊接著package語句(如果package語句存在),它存在于任何類定義之前。下面是import聲明的一般形式:import 包名1.包名2.(classname|*);,其中,包名1是頂層包名,包名2是在外部包中的用句點“.”隔離的下級包名。同時,指定一個清楚的類名或者指定一個“*”,該“*”號表明Java編譯器應該引入整個包。下面的例子顯示了這兩種形式:import java.util.Date; /表示引入包java.util中Date類import java.io.*; /表示引入包java.io中所有的類,5.3.3 設置包的路徑1Java包的路徑要引用Java包,除在源程

32、序中增加import語句之外,還要通過設置環(huán)境變量告訴系統(tǒng)程序運行時找到Java包的路徑。由于Java使用文件系統(tǒng)來存儲包和類,因此類名就是文件名,包名就是文件夾名。路徑設置:“我的電腦”“屬性”“高級”“環(huán)境變量”。新建系統(tǒng)變量“classpath”,語句是:“classpath=.;C:j2sdk1.5.0lib”,其中C:j2sdk1.5.0lib是JDK 1.5系統(tǒng)安裝的路徑。,2自定義的包程序員自定義的包Mypackage,通過設置包的存放路徑告訴系統(tǒng)包的位置。Java用文件系統(tǒng)目錄來存儲包,其中目錄名稱必須和包名嚴格匹配。例如,任何聲明為MyPackage包中的一部分的類 .cla

33、ss文件被存儲在一個MyPackage目錄中。,例如,在D:myjava之中創(chuàng)建一個與包同名的文件夾D:myjavaMypackage,并將編譯過的文件( .class)放入該文件夾中。包名與文件名的大小應該一致。接著再添加環(huán)境變量classpath的路徑如下:set classpath=.;C: j2sdk1.5.0lib;D:myjava其他類通過import Mypackage.*語句可以引用Mypackage包中的類。程序運行時,系統(tǒng)將在D:myjava中尋找Mypackage包。,例如,聲明一個完整的日期類NewDate,將編譯后的日期類文件NewDate.class放在已建立的包M

34、ypackage中。其中要將聲明的公用類NewDate放在Mypackage包中,有以下四個步驟:(1) 創(chuàng)建文件夾D:myjavaMypackage。(2) 設置環(huán)境變量classpath:set classpath=.;DL:myjava。(3) 在源程序NewDate.java中,聲明NewDate類放在包Mypackage中:,package Mypackage;import java.util.*; /引用java.util包public class NewDate /NewDate類主體,(4) 將源程序NewDate.java編譯后生成的NewDate.class文件拷入D:my

35、javaMypackage文件夾中,然后在其他類中可以用import語句引用Mypackage包中聲明的類NewDate。例如,在另一程序People.java中,引用Mypackage包中的NewDate類如下:import Mypackage.NewDate; 引用Mypackage包中的NewDate類public class People People類主體,5.3.4 包的作用在利用面向對象技術開發(fā)實際的系統(tǒng)時,通常需要定義許多類共同工作,而有些類可能要在多處反復使用。在Java程序中,如果一個類在多個場合下反復使用,就把它存放在一個“包”的程序組織單位中。包是接口和類的集合,或者說

36、包是接口和類的容器。使用包有利于實現(xiàn)不同程序間類的重用。Java語言提供了很多包,即Java類庫中的包。同時,Java語言還為程序員提供了自行定義包的機制。,包的作用主要有兩個:一是劃分類名空間,同一個包中的類(包括接口)不能重名,不同包中的類可以重名。二是控制類之間的訪問,類之間的訪問控制是通過類修飾符來實現(xiàn)的。若類聲明修飾符為public,則表明該類不僅可提供同一包中的類訪問,也可以被其他包中的類訪問;若類聲明無修飾符,則表明該類僅供同一包中的類訪問。,5.4 Java API基礎Java提供的用于語言開發(fā)的類庫,稱為應用程序編程接口(API,Application Programing

37、Interface),即軟件開發(fā)商提供的用于開發(fā)軟件的類與接口的集合,分別放在不同的包中。Java提供現(xiàn)成的類庫供程序員使用,其中封裝了很多函數,只顯示函數名、參數等信息,不提供具體實體,顯示出來的這些即稱為API。同時由于Java是開源的,還可以看到類庫中方法的具體實現(xiàn)。,API就相當于Java中的字典,遇到什么問題就可以查看API。打開Java的幫助文檔,可以看到所有的包及其中的類和方法。下面是官方下載網址,也可以在線查看:,5.4.1 Java提供的包概述Java提供的常用包如表5-1所示。,5.4.2 java.lang語言包java.lang包是Java語言的核心包,包含了運行Jav

38、a程序必不可少的系統(tǒng)類,如基本數據類型、基本數學函數、字符串處理、線程、異構處理類等。每個Java程序運行時,系統(tǒng)都會自動引入java.lang包,所以這個包的加載是缺省的。java.lang包中主要包括的常用類如表5-2所示。,java.lang中也定義了如下接口:(1) Appendable(可追加接口),能夠添加char序列和值的對象。(2) CharSequence(可閱讀字符序列接口),此接口對許多不同種類的char序列提供統(tǒng)一的只讀訪問。(3) Cloneable(可克隆接口),實現(xiàn)了Cloneable接口的類,以指示Object.clone( )方法可以合法地對該類實例進行按字段

39、復制。 (4) Comparable(可比較接口),此接口強行對實現(xiàn)它的每個類的對象進行整體排序。,(5) Iterable(可迭代接口),實現(xiàn)了該接口的類一般作為容器,且具有提供依次訪問被包容對象功能的能力。(6) Readable(可讀取接口),對象可以從實現(xiàn)了該接口的類的實例對象中讀取字符。(7) Runnable(可運行接口),接口應該由那些打算通過某一線程執(zhí)行其實例的類來實現(xiàn)。類必須定義一個稱為run的無參數方法。(8) Thread.UncaughtExceptionHandler(線程未捕獲異??刂破鹘涌?,當Thread因未捕獲的異常而突然終止時,調用處理程序的接口。,下面通過

40、一個實例,說明使用Integer類的靜態(tài)方法將十進制字符串轉換為二進制、八進制、十六進制字符串輸出,使用Class、Runtime類中的方法獲得運行時信息,如當前名、父類名、包名情況。其中Integer類提供了多個方法,能在int類型和string類型之間互相轉換,還提供了處理int類型時非常有用的其他一些常量和方法。,【示例5-12】 Runtimeinfo.java。public class Runtimeinfo public static void main(String args) int i = 111;String str = new String(i + “ ”);System

41、.out.println(i + “二進制=” + Integer.toBinaryString(i) + “八進制=”+ Integer.toOctalString(i) + 十六進制= + Integer.toHexString(i);,System.out.println(“本類名=” + str.getClass().getName() + “超類名=”+ str.getClass().getSuperclass().getName() + “包名=”+ str.getClass().getPackage().getName();System.out.println(“操作系統(tǒng)=” +

42、 System.getProperty(“”) +“n”+ “Java版本=” + System.getProperty(“java.vm.version”);,程序運行結果:111二進制=1101111八進制=157十六進制=6f本類名=java.lang.String超類名=java.lang.Object包名=java.lang操作系統(tǒng)=Windows XPJava版本=1.5.0-b64,5.4.3 java.util實用包java.util包中包括了Java語言中的一些低級實用工具,如處理時間的Date類、處理變長數組的Vector類、實現(xiàn)棧的Stack類和實現(xiàn)哈希表的

43、HashTable類等。使用這些內置類程序員可以很方便、快捷地編程。以下簡要介紹java.util包中的一些重要的類,如表5-3所示。,1日期類日期類包括Date、Calendar、GregorianCalendar類,它們描述日期和時間,提供對日期值的許多構造方法,如獲得當前日期、比較兩個日期、判斷兩個日期的先后等。類Date表示特定的瞬間,精確到毫秒。Date類有兩種構造方法,一種是Date( )獲取系統(tǒng)當前日期和時間值,包括年、月、日、時、分、秒、毫秒;另一種是Date(long date)以date創(chuàng)建日期對象,date表示從GMT(格林威治)時間2008-7-3 00:00:00開始

44、至某時刻的毫秒數。,Calendar類是一個抽象類,它為特定瞬間與一組諸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日歷字段之間的轉換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距歷元(即格林威治標準時間1970年1月1日的00:00:00.000,格里高利歷)的偏移量。該類還為實現(xiàn)包范圍外的具體日歷系統(tǒng)提供了其他字段和方法。這些字段和方法被定義為protected。與其他語言環(huán)境類一樣,Calendar提供了一個類方法getInstance,以獲得此類型的一個通用的對象。Calendar的getInstance 方法返回一

45、個Calendar對象,其日歷字段已由當前日期和時間初始化,獲得此類型的一個通用的對象后,可以使用get( )方法和常量獲得日期和時間的一部分。,例如:Calendar now=Calender. getInstance( );int year=now.get(Calendar.YEAR);在JDK1.1之前,類 Date 有兩個其他的函數。它允許把日期解釋為年、月、日、小時、分鐘和秒值。它也允許格式化和解析日期字符串。不過,這些函數的API不易于實現(xiàn)國際化。從JDK1.1開始,應該使用Calendar類實現(xiàn)日期和時間字段之間的轉換,使用DateFormat類來格式化和解析日期字符串。Date中的相應方法已廢棄。,GregorianCalendar類是由Calendar類派生的。由于所使用的規(guī)則不同,不同的日歷系統(tǒng)對同一個日期的解釋有所不同,而GregorianCalendar實現(xiàn)了世界上普遍使用的公歷系統(tǒng)。當然也可以通過繼承Calendar類,并增加所需規(guī)則,以實現(xiàn)不同的日歷系統(tǒng)。,2C

溫馨提示

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

評論

0/150

提交評論