基础类库和工具类库.ppt

上传人:小飞机 文档编号:5952628 上传时间:2023-09-08 格式:PPT 页数:84 大小:236.13KB
返回 下载 相关 举报
基础类库和工具类库.ppt_第1页
第1页 / 共84页
基础类库和工具类库.ppt_第2页
第2页 / 共84页
基础类库和工具类库.ppt_第3页
第3页 / 共84页
基础类库和工具类库.ppt_第4页
第4页 / 共84页
基础类库和工具类库.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《基础类库和工具类库.ppt》由会员分享,可在线阅读,更多相关《基础类库和工具类库.ppt(84页珍藏版)》请在三一办公上搜索。

1、第6章 基础类库和工具类库,6.1 Java基础类6.2 字符串相关类6.3 集合6.4 泛型6.5 日期和时间6.6 使用java.text包格式化数字和日期,6.1 Java基础类1.基础类库,Java运行环境(Java Runtime Environment,JRE)为一般的应用开发提供了大量类库支持,其提供的基础类库被称为JFC。这些系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合是一个包,合称类库。java.langJava语言的核心类库,包含了一般Java语言必不可少的一些系统类定义。java.io标准输入和输出类库,通过数据流、序列化和文件系统提供系统输入和输出。

2、java.util提供一些常用的工具类。,java.awt构建图形用户界面的类库。提供处理由AWT组件所激发的各类事件的接口和类。java.applet用来实现运行于浏览器中的Java Applet的工具类库。与网络编程相关的类库。java.sql用来实现JDBC(Java Data Connection)的类库,利用它可以使Java程序具有访问不同类的数据库的功能。,java.security提供了用于安全框架的类和接口。实现了一个容易配置的、精细访问控制的安全结构。另外,还支持加密公钥对的生成和存储以及消息摘要(message digest)和数字签名的生成等加密操作。java.text通

3、过与特定语言无关的方式格式化文本消息、日期和数值。java.math提供用于执行任意精度整数算法(BigInteger)和任意精度小数算法(BigDecimal)的类。,2.Object,Object类是类层次的根。所有类都直接或间接地继承了Object类,所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组。Object类定义了11个可供所有对象继承的方法。这些方法分为两类:通用工具方法和支持线程的方法。,public boolean equals(Object obj)public int hashCode()protected Object clone()throws C

4、loneNotSupportedExceptionpublic final Class getClass()protected void finalize()throws Throwablepublic String toString()public final void wait(long timeout)throws InterruptedExceptionpublic final void wait(long timeout,int nanos)throws InterruptedExceptionpublic final void wait()throws InterruptedExc

5、eptionpublic final void notify()public final void notifyAll(),Object类中equals方法的性质,反身性(Reflexive)对于任何引用x,x.equals(x)将返回true。对称性(Symmetric)对于引用x和y,当且仅当y.equals(x)返回true时,x.equals(y)才会返回true。传递性(Transitive)对于引用x、y和z,如果x.equals(y)返回true,y.equals(z)也返回true,那么x.equals(z)也将返回true。一致性(Consistent)对于引用x和y,只要对

6、象比较时所有的信息并没有做任何的改动,那么多次调用x.equals(y)要么都返回true,要么都返回false。对于任何非空引用(non-null reference)x,x.equals(null)将返回false。,Object类中的toString方法,Object类中toString()只提供了该对象的类名、一个字符和实例散列码的十六进制表示,通常这些信息对于用户是远远不够的。可以通过覆盖toString方法,在其中提供一些更加友好的信息。,3.基本数据类型的封装,Java中定义了多种基本数据类型,但为了与面向对象程序设计思想相符合,Java基本类库中同时提供了对这些基本类型的封装类

7、。,这些类一般有如下特点:类中定义了对应基本数据类型的一些常数;提供基本数据类型和字符串的相互转换方法;对象中封装的值是不可改变的,改变对象值的惟一方法是创建一个新的对象;作为典型的值类实现,对equals()、hashCode()和toString()方法都做了改写。,public class test public static void main(String args)Integer a=new Integer(12);Integer b=new Integer(12);System.out.println(a.equals(b);,4.System,类是个很特殊的类,该类不能被实例化

8、,是个非常典型的静态方法类,主要提供与系统相关的静态方法和一些静态对象,如标准输入输出。,5.Math,类用来完成一些常用的数学计算,提供了一些实现标准数学函数计算的静态方法,使用时无需创建实例。,6.2 字符串相关类1.String,字符串是Java中比较特殊的数据类型。Java语言将字符串作为对象来处理,有对应的类定义,每一个字符串常量是字符串类String的一个实例。String类中提供了很多非常方便的字符串操作和查询方法,2.StringBuffer,StringBuffer类封装了一个字符数组,同时提供了对这个字符数组的相关操作。与String相比,任何修改性的操作都是在同一个字符数

9、组上进行,而不像String那样为了线程访问安全创建大量副本对象。,3.StringTokenizer,提供了对字符串的解析和分割的功能,如对一个字符串需要按照某些特征子串进行分割,就可以使用这个类。StringTokenizer位于java.util包中。,构造方法:,public StringTokenizer(String str)为指定字符串构造一个 string tokenizer。tokenizer 使用默认的分隔符集合 tnrf,即:空白字符、制表符、换行符、回车符和换页符。分隔符字符本身不作为标记。public StringTokenizer(String str,String

10、 delim)为指定字符串构造一个 string tokenizer。delim 参数中的字符都是分隔标记的分隔符。分隔符字符本身不作为标记。public StringTokenizer(String str,String delim,boolean returnDelims)为指定字符串构造一个 string tokenizer。delim 参数中的所有字符都是分隔标记的分隔符。如果 returnDelims 标志为 true,则分隔符字符也作为标记返回。每个分隔符都作为一个长度为 1 的字符串返回。如果标志为 false,则跳过分隔符,只是用作标记之间的分隔符。,package mycla

11、ss;import java.util.StringTokenizer;public class test public static void main(String args)StringTokenizer st=new StringTokenizer(this is an apple);while(st.hasMoreTokens()System.out.println(st.nextToken();,StringTokenizer是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用String的split方法或包。,public String

12、split(String regex)根据给定的正则表达式(RegularExpression)的匹配来拆分此字符串。String result=this is an apple.split(s);/s-空白字符 for(int x=0;xresult.length;x+)System.out.println(resultx);,6.3 集合1.集合API,集合是一系列对象的聚集,是代表一组对象的一个对象,集合中的这一组对象称为集合的元素。集合中的每一个元素都具有一定的数据类型,任何数据类型的对象都可以存放在集合中。集合是Java程序设计中非常重要的数据结构形式,Java基本类库中提供了非常优

13、秀的集合相关类定义实现,一般称为集合API。集合API中的接口和类主要分布在Java.util包下,最基本的接口是Collection,定义了聚集形式数据的基本操作方法。,Java的集合框架能使Java程序处理对象集的方式变得标准化。集合框架有以下几个设计目标:高性能。基本集合(动态数组、链表、树和散列表)的实现具有很高的效率。允许不同类型的集合用相同的方式进行处理且具有很高的互用性。扩展和修改集合很容易。为了实现这一目标,整个集合框架被设计成一系列标准接口,并且实用工具包中提供了这些接口的几个标准实现,如LinkedList、HashSet和TreeSet。,集合框架所产生的另一个东西是It

14、erator(迭代器)接口。Iterator接口提供了访问集合元素的一种标准访问方式:逐个访问方式,或者说,Iterator接口提供了列举集合内容的一种标准访问方式。由于每个集合均实现Iterator接口,所以任何集合类成员均可通过Iterator类的方法来访问。除了集合之外,集合框架还定义了几个映射接口与类。映射接口与类用来存储键值对。从严格的意义上来说,映射不是集合,但它们被完全集成到了集合中,可以像处理集合一样来处理映射的内容。,集合接口,List实现的对象集合记录元素的保存顺序,允许有重复元素的存在;而Set中不记录元素的保存顺序,不允许元素重复存在。,2.接口 Collection接

15、口,Collection接口是构造集合框架的基础,并声明了各种集合所共有的核心方法。由于所有集合都必须实现Collection接口,所以熟悉该接口所定义的方法对弄清楚集合框架是至关重要的。,List接口,List接口扩展了Collection接口,并把集合的行为声明成存储一个元素序列。使用从0开始的索引,可以把一个元素插入到列表中或访问列表中的某个元素。同一个列表可以包含相同的元素。除了Collection接口所定义的方法之外,List接口还定义了属于它自己的一些方法。,Set接口,Set接口扩展Collection接口并定义这样一种集合:这种集合不允许含有相同的元素。Set接口没有定义它自己

16、的方法。,SortedSet接口,SortedSet接口扩展Set接口并定义一种升序集合。除了Set接口所定义的方法之外,SortedSet接口还定义了一些自己的方法。,3.集合类,实用工具包中的集合类,ArrayList类,支持按需增长的动态数组。构造方法:ArrayList()/创建空数组列表ArrayList(Collection c)/以集合c中的元素作为初始元素创建数组列表ArrayList(int capacity)/创建一个具有指定初始容量的数组列表,import java.util.*;class Test public static void main(String args

17、)ArrayList alist=new ArrayList();alist.add(a);alist.add(b);alist.add(c);alist.add(d);alist.add(1,ok);System.out.println(alist);alist.remove(c);alist.remove(3);System.out.println(alist);,输出:a,ok,b,c,da,ok,b,注意:D:temptestsrcmyclasstest.java 使用了未经检查或不安全的操作。注意:要了解详细信息,请使用-Xlint:unchecked 重新编译。,HashSet类,

18、HashSet类创建一个用散列表存储元素的集合,不保证元素的顺序。例:P130,LinkedHashSet类,用元素的插入顺序来维持集合的链表,并允许按元素的插入顺序遍历集合。,TreeSet类,用树结构来存储数据,集合中的对象按“升序”*存储,访问和遍历集合的速度很快,是存储大量数据并快速查找的上佳选择。TreeSet()/按照元素的自然顺序排序。插入该 set 的所有元素都必须实现 Comparable 接口TreeSet(Collection c)/构造一个用c集合的元素为初始元素的树集合TreeSet(Comparator comp)/构造一个按comp比较器排序的空树集合TreeSe

19、t(SortedSet sset)/构造一个用sset集合作为初始元素的树集合*根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。,import java.util.*;class StrComparator implements Comparator/P136 public int compare(Object o1,Object o2)String a=(String)o1;String b=(String)o2;int c=pareTo(b);if(c0)return-1;else if(c0)ret

20、urn 1;else return 0;,public class Test public static void main(String args)TreeSet aset=new TreeSet();aset.add(d);aset.add(b);aset.add(a);aset.add(c);for(Object ob:aset)System.out.print(String)ob+t);System.out.println();TreeSet bset=new TreeSet(new StrComparator();bset.addAll(aset);bset.add(e);for(O

21、bject ob:bset)System.out.print(String)ob+t);,输出:a b c d e d c b a,java.lang public interface Comparable,此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以通过 Collections.sort()(和 Arrays.sort())进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。,import java.util.*;class Studen

22、t implements Comparableint id;String name;public Student(int id,String name)this.id=id;this.name=name;public int compareTo(Object s)Student ss=(Student)s;return id-ss.id;,public class Test public static void main(String args)TreeSet aset=new TreeSet();aset.add(new Student(3,c);aset.add(new Student(2

23、,b);aset.add(new Student(1,a);aset.add(new Student(4,d);for(Object ob:aset)Student s=(Student)ob;System.out.println(s.id+t+s.name);,1 a2 b3 c4 d,使用迭代器访问集合元素,遍历集合中的元素是一个常见的操作,比如显示集合中的每个元素。要想遍历集合中的元素,可使用迭代器。迭代器是指实现了Iterator或ListIterator接口的一个对象。迭代器允许通过循环集合来获取或删除集合元素。ListIterator通过扩展Iterator来允许双向遍历和修改集合

24、元素。,Iterator接口中的方法,ListIterator接口中的方法,要想用迭代器访问集合,必须先获得迭代器。每个集合类均提供了一个返回迭代器的iterator()方法,而且返回的迭代器均指向当前集合的开头。通常情况下,使用迭代器遍历集合应该遵循以下步骤:调用集合的iterator()方法获取一个指向集合开头的迭代器。设置一个循环来调用hasNext()方法,其中只要hasNext()方法返回true,循环就继续进行。在循环体中,调用next()方法来获得每个元素。对于实现了List接口的集合,还可以通过调用ListIterator()来获得迭代器。,package myclass;im

25、port java.util.*;class Test public static void main(String args)ArrayList alist=new ArrayList();alist.add(a);alist.add(b);alist.add(c);alist.add(d);Iterator itr01=alist.iterator();while(itr01.hasNext()Object element=itr01.next();System.out.print(element+);,ListIterator itr02=alist.listIterator();whi

26、le(itr02.hasNext()Object element=itr02.next();itr02.set(element+-);System.out.println();while(itr02.hasPrevious()Object element=itr02.previous();System.out.print(element+);,输出:a b c d d-c-b-a-,使用映射,映射是存储关键字与值之间的联系或关键字值对的对象。通过一个给定的关键字,可以查找到一个对应的值。关键字必须是惟一的,但值可以是重复的。,支持映射的接口,Map接口,映射类,TreeMap类,TreeMap

27、类使用树形结构实现Map接口,它提供了按序相邻存储关键字值对的有效方式。构造函数:TreeMap()创建一个按关键字自然顺序进行排序的空的映射。TreeMap(Comparator comp)创建一个按comp比较器进行排序的空的映射。TreeMap(Map m)用m映射的元素作为初始元素创建一个树形映射。TreeMap(SortedMap sm)用sm有序映射的映射作为初始元素按照sm有序映射的相同顺序创建一个树形映射。,import java.util.*;public class Test public static void main(String args)TreeMap tm=ne

28、w TreeMap();tm.put(red,红色);tm.put(green,绿色);tm.put(blue,蓝色);System.out.println(tm.get(red);Set es=tm.entrySet();/返回此映射中包含的映射关系的 Set 视图 Iterator iter=es.iterator();while(iter.hasNext()System.out.println(iter.next();,输出:红色blue=蓝色green=绿色red=红色,集合小结,集合遍历 P135对于List系列而言,可以利用元素的索引进行,而Set系列是没有索引的,需使用迭代器。排

29、序和查找 P136学习Collections类,6.4 泛型*,泛型,又称为参数化类型,是含有单个或多个类型参数的类或接口的定义。泛型类和泛型接口的定义机制是对平时所熟知的类和接口定义机制的扩展,利用这种机制可以定义泛型类和泛型接口的集合。在大多数情况下,泛型被设计用来处理集合。一般应用程序员只要熟练使用系统提供的泛型类,就足够应付大多数的程序需要了。,泛型类的定义,泛型类的定义与普通类的定义非常相近,差别仅在于泛型类名称后有个参数描述。public class LinkedList/类定义代码泛型实质上定义了类型的集合,利用泛型创建具体的类时,只需为尖括号中的参数提供合适的实参,此时出现在定

30、义中的类型变量T将被所提供的类型实参替代,这样就生成了所需要的类。,LinkedList,LinkedList定义了一个可存储String对象的LinkedList类,LinkedList定义了一个可存储String对象的LinkedList类,LinkedList定义了一个可存储String对象的LinkedList类,泛型,泛型在使用中的一些规则和限制,泛型的类型参数可以有多个。泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。在static方法中不可以使用泛型,泛型变量也不可以用static关键字来修饰。不可以定义泛型数组,T ob=new T();/错。,class MyCl

31、assprivate T a;private U b;public MyClass(T a,U b)this.a=a;this.b=b;public T getA()return a;public U getB()return b;public class Test public static void main(String args)MyClass m=new MyClass(abc,123);String s=m.getA();System.out.println(s);Integer i=m.getB();System.out.println(i);,class MyClassObje

32、ct a;Object b;public MyClass(Object a,Object b)this.a=a;this.b=b;public Object getA()return a;public Object getB()return b;public class test public static void main(String args)MyClass m=new MyClass(abc,123);String s=(String)m.getA();System.out.println(s);Integer i=(Integer)m.getB();System.out.print

33、ln(i);,import java.util.*;class Student implements Comparableint id;String name;public Student(int id,String name)this.id=id;this.name=name;public int compareTo(Student s)Student ss=s;return id-ss.id;,import java.util.*;class Student implements Comparableint id;String name;public Student(int id,Stri

34、ng name)this.id=id;this.name=name;public int compareTo(Object s)Student ss=(Student)s;return id-ss.id;,public class test public static void main(String args)TreeSet aset=new TreeSet();aset.add(new Student(3,c);aset.add(new Student(2,b);aset.add(new Student(1,a);aset.add(new Student(4,d);for(Student

35、ob:aset)Student s=ob;System.out.println(s.id+t+s.name);,public class test public static void main(String args)TreeSet aset=new TreeSet();aset.add(new Student(3,c);aset.add(new Student(2,b);aset.add(new Student(1,a);aset.add(new Student(4,d);for(Object ob:aset)Student s=(Student)ob;System.out.println

36、(s.id+t+s.name);,6.4日期和时间*,Date类提供了操作时间的基本功能。Date()/使用当前日期和时间初始化对象Date(long milliseconds)/参数等于从1970年1月1日午夜开始计算已经过去的时间数(毫秒)。Date中的很多方法已经过时。Date类没有提供允许获得日期和时间的各个组成成分的方法,只能获得毫秒计数的日期和时间,或者从toString()方法所返回的字符串表示中获得日期和时间。如要获得日期和时间的详细信息,则需使用Calendar类。,import java.util.*;public class Test public static void

37、 main(String args)Date date=new Date();System.out.println(date);long msec=date.getTime();System.out.println(Milliseconds=+msec);,Sun Apr 15 11:30:10 CST 2012,Calendar类是一个抽象类,提供了一组允许把毫秒为单位的时间转换为一些有用时间成分,如年、月、日、时、分和秒的方法。Calendar 提供了一个类方法 getInstance(),返回一个GregorianCalendar对象,这个对象被初始化成默认地域和时区下的当前日期和时间。

38、Calendar还定义了很多int型的常量,这些常量一般在获取或设置Calendar类的成员时使用。,import java.util.*;class Test public static void main(String args)Calendar now=Calendar.getInstance();System.out.println(now.get(Calendar.YEAR);,Calendar类的具体实现子类GregorianCalendar(格林高利历,公历),实现了我们所熟悉的公历日历,可以根据各自的规则提供一些特定的功能来解释时间信息。,import java.text.Da

39、teFormat;import java.util.*;public class Test public static void main(String args)GregorianCalendar now=new GregorianCalendar();GregorianCalendar date=new GregorianCalendar(2012,3,16);System.out.println(now.get(Calendar.MONTH);System.out.println(date.get(Calendar.MONTH);DateFormat fmt=DateFormat.get

40、DateInstance(DateFormat.MEDIUM,Locale.CHINA);System.out.println(fmt.format(date.getTime();System.out.println(2000是否是闰年:+date.isLeapYear(2000);,注意:这是四月,6.5 使用java.text包格式化数字和日期*格式化数字,在NumberFormat类中为我们提供了格式化4种数字的方法:整数、小数、货币和百分比,通过工厂方法getInstance,getNumberIntance,getCurrencyInstance,getPercentInstance

41、方法获得相应的实例对象就行。,例如我们要以字符串表示人民币88888.88元,这样来写就行:package myclass;import java.text.*;public class test public static void main(String args)NumberFormat nf=NumberFormat.getCurrencyInstance();System.out.println(nf.format(88888.88);,输出:¥88,888.88,定制格式化数字,可是对于稍微复杂一点的需求,NumberFormat就满足不了了,幸好java还提供了DecimalFo

42、rmat实现定制的格式化。要使用DecimalFormat对象,必须提供给它提供一个格式化的模式(pattern):String pattern=DecimalFormat df=new DecimalFormat(pattern);或者:DecimalFormat df=new DecimalFormat();df.applyPattern(pattern);然后就调用它的format方法就行了。所以关键就是这个模式怎么定义。,在DecimalFormat类的JavaDoc中有模式的语法表示。下面是模式中某些字符的含义表:字符 含义 0 一位数字,这一位缺失显示为0。用来补零#一位数字,这一

43、位缺失就不显示.小数点,不用多说了吧,千位分隔符 E 科学计数法%百分比,格式化日期,把日期转化为字符串最简单的方法就是调用Date类的toString或者toLocaleString方法:System.out.println(new Date();输出:2004-8-7 8:16:14。可是如果我们想把月和日补成2位不要时分秒2004-08-07,这就不灵了。提供了大量的工厂方法:getDateInstance(int style),getTimeInstance(int style),getDateTimeInstance(int dateStyle,int timeStyle)等等。其中

44、style必须是DateFormat.LONG,DateFormat.MEDIUM,DateFormat.SHORT之一。,定制格式化日期,同样,可以通过模式(pattern)实现定制格式化:String pattern=SimpleDateFormat df=new SimpleDateFormat(pattern);或者:SimpleDateFormat df=new SimpleDateFormat();df.applyPattern(pattern);,下面是SimpleDateFormat的javadoc中的一个模式符号简表:,符号 意义 合法数值 示例 y Year Year 19

45、96;96 M Month in year Month July;Jul;07 d Day in month Number 10 a Am/pm marker Text PM H Hour in day(0-23)Number 0 h Hour in am/pm(1-12)Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time;PST;GMT-8:00 Z Time

46、zone RFC 822 time zone-0800,例:,import java.text.*;import java.util.*;public class test public static void main(String args)defaultNumberFormat();System.out.println();customNumberFormat();System.out.println();defaultDateFormat();System.out.println();customDateFormat();System.out.println();,public sta

47、tic void defaultNumberFormat()int i=123456;double x=882323.23523;double p=0.528;double c=52.83;NumberFormat nf=NumberFormat.getInstance();System.out.println(Integer+i+is displayed as+nf.format(i);System.out.println(Double+x+is displayed as+nf.format(x);NumberFormat nfInt=NumberFormat.getIntegerInsta

48、nce();System.out.println(Integer+i+is displayed as+nfInt.format(i);NumberFormat nfNumber=NumberFormat.getNumberInstance();System.out.println(Double+x+is displayed as+nfNumber.format(x);NumberFormat nfPercent=NumberFormat.getPercentInstance();System.out.println(Percent+p+is displayed as+nfPercent.for

49、mat(p);NumberFormat nfCurrency=NumberFormat.getCurrencyInstance();System.out.println(Currency+p+is displayed as+nfCurrency.format(c);/这里没有涉及相应的parse方法,public static void customNumberFormat()double x=1000.0/3;System.out.println(default output is+x);patternPrint(#,#.#,x);patternPrint(#.#,x);patternPri

50、nt(#.00,x);patternPrint(#.0#,x);patternPrint(00000.#,x);patternPrint($#,#.#,x);patternPrint(0.#E0,x);patternPrint(00.#%,x);double y=23.0012;System.out.println(default output is+y);patternPrint(#,#.#,y);patternPrint(#.#,y);patternPrint(#.00,y);patternPrint(#.0#,y);patternPrint(00000.#,y);patternPrint

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号