新聞中心
怎么用visio畫Java代碼中類之間的關(guān)系圖
怎么用visio畫Java代碼中類之間的關(guān)系圖
創(chuàng)新互聯(lián)建站是專業(yè)的天河網(wǎng)站建設(shè)公司,天河接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行天河網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
依賴 --- 兩個事物間的語義關(guān)系,對于兩個對象X、Y,如果對象X發(fā)生變化,可能會引起對另一個對象Y的變化,則稱Y依賴于X。
關(guān)聯(lián) --- 是一種結(jié)構(gòu)關(guān)系,指一種對象和另一種對象有聯(lián)系。給定關(guān)聯(lián)的兩個類,可以從其中的一個類的對象訪問到另一個類的相關(guān)對象。
泛化 --- 一般/特殊關(guān)系
關(guān)于JAVA內(nèi)庫的基礎(chǔ)知識
我提供一個java.util類庫,其他的自己去找找吧
java.util包
本章介紹Java的實用工具類庫java.util包。在這個包中,Java提供了一些實用的方法和數(shù)據(jù)結(jié)構(gòu)。例如,Java提供日期(Data)類、日歷(Calendar)類來產(chǎn)生和獲取日期及時間,提供隨機(jī)數(shù)(Random)類產(chǎn)生各種類型的隨機(jī)數(shù),還提供了堆棧(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等類來表示相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。
圖1.1給出了java.util包的基本層次結(jié)構(gòu)圖。下面我們將具體介紹其中幾個重要的類。
┌java.util.BitSet
│java.util.Calendar
│ └java.util.GregorianCalendar
│java.util.Date
│java.util.Dictionary
│ └java.util.Hashtable
│ └java.util.Properties
│java.util.EventObject
│java.util.ResourceBundle
┌普通類┤ ├java.util.ListResourceBundle
│ │ └java.util.PropertyResourceBundle
│ │java.util.Local
│ │java.util.Observable
│ │java.util.Random
│ │java.util.StringTokenizer
│ │java.util.Vector
│ │ └java.util.Stack
Java.util┤ └java.util.TimeZone
│ └java.util.SimpleTimeZone
│ ┌java.util.Enumeration
├接 口┤java.util.EventListener
│ └java.util.Observer
│ ┌java.util.EmptyStackException
└異常類┤java.util.MissingResourceException
│java.util.NoSuchElementException
└java.util.TooManyListenersException
圖1.1 java.util包的基本層次結(jié)構(gòu)
1.2 日期類Date
Java在日期類中封裝了有關(guān)日期和時間的信息,用戶可以通過調(diào)用相應(yīng)的方法來獲取系統(tǒng)時間或設(shè)置日期和時間。Date類中有很多方法在JDK1.0公布后已經(jīng)過時了,在8.3中我們將介紹JDK1.0中新加的用于替代Date的功能的其它類。
在日期類中共定義了六種構(gòu)造函數(shù)。
(1)public Date()
創(chuàng)建的日期類對象的日期時間被設(shè)置成創(chuàng)建時刻相對應(yīng)的日期時間。
例 Date today=new Date();//today被設(shè)置成創(chuàng)建時刻相對應(yīng)的日期時間。
(2)public Date (long date)
long 型的參數(shù)date可以通過調(diào)用Date類中的static方法parse(String s)來獲得。
例 long l=Date.parse("Mon 6 Jan 1997 13:3:00");
Date day=new Date(l);
//day中時間為1997年 1月6號星期一,13:3:00。
(3)public Date(String s)
按字符串s產(chǎn)生一日期對象。s的格式與方法parse中字符串參數(shù)的模式相同。
例 Date day=new Date("Mon 6 Jan 1997 13:3:00");
//day 中時間為1997年1月6號星期一,13:3:00.
(4)public Date(int year,int month,int date)
(5)public Date(int year,int month,int date,int hrs,int min)
(6)public Date(int year,int month,int date,int hrs,int min,int sec)
按給定的參數(shù)創(chuàng)建一日期對象。
參數(shù)說明:
year的值為:需設(shè)定的年份-1900。例如需設(shè)定的年份是1997則year的值應(yīng)為97,即1997-1900的結(jié)果。所以Date中可設(shè)定的年份最小為1900;
month的值域為0~11,0代表1月,11表代表12月;
date的值域在1~31之間;
hrs的值域在0~23之間。從午夜到次日凌晨1點間hrs=0,從中午到下午1點間hrs=12;
min和sec的值域在0~59之間。
例 Date day=new Date(11,3,4);
//day中的時間為:04-Apr-11 12:00:00 AM
另外,還可以給出不正確的參數(shù)。
例 設(shè)定時間為1910年2月30日,它將被解釋成3月2日。
Date day=new Date(10,1,30,10,12,34);
System.out.println("Day's date is:"+day);
//打印結(jié)果為:Day's date is:Web Mar 02 10:13:34 GMT+08:00 1910
下面我們給出一些Date類中常用方法。
(1)public static long UTC(int year,int month,int date,int hrs. int min,int sec)
該方法將利用給定參數(shù)計算UTC值。UTC是一種計時體制,與GMT(格林威治時間)的計時體系略有差別。UTC計時體系是基于原子時鐘的,而GTMT計時體系是基于天文學(xué)觀測的。計算中使用的一般為GMT計時體系。
(2)public static long parse(String s)
該方法將字符串s轉(zhuǎn)換成一個long型的日期。在介紹構(gòu)造方法Date(long date)時曾使用過這個方法。
字符串s有一定的格式,一般為:
(星期 日 年 時間GMT+時區(qū))
若不注明時區(qū),則為本地時區(qū)。
(3)public void setMonth(int month)
(4)public int getMonth()
這兩個方法分別為設(shè)定和獲取月份值。
獲取的月份的值域為0~11,0代表1月,11代表12月。
(5)public String toString()
(6)public String toLocalString()
(7)public String toGMTString()
將給定日期對象轉(zhuǎn)換成不同格式的字符串。它們對應(yīng)的具體的格式可參看例子8.1。
(8)public int getTimezoneOffset()
該方法用于獲取日期對象的時區(qū)偏移量。
例8.1中對上面介紹的Date類中的基本方法進(jìn)行了具體的應(yīng)用,并打印了相應(yīng)的結(jié)果。由于使用了一些過時的方法,所以編譯時會有警告信息。另外,由于本例中的時間表示與平臺有關(guān),不同的JDK版本對此處理不完全相同,因此不同版本的JDK執(zhí)行本例的結(jié)果可能有細(xì)微差異。
例1.1 DateApp.java
import java.lang.System;
import java.util.Date;
public class DateApp{
public static void main(String args[]){
Date today=new Date();
//today中的日期被設(shè)成創(chuàng)建時刻的日期和時間,假設(shè)創(chuàng)建時刻為1997年3月
//23日17時51分54秒。
System.out.println("Today's date is "+today);
//返回一般的時間表示法,本例中結(jié)果為
//Today's date is Fri May 23 17:51:54 1997
System.out.println("Today's date(Internet GMT)is:"
+today.toGMTString());
//返回結(jié)果為GMT時間表示法,本例中結(jié)果為
//Today's date(Internet GMT)is: 23 May 1997 09:51:54:GMT
System.out.println("Today's date(Locale) is:"
+today.toLocaleString());
//返回結(jié)果為本地習(xí)慣的時間表示法,結(jié)果為
//Today's date(Locale)is:05/23/97 17:51:54
System.out.println("Today's year is: "+today.getYear());
System.out.println("Today's month is: "+(today.getMonth()+1));
System.out.println("Today's date is: "+today.getDate());
//調(diào)用Date類中方法,獲取年月日的值。
//下面調(diào)用了不同的構(gòu)造方法來創(chuàng)建Date類的對象。
Date day1=new Date(100,1,23,10,12,34);
System.out.println("Day1's date is: "+day1);
Date day2=new Date("Sat 12 Aug 1996 13:3:00");
System.out.println("Day2's date is: "+day2);
long l= Date.parse("Sat 5 Aug 1996 13:3:00 GMT+0800");
Date day3= new Date(l);
System.out.println("Day3's date(GMT)is: "+day3.toGMTString());
System.out.println("Day3's date(Locale)is: "
+day3.toLocaleString());
System.out.println("Day3's time zone offset is:"
+day3.getTimezoneOffset());
}
}
運行結(jié)果(JDK1.3版,與原文不同,原文是JDK1.0版):
E:\java\tutorial\java01java DateApp
Today's date is Thu Dec 27 17:58:16 CST 2001
Today's date(Internet GMT)is:27 Dec 2001 09:58:16 GMT
Today's date(Locale) is:2001-12-27 17:58:16
Today's year is: 101
Today's month is: 12
Today's date is: 27
Day1's date is: Wed Feb 23 10:12:34 CST 2000
Day2's date is: Fri Aug 12 13:03:00 CST 1996
Day3's date(GMT)is: 5 Aug 1996 05:03:00 GMT
Day3's date(Locale)is: 1996-8-5 13:03:00
Day3's time zone offset is:-480
E:\java\tutorial\java01
1.3 日歷類Calendar
在早期的JDK版本中,日期(Date)類附有兩大功能:(1)允許用年、月、日、時、分、秒來解釋日期:(2)允許對表示日期的字符串進(jìn)行格式化和句法分析。在JDK1.1中提供了類Calendar來完成第一種功能,類DateFormat來完成第二項功能。dateFormat是java.text包中的一個類。與Date類有所不同的是,DateFormat類接受用各種語言和不同習(xí)慣表示的日期字符串。本節(jié)將介紹java.util包中的類Calendar及其它新增加的相關(guān)的類。
類Calendar是一個抽象類,它完成日期(Date)類和普通日期表示法(即用一組整型域如YEAR,MONTH,DAY,HOUR表示日期)之間的轉(zhuǎn)換。
由于所使用的規(guī)則不同,不同的日歷系統(tǒng)對同一個日期的解釋有所不同。在JDK1.1中提供了Calendar類一個子類GregorianCalendar??它實現(xiàn)了世界上普遍使用的公歷系統(tǒng)。當(dāng)然用戶也可以通過繼承Calendar類,并增加所需規(guī)則,以實現(xiàn)不同的日歷系統(tǒng)。
第GregorianCalendar繼承了Calendar類。本節(jié)將在介紹類GregorianCalendar的同時順帶介紹Calendar類中的相關(guān)方法。
類GregorianCalendar提供了七種構(gòu)造函數(shù):
(1)public GregorianCalendar()
創(chuàng)建的對象中的相關(guān)值被設(shè)置成指定時區(qū),缺省地點的當(dāng)前時間,即程序運行時所處的時區(qū)、地點的當(dāng)前時間。
(2)public GregorianCalendar(TimeZone zone)
創(chuàng)建的對象中的相關(guān)值被設(shè)置成指定時區(qū)zone,缺省地點的當(dāng)前時間。
(3)public GregorianCalendar(Locale aLocale)
創(chuàng)建的對象中的相關(guān)值被設(shè)置成缺省時區(qū),指定地點aLocale的當(dāng)前時間。
(4)public GregorianCalendar(TimeZone zone,Local aLocale)
創(chuàng)建的對象中的相關(guān)值被設(shè)置成指定時區(qū),指定地點的當(dāng)前時間。
上面使用到的類TimeZone的性質(zhì)如下:
TimeZone是java.util包中的一個類,其中封裝了有關(guān)時區(qū)的信息。每一個時區(qū)對應(yīng)一組ID。類TimeZone提供了一些方法完成時區(qū)與對應(yīng)ID兩者之間的轉(zhuǎn)換。
(Ⅰ)已知某個特定的ID,可以調(diào)用方法
public static synchronized TimeZone getTimeZone(String ID)
來獲取對應(yīng)的時區(qū)對象。
例 太平洋時區(qū)的ID為PST,用下面的方法可獲取對應(yīng)于太平洋時區(qū)的時區(qū)對象:
TimeZone tz=TimeZone.getTimeZone("PST");
調(diào)用方法getDefault()可以獲取主機(jī)所處時區(qū)的對象。
TimeZone tz=TimeZone.getDefault();
(Ⅱ)調(diào)用以下方法可以獲取時區(qū)的ID
■public static synchronized String[] getavailableIDs(int rawOffset)
根據(jù)給定時區(qū)偏移值獲取ID數(shù)組。同一時區(qū)的不同地區(qū)的ID可能不同,這是由于不同地區(qū)對是否實施夏時制意見不統(tǒng)一而造成的。
例String s[]=TimeZone.getAvailableIDs(-7*60*60*1000);
打印s,結(jié)果為s[0]=PNT,s[1]=MST
■public static synchronized String[] getAvailableIDs()
獲取提供的所有支持的ID。
■public String getID()
獲取特定時區(qū)對象的ID。
例 TimeZone tz=TimeZone.getDefault();
String s=tz.getID();
打印s,結(jié)果為s=CTT。
上面使用類的對象代表了一個特定的地理、政治或文化區(qū)域。Locale只是一種機(jī)制,它用來標(biāo)識一類對象,Local本身并不包含此類對象。
要獲取一個Locale的對象有兩種方法:
(Ⅰ)調(diào)用Locale類的構(gòu)造方法
Locale(String language,String country)
Locale(String language,String country,String variant)
參數(shù)說明:language??在ISO-639中定義的代碼,由兩個小寫字母組成。
country??在ISO-3166中定義的代碼,由兩個大寫字母組成。
variant??售貨商以及特定瀏覽器的代碼,例如使用WIN代表Windows。
(Ⅱ)調(diào)用Locale類中定義的常量
Local類提供了大量的常量供用戶創(chuàng)建Locale對象。
例 Locale.CHINA
為中國創(chuàng)建一個Locale的對象。
類TimeZone和類Locale中的其它方法,讀者可查閱API。
(5)public GregorianCalendar(int year,int month,int date)
(6)public GregorianCalendar(int year,int month,int date,int hour,int minute)
(7)public GregorianCalendar(int year,int month,int date,int hour,int minute,int second)
用給定的日期和時間創(chuàng)建一個GregorianCalendar的對象。
參數(shù)說明:
year-設(shè)定日歷對象的變量YEAR;month-設(shè)定日歷對象的變量MONTH;
date-設(shè)定日歷對象的變量DATE;hour-設(shè)定日歷對象的變量HOUR_OF_DAY;
minute-設(shè)定日歷對象的變量MINUTE;second-設(shè)定日歷對象的變量SECOND。
與Date類中不同的是year的值沒有1900這個下限,而且year的值代表實際的年份。month的含義與Date類相同,0代表1月,11代表12月。
例 GregorianCalendar cal=new GregorianCalendar(1991,2,4)
cal的日期為1991年3月4號。
除了與Date中類似的方法外,Calendar類還提供了有關(guān)方法對日歷進(jìn)行滾動計算和數(shù)學(xué)計算。計算規(guī)則由給定的日歷系統(tǒng)決定。進(jìn)行日期計算時,有時會遇到信息不足或信息不實等特殊情況。Calendar采取了相應(yīng)的方法解決這些問題。當(dāng)信息不足時將采用缺省設(shè)置,在GregorianCalendar類中缺省設(shè)置一般為YEAR=1970,MONTH=JANUARY,DATE=1。
當(dāng)信息不實時,Calendar將按下面的次序優(yōu)先選擇相應(yīng)的Calendar的變量組合,并將其它有沖突的信息丟棄。
MONTH+DAY_OF_MONTH
MONTH+WEEK_OF_MONTH+DAY_OF_WEEK
MONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEK
DAY_OF+YEAR
DAY_OF_WEEK_WEEK_OF_YEAR
HOUR_OF_DAY
1.4 隨機(jī)數(shù)類Random
Java實用工具類庫中的類java.util.Random提供了產(chǎn)生各種類型隨機(jī)數(shù)的方法。它可以產(chǎn)生int、long、float、double以及Goussian等類型的隨機(jī)數(shù)。這也是它與java.lang.Math中的方法Random()最大的不同之處,后者只產(chǎn)生double型的隨機(jī)數(shù)。
類Random中的方法十分簡單,它只有兩個構(gòu)造方法和六個普通方法。
構(gòu)造方法:
(1)public Random()
(2)public Random(long seed)
Java產(chǎn)生隨機(jī)數(shù)需要有一個基值seed,在第一種方法中基值缺省,則將系統(tǒng)時間作為seed。
普通方法:
(1)public synonronized void setSeed(long seed)
該方法是設(shè)定基值seed。
(2)public int nextInt()
該方法是產(chǎn)生一個整型隨機(jī)數(shù)。
(3)public long nextLong()
該方法是產(chǎn)生一個long型隨機(jī)數(shù)。
(4)public float nextFloat()
該方法是產(chǎn)生一個Float型隨機(jī)數(shù)。
(5)public double nextDouble()
該方法是產(chǎn)生一個Double型隨機(jī)數(shù)。
(6)public synchronized double nextGoussian()
該方法是產(chǎn)生一個double型的Goussian隨機(jī)數(shù)。
例1.2 RandomApp.java。
//import java.lang.*;
import java.util.Random;
public class RandomApp{
public static void main(String args[]){
Random ran1=new Random();
Random ran2=new Random(12345);
//創(chuàng)建了兩個類Random的對象。
System.out.println("The 1st set of random numbers:");
System.out.println("\t Integer:"+ran1.nextInt());
System.out.println("\t Long:"+ran1.nextLong());
System.out.println("\t Float:"+ran1.nextFloat());
System.out.println("\t Double:"+ran1.nextDouble());
System.out.println("\t Gaussian:"+ran1.nextGaussian());
//產(chǎn)生各種類型的隨機(jī)數(shù)
System.out.print("The 2nd set of random numbers:");
for(int i=0;i5;i++){
System.out.println(ran2.nextInt()+" ");
if(i==2) System.out.println();
//產(chǎn)生同種類型的不同的隨機(jī)數(shù)。
System.out.println();//原文如此
}
}
}
運行結(jié)果:
E:\java01java RandomApp
The 1st set of random numbers:
Integer:-173899656
Long:8056223819738127077
Float:0.6293638
Double:0.7888394520265607
Gaussian:0.5015701094568733
The 2nd set of random numbers:1553932502
-2090749135
-287790814
-355989640
-716867186
E:\java01
1.5 向量類Vector
Java.util.Vector提供了向量(Vector)類以實現(xiàn)類似動態(tài)數(shù)組的功能。在Java語言中。正如在一開始就提到過,是沒有指針概念的,但如果能正確靈活地使用指針又確實可以大大提高程序的質(zhì)量,比如在C、C++中所謂“動態(tài)數(shù)組”一般都由指針來實現(xiàn)。為了彌補(bǔ)這點缺陷,Java提供了豐富的類庫來方便編程者使用,Vector類便是其中之一。事實上,靈活使用數(shù)組也可完成向量類的功能,但向量類中提供的大量方法大大方便了用戶的使用。
創(chuàng)建了一個向量類的對象后,可以往其中隨意地插入不同的類的對象,既不需顧及類型也不需預(yù)先選定向量的容量,并可方便地進(jìn)行查找。對于預(yù)先不知或不愿預(yù)先定義數(shù)組大小,并需頻繁進(jìn)行查找、插入和刪除工作的情況,可以考慮使用向量類。
向量類提供了三種構(gòu)造方法:
public vector()
public vector(int initialcapacity,int capacityIncrement)
public vector(int initialcapacity)
使用第一種方法,系統(tǒng)會自動對向量對象進(jìn)行管理。若使用后兩種方法,則系統(tǒng)將根據(jù)參數(shù)initialcapacity設(shè)定向量對象的容量(即向量對象可存儲數(shù)據(jù)的大小),當(dāng)真正存放的數(shù)據(jù)個數(shù)超過容量時,系統(tǒng)會擴(kuò)充向量對象的存儲容量。參數(shù)capacityIncrement給定了每次擴(kuò)充的擴(kuò)充值。當(dāng)capacityIncrement為0時,則每次擴(kuò)充一倍。利用這個功能可以優(yōu)化存儲。
在Vector類中提供了各種方法方便用戶使用:
■插入功能
(1)public final synchronized void addElement(Object obj)
將obj插入向量的尾部。obj可以是任何類的對象。對同一個向量對象,可在其中插入不同類的對象。但插入的應(yīng)是對象而不是數(shù)值,所以插入數(shù)值時要注意將數(shù)值轉(zhuǎn)換成相應(yīng)的對象。
例 要插入一個整數(shù)1時,不要直接調(diào)用v1.addElement(1),正確的方法為:
Vector v1=new Vector();
Integer integer1=new Integer(1);
v1.addElement(integer1);
(2)public final synchronized void setElementAt(object obj,int index)
將index處的對象設(shè)成obj,原來的對象將被覆蓋。
(3)public final synchronized void insertElementAt(Object obj,int index)
在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。
■刪除功能
(1)public final synchronized void removeElement(Object obj)
從向量中刪除obj。若有多個存在,則從向量頭開始試,刪除找到的第一個與obj相同的向量成員。
(2)public final synchronized void removeAllElement()
刪除向量中所有的對象。
(3)public final synchronized void removeElementlAt(int index)
刪除index所指的地方的對象。
■查詢搜索功能
(1)public final int indexOf(Object obj)
從向量頭開始搜索obj ,返回所遇到的第一個obj對應(yīng)的下標(biāo),若不存在此obj,返回-1。
(2)public final synchronized int indexOf(Object obj,int index)
從index所表示的下標(biāo)處開始搜索obj。
(3)public final int lastIndexOf(Object obj)
從向量尾部開始逆向搜索obj。
(4)public final synchronized int lastIndexOf(Object obj,int index)
從index所表示的下標(biāo)處由尾至頭逆向搜索obj。
(5)public final synchronized Object firstElement()
獲取向量對象中的首個obj。
(6)public final synchronized Object lastelement()
獲取向量對象中的最后一個obj。
了解了向量的最基本的方法后,我們來看一下例8.3VectorApp.java。
例1.3 VectorApp.java。
import java.util.Vector;
import java.lang.*;//這一句不應(yīng)該要,但原文如此
import java.util.Enumeration;
public class VectorApp{
public static void main(String[] args){
Vector v1=new Vector();
Integer integer1=new Integer(1);
v1.addElement("one");
//加入的為字符串對象
v1.addElement(integer1);
v1.addElement(integer1);
//加入的為Integer的對象
v1.addElement("two");
v1.addElement(new Integer(2));
v1.addElement(integer1);
v1.addElement(integer1);
System.out.println("The vector v1 is:\n\t"+v1);
//將v1轉(zhuǎn)換成字符串并打印
v1.insertElementAt("three",2);
v1.insertElementAt(new Float(3.9),3);
System.out.println("The vector v1(used method insertElementAt()) is:\n\t "+v1);
//往指定位置插入新的對象,指定位置后的對象依次往后順延
v1.setElementAt("four",2);
System.out.println("The vector v1(used method setElementAt()) is:\n\t "+v1);
//將指定位置的對象設(shè)置為新的對象
v1.removeElement(integer1);
//從向量對象v1中刪除對象integer1由于存在多個integer1所以從頭開始
//找,刪除找到的第一個integer1
Enumeration enum=v1.elements();
System.out.print("The vector v1(used method removeElement())is:");
while(enum.hasMoreElements())
System.out.print(enum.nextElement()+" ");
System.out.println();
//使用枚舉類(Enumeration)的方法來獲取向量對象的每個元素
System.out.println("The position of object 1(top-to-bottom):"
+ v1.indexOf(integer1));
System.out.println("The position of object 1(tottom-to-top):"
+v1.lastIndexOf(integer1));
//按不同的方向查找對象integer1所處的位置
v1.setSize(4);
System.out.println("The new vector(resized the vector)is:"+v1);
//重新設(shè)置v1的大小,多余的元素被行棄
}
}
運行結(jié)果:
E:\java01java VectorApp
The vector v1 is:
[one, 1, 1, two, 2, 1, 1]
The vector v1(used method insertElementAt()) is:
[one, 1, three, 3.9, 1, two, 2, 1, 1]
The vector v1(used method setElementAt()) is:
[one, 1, four, 3.9, 1, two, 2, 1, 1]
The vector v1(used method removeElement())is:one four 3.9 1 two 2 1 1
The position of object 1(top-to-bottom):3
The position of object 1(tottom-to-top):7
The new vector(resized the vector)is:[one, four, 3.9, 1]
E:\java01
從例1.3運行的結(jié)果中可以清楚地了解上面各種方法的作用,另外還有幾點需解釋。
(1)類Vector定義了方法
public final int size()
此方法用于獲取向量元素的個數(shù)。它的返回值是向是中實際存在的元素個數(shù),而非向量容量。可以調(diào)用方法capactly()來獲取容量值。
方法:
public final synchronized void setsize(int newsize)
此方法用來定義向量大小。若向量對象現(xiàn)有成員個數(shù)已超過了newsize的值,則超過部分的多余元素會丟失。
(2)程序中定義了Enumeration類的一個對象
Enumeration是java.util中的一個接口類,在Enumeration中封裝了有關(guān)枚舉數(shù)據(jù)集合的方法。
在Enumeration中提供了方法hawMoreElement()來判斷集合中是束還有其它元素和方法nextElement()來獲取下一個元素。利用這兩個方法可以依次獲得集合中元素。
Vector中提供方法:
public final synchronized Enumeration elements()
此方法將向量對象對應(yīng)到一個枚舉類型。java.util包中的其它類中也大都有這類方法,以便于用戶獲取對應(yīng)的枚舉類型。
1.6 棧類Stack
Stack類是Vector類的子類。它向用戶提供了堆棧這種高級的數(shù)據(jù)結(jié)構(gòu)。棧的基本特性就是先進(jìn)后出。即先放入棧中的元素將后被推出。Stack類中提供了相應(yīng)方法完成棧的有關(guān)操作。
基本方法:
public Object push(Object Hem)
將Hem壓入棧中,Hem可以是任何類的對象。
public Object pop()
彈出一個對象。
public Object peek()
返回棧頂元素,但不彈出此元素。
public int search(Object obj)
搜索對象obj,返回它所處的位置。
public boolean empty()
判別棧是否為空。
例1.4 StackApp.java使用了上面的各種方法。
例1.4 StackApp.java。
import java.lang.*;
import java.util.*;
public class StackApp{
public static void main(String args[]){
Stack sta=new Stack();
sta.push("Apple");
sta.push("banana");
sta.push("Cherry");
//壓入的為字符串對象
sta.push(new Integer(2));
//壓入的為Integer的對
介紹下Java程序的結(jié)構(gòu)
Java語言是面向?qū)ο蟮某绦蛟O(shè)計語言,Java程序的基本組成單元是類,類體中又可包括屬性與方法兩部分。而每一個應(yīng)用程序都必須包含一個main()方法,含有main()方法的類稱之為主類。
一: Java程序的主類及其格式
作為一個可以獨立運行的Java程序,在它的眾多類中必須要有一個類作為程序的起始類,為了方便,本書把這個類稱為主類。當(dāng)需要執(zhí)行一個程序時,人們在java命令后面輸入的便是這個主類的文件名(也是主類名),因此主類文件是Java運行環(huán)境建立起來之后第一個被裝入虛擬機(jī)的用戶文件。為了使虛擬機(jī)可以找到程序運行的起始入口,主類必須為public類,并含有一個在格式上符合約定的入口方法main(),其格式如下:
public static void main(String[] args){
…
}
其中各參數(shù)含義如下。
main:入口方法名稱。
args:命令行參數(shù),這是一個String對象數(shù)組。
static:修飾字,說明main()是一個靜態(tài)方法(類方法)。
public:修飾字,說明main()具有公有訪問屬性。
于是,主類框架的源代碼如下:
public class 主類名{
…
public static void main(String[] args){
…
}
}
Java程序的主類常常使熟悉C/C++的讀者感到迷惑:main()方法不就相當(dāng)于C/C++程序中的主函數(shù)嗎,為什么非得把它放到一個類里,難道它有什么不同嗎?
沒錯,Java類中main()方法就相當(dāng)于C/C++程序中的主函數(shù),是一個入口函數(shù)。之所以把它封裝到一個類里,而不像C/C++那樣單獨作為一個函數(shù)來處理,就本書作者的理解,大概Java的設(shè)計者們有如下幾個方面的考慮。
1)Java既然把所有事物都看成了對象,那么就沒有理由不把程序也看成對象,因為程序也是一種事物。既然是對象,那么它就應(yīng)該屬于某個類并以程序名來命名。既然程序是一種類,那么main()就應(yīng)該是這個類的一個方法,只不過它有些特殊,它是一個入口方法,并且對它有些特殊規(guī)定,例如其名稱必須為main(),必須是公有靜態(tài)方法,有命令行參數(shù)等。
2)如果把程序封裝成了類,那么包括本程序在內(nèi)的任何程序就都可以根據(jù)需要,隨時創(chuàng)建這個類的對象,并通過該對象使用這個類中的資源,這樣就便于資源共享,從而提高程序的靈活性。
3)Java程序是一種以類為基本單位的模塊化程序,程序被編譯后,每一個類會對應(yīng)生成一個二進(jìn)制字節(jié)碼類文件。如果把程序也封裝成類,那么它的文件就與其他類文件統(tǒng)一起來,而不會產(chǎn)生其他類型的文件,因而便于管理。
4)之所以把入口方法封裝到類中,其根本目的就是要盡可能平等地看待所有的類。因為Java的最終目的是要以類為基本模塊來實現(xiàn)可裝配軟件,如果把main()方法封裝到了一個類中,那么就意味著main()與類的其他方法沒什么本質(zhì)區(qū)別,只不過是分工不同而已。下面很快就會看到,Java的所有類都可以含有一個入口方法而成為主類。也就是說,在Java程序中根本就沒有主類、次類之分,這里之所以把帶有main()方法的類稱為主類,是為了表達(dá)方便。
二: JAVA源程序在命令行下的運行
class?Bank{
public?void?init(){
System.out.println("Yes,I?can");
}
public?static?void?main(String?args[]){
BankAccount?ba1?=?new?BankAccount(100.00);
System.out.print("Before?transactions,?");
ba1.display();
ba1.deposit(74.35);
ba1.withdraw(20.00);
System.out.print("After?transactions,?");
ba1.display();
Bank?b?=?new?Bank();
b.init();
}
}
class?BankAccount{
private?double?balance;
public?BankAccount(double?openingBalance){
balance?=?openingBalance;
}
public?void?deposit(double?amount){
balance?+=?amount;
}
public?void?withdraw(double?amount){
balance?-=?amount;
}
public?void?display(){
System.out.println("balance?=?"?+?balance);
}
}
三:完整的java源程序應(yīng)該包括下列部分
package語句;
import語句;
public classDefinition; // 公共的類定義部分,至多只有一個公共類的定義
// java語言規(guī)定該java源程序的文件名必須與該公共類名完全一致
classDefinition; // 類定義部分,可以有0個或多個
interfaceDefinition; // 接口定義部分,可以有0個或多個
package:java編譯器為每個類生成一個字節(jié)碼文件,且文件名與類名相同,這就會帶來一個問題:同名的類會發(fā)生沖突。package便可管理類命名空間。
一般地,具有相同功能的類放在一個package中。
一個java源程序至多只能有一個公共類的定義。
若java源程序有一個公共類的定義,則該源文件名字必須與該公共類的名字完全相同。
若源程序中不包含公共類的定義,則該文件名可以任意取名。
若一個源程序中有多個類定義,則在編譯時將為每個類生成一個。class文件。
三。java編程規(guī)范
包名:全小寫的名詞,中間可由點分割,eg:java.awt.event
類名:首字母大寫,多個單詞合成,每個單詞首字母也要大寫,eg: class HelloWorldApp
接口名: 同類名,eg: interface Collection
方法名: 由多個單詞合成,第一個單詞通常為動詞,首字母小寫,中間的每個單詞的首字母都要大寫,eg: balanceAccount, isButtonPressed
變量名: 全小寫,一般為名詞,eg: length
常量名: 基本數(shù)據(jù)類型的常量名為全大寫,如果由多個單詞構(gòu)成,可以用下劃線隔開,eg: int YEAR, int WEEK_OF_MONTH
對象類型的常量,則是小寫混合,由大寫字母把單詞隔開
在java中為什么要使用類圖
其實也不是一定要使用類圖的,使用類圖就是為了讓你清楚的理解類之間的關(guān)系,比如A類繼承了B類,同時又實現(xiàn)了C接口,等等這樣的關(guān)系用類圖來表示的話一目了然。
使用類圖還有一個好處,就是在軟件工程中講的一個軟件開發(fā)的“詳細(xì)設(shè)計”階段,用類圖表示出系統(tǒng)的結(jié)構(gòu)后好多工具支持自動生成代碼,就是從類圖直接生成代碼的基本結(jié)構(gòu),自己只要在生成的代碼中加入具體的業(yè)務(wù)邏輯就可以了,這樣比較方便。
網(wǎng)頁名稱:介紹java代碼結(jié)構(gòu)的圖 java 圖結(jié)構(gòu)
轉(zhuǎn)載來于:http://ef60e0e.cn/article/hehhii.html