收藏 分享(赏)

传说中的java葵花宝典.doc

上传人:gnk289057 文档编号:6211665 上传时间:2019-04-02 格式:DOC 页数:296 大小:1.27MB
下载 相关 举报
传说中的java葵花宝典.doc_第1页
第1页 / 共296页
传说中的java葵花宝典.doc_第2页
第2页 / 共296页
传说中的java葵花宝典.doc_第3页
第3页 / 共296页
传说中的java葵花宝典.doc_第4页
第4页 / 共296页
传说中的java葵花宝典.doc_第5页
第5页 / 共296页
点击查看更多>>
资源描述

1、JAVA 精华1 JAVA SE1.1 深入 JAVA API1.1.1 Lang 包1.1.1.1 String 类和 StringBuffer 类位于 java.lang 包中,这个包中的类使用时不用导入String 类一旦初始化就不可以改变,而 stringbuffer 则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成 string 字符串。String x=”a”+4+”c”编译时等效于 String x=new StringBuffer().append(“a”).append(4).append(“c”).toString();字符串常量是一种特殊的匿名对象

2、,String s1=”hello”;String s2=”hello”;则 s1=s2;因为他们指向同一个匿名对象。如果 String s1=new String(“hello”);String s2=new String(“hello”);则 s1!=s2;/*逐行读取键盘输入,直到输入为“bye”时,结束程序注:对于回车换行,在 windows 下面,有r和n两个,而 unix 下面只有n,但是写程序的时候都要把他区分开*/public class readlinepublic static void main(String args)String strInfo=null;int po

3、s=0;byte buf=new byte1024;/定义一个数组,存放换行前的各个字符int ch=0; /存放读入的字符system.out.println(“Please input a string:”);while(true)trych=System.in.read(); /该方法每次读入一个字节的内容到 ch 变量中。catch(Exception e)switch(ch)case r: /回车时,不进行处理break;case n: /换行时,将数组总的内容放进字符串中strInfo=new String(buf,0,pos); /该方法将数组中从第 0 个开始,到第 pos 个

4、结束存入字符串。if(strInfo.equals(“bye“) /如果该字符串内容为 bye,则退出程序。return;else /如果不为 bye,则输出,并且竟 pos 置为 0,准备下次存入。System.out.println(strInfo);pos=0;break;default:bufpos+=(byte)ch; /如果不是回车,换行,则将读取的数据存入数组中。String 类的常用成员方法1、 构造方法:String(byte byte,int offset,int length);这个在上面已经用到。2、 equalsIgnoreCase:忽略大小写的比较,上例中如果您输入

5、的是 BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。3、 indexOf(int ch);返回字符 ch 在字符串中首次出现的位置4、 substring(int benginIndex);5、 substring(int beginIndex,int endIndex);返回字符串的子字符串,4 返回从 benginindex 位置开始到结束的子字符串,5 返回 beginindex 和 endindex-1 之间的子字符串。基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如 vector 的 add 方法

6、,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给 main()方法的参数指定。public class testIntegerpublic static void main(String args)/main()的参数是 string 类型的数组,用来做为长,宽时,要转换成整型。int w=new Integer(args0).intValue();int h=Integer.parseInt(args1);/int h=Integer.valueOf(args1).intValue();/以上为三种将字符

7、串转换成整形的方法。for(int i=0;ijava DateAppTodays date is Thu Dec 27 17:58:16 CST 2001Todays date(Internet GMT)is:27 Dec 2001 09:58:16 GMTTodays date(Locale) is:2001-12-27 17:58:16Todays year is: 101Todays month is: 12Todays date is: 27Day1s date is: Wed Feb 23 10:12:34 CST 2000Day2s date is: Fri Aug 12 13:

8、03:00 CST 1996Day3s date(GMT)is: 5 Aug 1996 05:03:00 GMTDay3s date(Locale)is: 1996-8-5 13:03:00Day3s time zone offset is:-480E:javatutorialjava011.1.2.1.2 日历类 Calendar在早期的 JDK 版本中,日期(Date)类附有两大功能:(1)允许用年、月、日、时、分、秒来解释日期:(2)允许对表示日期的字符串进行格式化和句法分析。在 JDK1.1 中提供了类 Calendar 来完成第一种功能,类 DateFormat 来完成第二项功能。d

9、ateFormat 是 java.text 包中的一个类。与 Date 类有所不同的是,DateFormat 类接受用各种语言和不同习惯表示的日期字符串。本节将介绍 java.util 包中的类 Calendar 及其它新增加的相关的类。类 Calendar 是一个抽象类,它完成日期 (Date)类和普通日期表示法 (即用一组整型域如YEAR,MONTH,DAY,HOUR 表示日期) 之间的转换。由于所使用的规则不同,不同的日历系统对同一个日期的解释有所不同。在 JDK1.1 中提供了Calendar 类一个子类 GregorianCalendar?它实现了世界上普遍使用的公历系统。当然用户也

10、可以通过继承Calendar 类,并增加所需规则,以实现不同的日历系统。第 GregorianCalendar 继承了 Calendar 类。本节将在介绍类 GregorianCalendar 的同时顺带介绍Calendar 类中的相关方法。类 GregorianCalendar 提供了七种构造函数:(1)public GregorianCalendar()创建的对象中的相关值被设置成指定时区,缺省地点的当前时间,即程序运行时所处的时区、地点的当前时间。(2)public GregorianCalendar(TimeZone zone)创建的对象中的相关值被设置成指定时区 zone,缺省地点的

11、当前时间。(3)public GregorianCalendar(Locale aLocale)创建的对象中的相关值被设置成缺省时区,指定地点 aLocale 的当前时间。(4)public GregorianCalendar(TimeZone zone,Local aLocale)创建的对象中的相关值被设置成指定时区,指定地点的当前时间。上面使用到的类 TimeZone 的性质如下:TimeZone 是 java.util 包中的一个类,其中封装了有关时区的信息。每一个时区对应一组 ID。类TimeZone 提供了一些方法完成时区与对应 ID 两者之间的转换。()已知某个特定的 ID,可以调

12、用方法public static synchronized TimeZone getTimeZone(String ID)来获取对应的时区对象。例 太平洋时区的 ID 为 PST,用下面的方法可获取对应于太平洋时区的时区对象:TimeZone tz=TimeZone.getTimeZone(“PST“);调用方法 getDefault()可以获取主机所处时区的对象。TimeZone tz=TimeZone.getDefault();()调用以下方法可以获取时区的 IDpublic static synchronized String getavailableIDs(int rawOffset)

13、根据给定时区偏移值获取 ID 数组。同一时区的不同地区的 ID 可能不同,这是由于不同地区对是否实施夏时制意见不统一而造成的。例 String s=TimeZone.getAvailableIDs(-7*60*60*1000);打印 s,结果为 s0=PNT,s1=MSTpublic static synchronized String getAvailableIDs()获取提供的所有支持的 ID。public String getID()获取特定时区对象的 ID。例 TimeZone tz=TimeZone.getDefault();String s=tz.getID();打印 s,结果为

14、s=CTT。上面使用类的对象代表了一个特定的地理、政治或文化区域。Locale 只是一种机制,它用来标识一类对象,Local 本身并不包含此类对象。要获取一个 Locale 的对象有两种方法:()调用 Locale 类的构造方法Locale(String language,String country)Locale(String language,String country,String variant)参数说明:language?在 ISO-639 中定义的代码,由两个小写字母组成。country?在 ISO-3166 中定义的代码,由两个大写字母组成。variant? 售货商以及特定浏览

15、器的代码,例如使用 WIN 代表 Windows。()调用 Locale 类中定义的常量Local 类提供了大量的常量供用户创建 Locale 对象。例 Locale.CHINA为中国创建一个 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 GregorianCal

16、endar(int year,int month,int date,int hour,int minute,int second)用给定的日期和时间创建一个 GregorianCalendar 的对象。参数说明:year-设定日历对象的变量 YEAR;month-设定日历对象的变量 MONTH;date-设定日历对象的变量 DATE;hour-设定日历对象的变量 HOUR_OF_DAY;minute-设定日历对象的变量 MINUTE;second-设定日历对象的变量 SECOND。与 Date 类中不同的是 year 的值没有 1900 这个下限,而且 year 的值代表实际的年份。month

17、 的含义与Date 类相同,0 代表 1 月,11 代表 12 月。例 GregorianCalendar cal=new GregorianCalendar(1991,2,4)cal 的日期为 1991 年 3 月 4 号。除了与 Date 中类似的方法外,Calendar 类还提供了有关方法对日历进行滚动计算和数学计算。计算规则由给定的日历系统决定。进行日期计算时,有时会遇到信息不足或信息不实等特殊情况。Calendar 采取了相应的方法解决这些问题。当信息不足时将采用缺省设置,在 GregorianCalendar 类中缺省设置一般为 YEAR=1970,MONTH=JANUARY,DA

18、TE=1。当信息不实时,Calendar 将按下面的次序优先选择相应的 Calendar 的变量组合,并将其它有冲突的信息丢弃。MONTH+DAY_OF_MONTHMONTH+WEEK_OF_MONTH+DAY_OF_WEEKMONTH+DAY_OF_WEEK_OF_MONTH+DAY_OF_WEEKDAY_OF+YEARDAY_OF_WEEK_WEEK_OF_YEARHOUR_OF_DAY1.1.2.1.3 随机数类 RandomJava 实用工具类库中的类 java.util.Random 提供了产生各种类型随机数的方法。它可以产生int、 long、float、 double 以及 Go

19、ussian 等类型的随机数。这也是它与 java.lang.Math 中的方法 Random()最大的不同之处,后者只产生 double 型的随机数。类 Random 中的方法十分简单,它只有两个构造方法和六个普通方法。构造方法:(1)public Random()(2)public Random(long seed)Java 产生随机数需要有一个基值 seed,在第一种方法中基值缺省,则将系统时间作为 seed。普通方法:(1)public synonronized void setSeed(long seed)该方法是设定基值 seed。(2)public int nextInt()该方

20、法是产生一个整型随机数。(3)public long nextLong()该方法是产生一个 long 型随机数。(4)public float nextFloat()该方法是产生一个 Float 型随机数。(5)public double nextDouble()该方法是产生一个 Double 型随机数。(6)public synchronized double nextGoussian()该方法是产生一个 double 型的 Goussian 随机数。例 1.2 RandomApp.java。/import java.lang.*;import java.util.Random;public

21、 class RandomApppublic static void main(String args)Random ran1=new Random();Random ran2=new Random(12345);/创建了两个类 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:“

22、+ran1.nextFloat();System.out.println(“t Double:“+ran1.nextDouble();System.out.println(“t Gaussian:“+ran1.nextGaussian();/产生各种类型的随机数System.out.print(“The 2nd set of random numbers:“);for(int i=0;ijava RandomAppThe 1st set of random numbers:Integer:-173899656Long:8056223819738127077Float:0.6293638Doub

23、le:0.7888394520265607Gaussian:0.5015701094568733The 2nd set of random numbers:1553932502-2090749135-287790814-355989640-716867186E:java011.1.2.1.4 向量类 VectorJava.util.Vector 提供了向量 (Vector)类以实现类似动态数组的功能。在 Java 语言中。正如在一开始就提到过,是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C+中所谓 “动态数组”一般都由指针来实现。为了弥补这点缺陷,Jav

24、a 提供了丰富的类库来方便编程者使用,Vector 类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向量类中提供的大量方法大大方便了用户的使用。创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法:public vector()public vector(int initialcapacity,int capacityIncrement)public vector(int initialcapa

25、city)使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity 设定向量对象的容量( 即向量对象可存储数据的大小) ,当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。参数 capacityIncrement 给定了每次扩充的扩充值。当 capacityIncrement为 0 时,则每次扩充一倍。利用这个功能可以优化存储。在 Vector 类中提供了各种方法方便用户使用:插入功能(1)public final synchronized void addElement(Object obj)将 obj 插入向量的尾部。obj

26、 可以是任何类的对象。对同一个向量对象,可在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。例 要插入一个整数 1 时,不要直接调用 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 处的对象设成 obj,原来的对象将被覆盖。(3)public

27、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 synchroniz

28、ed void removeElementlAt(int index)删除 index 所指的地方的对象。查询搜索功能(1)public final int indexOf(Object obj)从向量头开始搜索 obj ,返回所遇到的第一个 obj 对应的下标,若不存在此 obj,返回-1。(2)public final synchronized int indexOf(Object obj,int index)从 index 所表示的下标处开始搜索 obj。(3)public final int lastIndexOf(Object obj)从向量尾部开始逆向搜索 obj。(4)publi

29、c final synchronized int lastIndexOf(Object obj,int index)从 index 所表示的下标处由尾至头逆向搜索 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.Vecto

30、r;import java.lang.*;/这一句不应该要,但原文如此import java.util.Enumeration;public class VectorApppublic 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.add

31、Element(new Integer(2);v1.addElement(integer1);v1.addElement(integer1);System.out.println(“The vector v1 is:nt“+v1);/将 v1 转换成字符串并打印v1.insertElementAt(“three“,2);v1.insertElementAt(new Float(3.9),3);System.out.println(“The vector v1(used method insertElementAt() is:nt “+v1);/往指定位置插入新的对象,指定位置后的对象依次往后顺

32、延v1.setElementAt(“four“,2);System.out.println(“The vector v1(used method setElementAt() is:nt “+v1);/将指定位置的对象设置为新的对象v1.removeElement(integer1);/从向量对象 v1 中删除对象 integer1 由于存在多个 integer1 所以从头开始/找,删除找到的第一个 integer1Enumeration enum=v1.elements();System.out.print(“The vector v1(used method removeElement()

33、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)

34、;/按不同的方向查找对象 integer1 所处的位置v1.setSize(4);System.out.println(“The new vector(resized the vector)is:“+v1);/重新设置 v1 的大小,多余的元素被行弃运行结果:E:java01java VectorAppThe vector v1 is:one, 1, 1, two, 2, 1, 1The vector v1(used method insertElementAt() is:one, 1, three, 3.9, 1, two, 2, 1, 1The vector v1(used method

35、setElementAt() is:one, 1, four, 3.9, 1, two, 2, 1, 1The vector v1(used method removeElement()is:one four 3.9 1 two 2 1 1The position of object 1(top-to-bottom):3The position of object 1(tottom-to-top):7The new vector(resized the vector)is:one, four, 3.9, 1E:java01从例 1.3 运行的结果中可以清楚地了解上面各种方法的作用,另外还有几点

36、需解释。(1)类 Vector 定义了方法public final int size()此方法用于获取向量元素的个数。它的返回值是向是中实际存在的元素个数,而非向量容量。可以调用方法 capactly()来获取容量值。方法:public final synchronized void setsize(int newsize)此方法用来定义向量大小。若向量对象现有成员个数已超过了 newsize 的值,则超过部分的多余元素会丢失。(2)程序中定义了 Enumeration 类的一个对象Enumeration 是 java.util 中的一个接口类,在 Enumeration 中封装了有关枚举数据

37、集合的方法。在 Enumeration 中提供了方法 hawMoreElement()来判断集合中是束还有其它元素和方法 nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。Vector 中提供方法:public final synchronized Enumeration elements()此方法将向量对象对应到一个枚举类型。java.util 包中的其它类中也大都有这类方法,以便于用户获取对应的枚举类型。1.1.2.1.5 栈类 StackStack 类是 Vector 类的子类。它向用户提供了堆栈这种高级的数据结构。栈的基本特性就是先进后出。即先放入栈中的

38、元素将后被推出。Stack 类中提供了相应方法完成栈的有关操作。基本方法: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.*

39、;import java.util.*;public class StackApppublic static void main(String args)Stack sta=new Stack();sta.push(“Apple“);sta.push(“banana“);sta.push(“Cherry“);/压入的为字符串对象sta.push(new Integer(2);/压入的为 Integer 的对象,值为 2sta.push(new Float(3.5);/压入的为 Float 的对象,值为 3.5System.out.println(“The stack is,“+sta);/对应

40、栈 staSystem.out.println(“The top of stack is:“+sta.peek();/对应栈顶元素,但不将此元素弹出System.out.println(“The position of object Cherry is:“+sta.search(“cherry“);/打印对象 Cherry 所处的位置System.out.print(“Pop the element of the stack:“);while(!sta.empty()System.out.print(sta.pop()+“ “);System.out.println();/将栈中的元素依次弹出

41、并打印。与第一次打印的 sta 的结果比较,可看出栈/先进后出的特点运行结果(略)1.1.2.1.6 哈希表类 Hashtable哈希表是一种重要的存储方式,也是一种常见的检索方法。其基本思想是将关系码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。检索时采用检索关键码的方法。现在哈希表有一套完整的算法来进行插入、删除和解决冲突。在 Java 中哈希表用于存储对象,实现快速检索。Java.util.Hashtable 提供了种方法让用户使用哈希表,而不需要考虑其哈希表真正如何工作。哈希表类中提供了三种构造方法,分

42、别是:public Hashtable()public Hashtable(int initialcapacity)public Hashtable(int initialCapacity,float loadFactor)参数 initialCapacity 是 Hashtable 的初始容量,它的值应大于 0。loadFactor 又称装载因子,是一个 0.0到 0.1 之间的 float 型的浮点数。它是一个百分比,表明了哈希表何时需要扩充,例如,有一哈希表,容量为 100,而装载因子为 0.9,那么当哈希表 90%的容量已被使用时,此哈希表会自动扩充成一个更大的哈希表。如果用户不赋这些

43、参数,系统会自动进行处理,而不需要用户操心。Hashtable 提供了基本的插入、检索等方法。 插入public synchronized void put(Object key,Object value)给对象 value 设定一关键字 key,并将其加到 Hashtable 中。若此关键字已经存在,则将此关键字对应的旧对象更新为新的对象 Value。这表明在哈希表中相同的关键字不可能对应不同的对象( 从哈希表的基本思想来看,这也是显而易见的)。检索public synchronized Object get(Object key)根据给定关键字 key 获取相对应的对象。public sy

44、nchronized boolean containsKey(Object key)判断哈希表中是否包含关键字 key。public synchronized boolean contains(Object value)判断 value 是否是哈希表中的一个元素。删除public synchronized object remove(object key)从哈希表中删除关键字 key 所对应的对象。public synchronized void clear()清除哈希表另外,Hashtalbe 还提供方法获取相对应的枚举集合:public synchronized Enumeration k

45、eys()返回关键字对应的枚举对象。public synchronized Enumeration elements()返回元素对应的枚举对象。例 1.5 Hashtable.java 给出了使用 Hashtable 的例子。例 1.5 Hashtalbe.java。/import java.lang.*;import java.util.Hashtable;import java.util.Enumeration;public class HashApppublic static void main(String args)Hashtable hash=new Hashtable(2,(fl

46、oat)0.8);/创建了一个哈希表的对象 hash,初始容量为 2,装载因子为 0.8hash.put(“Jiangsu“,“Nanjing“);/将字符串对象“Jiangsu” 给定一关键字“Nanjing”,并将它加入 hashhash.put(“Beijing“,“Beijing“);hash.put(“Zhejiang“,“Hangzhou“);System.out.println(“The hashtable hash1 is: “+hash);System.out.println(“The size of this hash table is “+hash.size();/打印

47、hash 的内容和大小Enumeration enum1=hash.elements();System.out.print(“The element of hash is: “);while(enum1.hasMoreElements()System.out.print(enum1.nextElement()+“ “);System.out.println();/依次打印 hash 中的内容if(hash.containsKey(“Jiangsu“)System.out.println(“The capatial of Jiangsu is “+hash.get(“Jiangsu“);hash

48、.remove(“Beijing“);/删除关键字 Beijing 对应对象System.out.println(“The hashtable hash2 is: “+hash);System.out.println(“The size of this hash table is “+hash.size();运行结果:The hashtable hash1 is: Beijing=Beijing, Zhejiang=Hangzhou, Jiangsu=NanjingThe size of this hash table is 3The element of hash is: Beijing H

49、angzhou NanjingThe capatial of Jiangsu is NanjingThe hashtable hash2 is: Zhejiang=Hangzhou, Jiangsu=NanjingThe size of this hash table is 2Hashtable 是 Dictionary(字典)类的子类。在字典类中就把关键字对应到数据值。字典类是一个抽象类。在 java.util 中还有一个类 Properties,它是 Hashtable 的子类。用它可以进行与对象属性相关的操作。1.1.2.1.7 位集合类 BitSet位集合类中封装了有关一组二进制数据的操作。我们先来看一下例 8.6 BitSetApp.java。例 8.6 BitSetApp.java/import java.lang.*;import java.util.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报