JAVA 标准类库汇总课件.ppt
1,第4章 Java标准类库,2,4.1语言基础类库-Object类,类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。 Java中所有的其他类都是从Object类派生。构造方法:Object( ),3,instanceof 运算符,instanceof 运算符是一个常用的运算符,该运算符是双目运算符,左面的操作元是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时,该运算符运算的结果是true ,否则是false。例如: if(b1 instanceof Button) doDealB1(); 其中b1是对象,Button是一个类名。,4,【例】getClass和Instanceof方法的使用/ ClassAndInstance.javaclass SubClass class SuperClass extends SubClass public class ClassAndInstance public static void main(String args) test(new SubClass(); test(new SuperClass(); static void test(Object x) System.out.println(Testing x of type + x.getClass();System.out.println(x instanceof SubClass + (x instanceof SubClass);System.out.println(x instanceof SuperClass + (x instanceof SuperClass); ,5,基本类型的包装类:每一种基本类型都有一个相应的包装类,这些类定义在java.lang包中:byteBytecharCharactershortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBoolean,基本类型名,相应的包装类类名,4.2 数据类型类,6,NumberDouble,FloatByte,Short,I nteger,Long数字和字符串的转换CharacterBoolean,7,4.2.1 Number 类,抽象类Number定义了一个包装数字类型: 字节型(Byte),短整型(Short),整型(Integer),长整型(Long),浮点型(Float)和双精度型(Double)的超类。 定义了从包装器返回基本类型的方法double doubleValue( ),float floatValue( ) byte byteValue( ), ,int intValue( ),long longValue( ),short shortValue( ),8,4.2.1 Double和Float,双精度(Double)和浮点(Float)分别是对类型double和类型float的浮点值的包装器。 构造方法Float(double value),Float(float value),Float(String s)Double(double value)Double(String s),9,Float和Double中定义的常量,10,Float和Double中定义的主要方法,int compareTo (),比较两个对象static float parseFloat(String s)把字符串转换成floatstatic Float valueOf(String s)把字符串转换成Float static float parseDouble(String s)把字符串转换成doublestatic Double valueOf(String s)把字符串转换成Double,11,Double ,Float 例子,/提取简单类型值 f = F.floatValue(); d = D.doubleValue(); System.out.println(f); System.out.println(d); /比较System.out.println(D.equals(F);,float f = 3.1415f;double d = 3.14159267;Float F = new Float(f);Double D = new Double(d); /转化为字符串System.out.println(F.toString();System.out.println(D.toString();,12,4.2.3 Byte, Short, Integer, Long,Byte,Short,Integer,和Long类分别是字节型(byte),短整型(short),整型(int)和长整型(long)整数类型的包装器 构造函数Byte(byte value),Byte(String str)Short(short value),Short(String str)Integer(int value),Integer(String str)Long(long value),Long(String str),13,定义的主要方法,arseByte ,parseInt,parseShort,parseLong, 把字符串转化成数字类型valueOf(),把字符串转化成数字类型包装器把数字转化成字符串static String toBinaryString(int value)static String toHexString(int value)static String toOctalString(int value)static String toString(int value)static String toString(int value,int radix),14,4.2.4 数字和字符串的转换,字符串向数字的转换parseByte( ),parseShort( ),parseInt( )和parseLong( ) 数字向字符串的转换static String toBinaryString(int value)static String toHexString(int value)static String toOctalString(int value)static String toString(int value)static String toString(int value,int radix),15,数字字符串转换示例1,String s1 = 12; String s2 = 34; String s = null; int i1 = 0, i2 = 0, sum = 0; /把字符串转换成整数 i1 = Integer.parseInt(s1); i2 = new Integer(s2).intValue(); sum = i1 + i2; /把整数转换成字符串 s = Integer.toString(sum); System.out.println(s);,16,数字字符串转换示例2,int i = -34567; String s = null; /转换成二进制字符串 System.out.println(2进制字串: + Integer.toBinaryString(i); /转换成8进制字符串System.out.println(8进制字符串: + Integer.toOctalString(i); /转换成16进制字符串 System.out.println(16进制字符串: + Integer.toHexString(i); /转换成带符号表示的8进制字符串,s = Integer.toString(i, 8);System.out.println(带符号8进制字符串: + s);/从8进制字符串转化成Integer对象Integer I = Integer.valueOf(s, 8); System.out.println(Integer对象中的值:+I.intValue();,17,4.2.5 Character,Character是围绕字符型(char)的一个简单的包装器。Character的构造函数如下:Character(char ch)Character类定义了很多常数和静态方法。 isDigit(char ch) , isLetter(char ch) isLowerCase(char ch) ,toUpperCase(char ch),18,4.2.6 Boolean,Boolean是一个围绕布尔(boolean)值的非常细小的包装器,主要用在通过引用传递布尔(boolean)变量的场合。 构造函数Boolean(boolean boolValue)Boolean(String boolString),String s = true;boolean b = true;if (b = new Boolean(s).booleanValue() System.out.println(两个布尔变量相等);System.out.println(Boolean.valueOf(s).hashCode();,19,java.lnag.Object中对hashCode的约定:在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。,20,4.3 System,System类保存静态方法和变量的集合。标准的输入,输出和Java运行时错误输出存储在变量in,out和err中 。定义的主要方法见下表,21,System的主要方法1,22,System的主要方法2,23,System的主要方法3,24,例:记录程序执行的时间,public class Elapsed public static void main(String args) long start, end, sum = 0; System.out.println( a loop from 0 to 1,000,000,000); start = System.currentTimeMillis(); for (int i = 0; i 1000000000; i+) sum = sum + i * i; end = System.currentTimeMillis(); System.out.println(Elapsed time: + (end - start); ,25,例:复制数组,public class ArrayCopyDemoint a = 65, 66, 67, 68, 69, 70, 71 ; int b = 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 ; int c=new int20; public void cop() print(a);System.arraycopy(a,0,c,0, a.length); print(c);System.arraycopy(a, 0, b, 3, a.length); print(b);System.arraycopy(a, 0, a, 1, a.length - 1); print(a); System.arraycopy(b, 1, b, 0, b.length - 1); print(b);,void print(int a) for(int i=0;ia.length;i+) System.out.print(ai+ ); System.out.println(); public static void main(String args) ArrayCopyDemo pp=new ArrayCopyDemo(); pp.cop(); ,26,访问JVM的环境属性1,27,访问JVM的环境属性2,public class PropsDemo public static void main(String args) System.out.println(System.getProperty(java.version); System.out.println(System.getProperty(java.vendor); System.out.println(System.getProperty(java.vendor.url); System.out.println(System.getProperty(java.home); System.out.println(System.getProperty(user.dir); System.setProperty(java.class.path, d:javalib); System.out.println(System.getProperty(java.class.path); ,28,4.4 Runtime,Runtime类封装了运行时环境。用户一般不实例化一个Runtime对象。但是可以通过调用静态方法Runtime.getRuntime( )而获得对当前Runtime对象的引用。一旦获得了对当前对象的引用,就可以调用几个控制Java虚拟机的状态和行为的方法。,29,Runtime 常用的方法,30,使用Runtime执行其他程序,ublic class ExecDemo public static void main(String args) Runtime r = Runtime.getRuntime(); Process p = null; try p = r.exec(notepad); /程序暂停1秒钟 Thread.sleep(1000); /关闭外部程序 p.destroy(); catch (Exception e) System.out.println(Error executing notepad.); ,31,4.5 Math,Math类在java.lang包中。Math类包含许多用来进行科学计算的类方法,这些方法可以直接通过类名调用。Math类还有两个静态常量,它们分别是:E 2.7182828284590452354PI 3.14159265358979323846。,32,33,4.6 BigInteger类,1 java.math包中的BigInteger类提供任意精度的整数运算。可以使用构造方法: public BigInteger(String val)构造一个十进制的BigInteger对象。 2 以下是BigInteger类的常用类方法:*public BigInteger add(BigInteger val) 返回当前大整数对象与参数指定的大整数对象的和。*public BigInteger subtract(BigInteger val)返回当前大整数对象与参数指定的大整数对象的差。* public BigInteger multiply(BigInteger val)返回当前大整数对象与参数指定的大整数对象的积。*public BigInteger divide(BigInteger val)返回当前大整数对象与参数指定的大整数对象的商。*public BigInteger remainder(BigInteger val)返回当前大整数对象与参数指定的大整数对象的余。*public int compareTo(BigInteger val) 返回当前大整数对象与参数指定的大整数的比较结果,返回值是1、-1或0,分别表示当前大整数对象大于、小于或等于参数指定的大整数。*public BigInteger abs() 返回当前大整数对象的绝对值。*public BigInteger pow(int a) 返回当前大整数对象的a次幂。*public String toString() 返回当前大整数对象十进制的字符串表示。*public String toString(int p) 返回当前大整数对象p进制的字符串表示。,34,4.7 日期时间实用工具类,Date封装当前的日期和时间,也可以封装一个指定的日期 Calendar,GregorianCalendar 一个日历可以获取时间分量日期计算,35,4.7.1 Date,Date类在java.util包中。使用Date类的无参数构造方法创建的对象可以获取本地当前时间。构造函数Date( ),从当前时间构造对象Date(long millisec),接收一个参数,该参数等于从1970年1月1日午夜起至今的毫秒数的大小,36,Date的主要方法,37,Date的例子,Date d1 = new Date(); Date d2 = new Date(1140203030304L); System.out.println(d1); System.out.println(d2); if (d2.after(d1) System.out.println(d2晚于d1); System.out.println(pareTo(d1); /改变的d2的值为d1 d2.setTime(d1.getTime(); System.out.println(d2);,38,4.7.2 Calendar,抽象Calendar类提供了一组方法,这些方法允许将以毫秒为单位的时间转换为一组有用的分量。一些可以提供信息的类型是:年,月,日,小时,分和秒。定义的一些常量,表示时间分量。,39,Calendar的主要方法,40,Calendar类在java.util包中。使用Calendar类的static方法 getInstance()可以初始化一个日历对象例1:Calendar calendar =Calendar.getInstance();例2:常量使用 Calendar c = Calendar.getInstance(); int c.get(Calendar.YEAR) int c.get(Calendar.MONTH) ( 1月为0) int c.get(Calendar.DATE) int c.get(Calendar.HOUR) int c.get(Calendar.MINUTE) int c.get(Calendar.SECOND) Date c.getTime(),41,例:import java.util.*;public class calendar public static void main(String args) Date now=Calendar.getInstance().getTime();Calendar c=Calendar.getInstance();System.out.println(now);System.out.println(c);System.out.println(c.DATE);System.out.println(c.AM);System.out.println(c.getTimeZone();System.out.println(c.getAvailableLocales();,42,4.7.3 GregorianCalendar,是Calendar的子类GregorianCalendar是Calendar的一个实现大家所熟悉的标准日历(现在通用的阳历)的具体工具 GregorianCalendar定义了两个域:AD和BC。它们代表由公历定义的两个纪元。,43,GregorianCalendar的构造函数,GregorianCalendar(int year, int month, int date)GregorianCalendar(int year, int month, int date, int hours,int minutes)GregorianCalendar(int year, int month, int date, int hours,int minutes, int seconds)三种形式中,都设置了日,月和年。这里,year指定了从1900年起的年数。month指定了月,以0表示一月。月中的日由date指定,从1开始。第一种形式以午夜设置时间。第二种形式以小时和分钟设置时间,第三种形式增加了秒。,44,日历的使用,Calendar c = Calendar.getInstance(); c.setFirstDayOfWeek(Calendar.MONDAY); /设置日期和时间. c.set(2006, 11, 30); c.set(Calendar.HOUR, 10); c.set(Calendar.MINUTE, 29); c.set(Calendar.SECOND, 22); c.add(Calendar.DATE, 10); c.add(Calendar.HOUR_OF_DAY, 10);,