Java 语言编程技术5_3.pdf
Java语言编程技术语言基础类语言基础类语言基础类语言基础类Java类库 JavaJava的类库是系统提供的已实现的标准类的类库是系统提供的已实现的标准类的类库是系统提供的已实现的标准类的类库是系统提供的已实现的标准类的集合的集合,是是JavaJava编程的编程的APIAPI(ApplicationApplicationProgramProgram InterfaceInterface),它可以帮助开发者它可以帮助开发者g g),它可以帮助开发者它可以帮助开发者方便方便、快捷地开发快捷地开发JavaJava程序程序。这些系统定义好的类根据实现的功能不这些系统定义好的类根据实现的功能不 这些系统定义好的类根据实现的功能不这些系统定义好的类根据实现的功能不同同,可以划分成不同的集合可以划分成不同的集合,每个集合每个集合是一个包是一个包合称为类库合称为类库是个包是个包,合称为类库合称为类库。JavaJava的类库大部分是由它的发明者提供的类库大部分是由它的发明者提供的这些类库称为基础类库(的这些类库称为基础类库(JFCJFC)的,这些类库称为基础类库(的,这些类库称为基础类库(JFCJFC)。)。Java 语言编程技术2Java类库 类库的结构类库的结构java.langjava.lang(SystemSystem、MathMath、ThreadThread基本数据类型类)基本数据类型类)基本数据类型类)基本数据类型类)java.utiljava.util(collection(collection、日期日期)jijijava.iojava.iojava.appletjava.appletjppjppjava.awtjava.awtjava awt eventjava awt Java 语言编程技术3语言基础类库:数据封装类基本数据类型数据类型类基本数据类型数据类型类booleanBooleanCharactercharBytebyteyyShortshortIntegerintIntegerintLonglongFloatfloatDoubledoubleJava 语言编程技术4Doubledouble语言基础类库:数据封装类Integer Integer 类:类:属性属性staticstatic int int MAX VALUEMAX VALUE 返回返回intint型数据的最型数据的最_ _返回返回数据的最数据的最大值大值staticstatic intint MIN VALUEMIN VALUE返回返回intint型数据的最型数据的最staticstatic int int MIN_VALUE MIN_VALUE 返回返回intint型数据的最型数据的最小值小值private intprivate int valuevalue;private int private int valuevalue;构造方法构造方法Integer(int value)Integer(int value)Integer(String s)Integer(String s)Java 语言编程技术5g(g)g(g)语言基础类库:数据封装类语言基础类库:数据封装类Integer Integer 类:类:方法方法 方法方法int intValue()double doubleValue()int intValue()double doubleValue()S iS i()S iS i()String toString()String toString()static String toString(int i)static String toString(int i)static int parseInt(String s)static int parseInt(String s)static Integer valueOf(String s)static Integer valueOf(String s)static Integer valueOf(String s)static Integer valueOf(String s)Java 语言编程技术6语言基础类库:数据封装类 数据类型转换数据类型转换利用类方法静态方法利用类方法静态方法利用类方法(静态方法)利用类方法(静态方法)static int Integer.parseInt(“23”)static int Integer.parseInt(“23”)gp()gp()static String Integer.toString(23)static String Integer.toString(23)static double Double parseDouble(“12 3”)static double Double parseDouble(“12 3”)static double Double.parseDouble(12.3)static double Double.parseDouble(12.3)static String Double.toString(12.3)static String Double.toString(12.3)static String String.ValueOf(0.23)static String String.ValueOf(0.23)Java 语言编程技术7语言基础类库:数据封装类 数据类型转换数据类型转换利用对象方法利用对象方法 Double d;String s;Double d;String s;Double d ;String s;Double d ;String s;d=new Double(12.3);/d=new Double(12.3);/构造构造s=d.toString();s=d.toString();注意不同的数据类使用的方法会有注意不同的数据类使用的方法会有 注意不同的数据类使用的方法会有注意不同的数据类使用的方法会有不同不同Java 语言编程技术8语言基础类库:Object类j 类层次的根每一个类都是它的子类类层次的根每一个类都是它的子类 类层次的根,每一个类都是它的子类。类层次的根,每一个类都是它的子类。构造方法:构造方法:Object()Object()般方法般方法 一般方法:一般方法:boolean equals(Object obj)boolean equals(Object obj)比较两个对象是比较两个对象是q(jj)q(jj)否相同。否相同。String toString()String toString()用来返回当前对象本身的有用来返回当前对象本身的有String toString()String toString()用来返回当前对象本身的有用来返回当前对象本身的有关信息关信息Object clone()Object clone()生成当前对象的一个拷贝生成当前对象的一个拷贝Object clone()Object clone()生成当前对象的个拷贝。生成当前对象的个拷贝。Class getClass()Class getClass()获取当前对象所属的类信息获取当前对象所属的类信息Java 语言编程技术9equals()class Integer private int value;.class Integer private int value;.q()Integer n1=new Integer(47);Integer n1=new Integer(47);g p;g p;输出输出falsefalseInteger n2=new Integer(47);Integer n2=new Integer(47);System.out.println(n1=n2);System.out.println(n1=n2);输出输出falsefalse输出输出truetruelV l i t i lV l i t i yp()yp()System.out.println(n1.equals(n2);System.out.println(n1.equals(n2);class Value int i;class Value int i;Value n1=new Value();Value n1=new Value();Value n1=new Value();Value n1=new Value();Value n2=new Value();Value n2=new Value();1 i2 i1001 i2 i100输出输出falsefalsen1.i=n2.i=100;n1.i=n2.i=100;System.out.println(n1.equals(n2);System.out.println(n1.equals(n2);Java 语言编程技术10为什么为什么?equals()q()in Object:in Object:public boolean equals(Object obj)return(this=obj);(j);in Integer:in Integer:public boolean equals(Object obj)public boolean equals(Object obj)if(obj instanceof Integer)tl(I t)bj)i tV l()return value=(Integer)obj).intValue();Java 语言编程技术11return false;clone()例LlC()in Object:in Object:tt dtiObjt l()tt dtiObjt l()例:LocalCopyprotected native Object clone()protected native Object clone()throws CloneNotSupportedException;throws CloneNotSupportedException;bitwise duplicationbitwise duplication 支持支持clone()clone()支持支持clone()clone()Implement the Cloneable interface.Implement the Cloneable interface.Override clone().Override clone().Call super.clone()inside your clone().Call super.clone()inside your clone().p()y()p()y()Capture exceptions inside your clone().Capture exceptions inside your clone().例例diLlCjdiLlCjJava 语言编程技术12 例例 appendixa:LocalCopy.javaappendixa:LocalCopy.javaclone()()bitwise but shallow copybitwise but shallow copypypy例例 appendixa:Snake.javaappendixa:Snake.java组合对象的组合对象的 l l 组合对象的组合对象的cloneclone例例 appendixa:DeepCopy.javaappendixa:DeepCopy.java例例 ppppy jppppy j clone()clone()方法的继承方法的继承例例例例 appendixa:HorrorFlick.javaappendixa:HorrorFlick.javaJava 语言编程技术13语言基础类库:Class类 public final Class extends Objectpublic final Class extends Object 一般方法:一般方法:String getName()String getName()返回类名。返回类名。Field getFields()Field getFields()返回类的返回类的publicpublic域对象。域对象。Field getFields()Field getFields()返回类的返回类的publicpublic域对象。域对象。Method getMethods()Method getMethods()返回类的返回类的publicpublic方法对方法对象。象。象。象。Package getPackage()Package getPackage()返回该类的包。返回该类的包。FieldField 类类 Field Field 类类String getName()String getName()取域名取域名M th dM th d 类类 Method Method 类类String getName()String getName()取方法名取方法名类类Java 语言编程技术14 Package Package 类类String getName()String getName()数学运算的Math类 MathMath类用来完成常用的数学运算类用来完成常用的数学运算数学常量:数学常量:E E,PIPI数学运算数学运算数学运算数学运算 属性属性blibli filfil t tit ti dbldbl E E/数学常量数学常量publicpublic finalfinal staticstatic doubledouble E E;/数学常量数学常量e epublicpublic finalfinal staticstatic doubledouble PIPI;/圆周率常量圆周率常量Java 语言编程技术15数学运算的Math类 方法方法(均为静态方法均为静态方法,使用时无需创建实例使用时无需创建实例)publicpublic staticstatic intint abs(intabs(int i)i);publicpublic staticstatic doubledouble sin(doublesin(double a)a);publicpublic staticstatic doubledouble sin(doublesin(double a)a);publicpublic staticstatic doubledouble log(doublelog(double a)a);bliblii i dbldbl(dbl(dbldbldblb)b)publicpublic staticstatic doubledouble max(doublemax(double a,a,doubledouble b)b);publicpublic staticstatic doubledouble pow(doublepow(double a,a,doubledouble b)b);publicpublic staticstatic doubledouble random()random();/产生产生0 0 1 1之间伪随机数之间伪随机数/产生产生0 0 1 1之间伪随机数之间伪随机数Java 语言编程技术16数学运算的Math类public static double exp(double a);public static double exp(double a);pp();pp();public static int round(float a);public static int round(float a);public static double sqrt(double a);public static double sqrt(double a);public static double sqrt(double a);public static double sqrt(double a);例:例:Si l(M h E)2 718281828Si l(M h E)2 718281828System.out.println(Math.E);2.718281828.System.out.println(Math.E);2.718281828.System.out.println(Math.PI);3.14159265System.out.println(Math.PI);3.14159265System.out.println(Math.pow(2,3);8.0System.out.println(Math.pow(2,3);8.0System out println(Math round(99 6);100System out println(Math round(99 6);100System.out.println(Math.round(99.6);100System.out.println(Math.round(99.6);100System.out.println(Math.abs(System.out.println(Math.abs(-8.09);8.098.09);8.09Java 语言编程技术17语言基础类库:System类y实现了用户访问系统资源时的系统无实现了用户访问系统资源时的系统无关编程接口关编程接口 属性属性 属性属性public static InputStream public static InputStream in inpublic static PrintStream public static PrintStream outoutblii P i Sblii P i Spublic static PrintStream public static PrintStream errerrJava 语言编程技术18语言基础类库:System类y 获取系统信息、完成系统操作的方法获取系统信息、完成系统操作的方法publicpublic staticstatic longlong currentTimeMillis()currentTimeMillis();获取自获取自19701970年年1 1月月1 1日零时至当前系统时刻的微日零时至当前系统时刻的微获取自获取自19701970年年1 1月月1 1日零时至当前系统时刻的微日零时至当前系统时刻的微秒数秒数972370687290972370687290publicpublic staticstatic voidvoid exit(intexit(int status)status);强制强制JavaJava虚拟机退出运行状态虚拟机退出运行状态,并把状态信息并把状态信息强制强制虚拟机退出运行状态虚拟机退出运行状态,并把状态信息并把状态信息statusstatus 返 回 给 运 行 虚 拟 机 的 操 作 系 统返 回 给 运 行 虚 拟 机 的 操 作 系 统。SystemSystem.exit(exit(0 0);SystemSystem.exit(exit(0 0);Java 语言编程技术19语言基础类库:System类y static String getProperty(String key)static String getProperty(String key)static String getProperty(String key)static String getProperty(String key)例:例:System.out.println(System.out.println(System.getProperty(“java.class.path”);System.getProperty(“java.class.path”);结果:结果:;d:d:;classpath;classpath结果:结果:.;.;d:d:;classpath;classpath“java.home”java“java.home”java安装目录安装目录“java.version”javajava.version”java版本号版本号 public static Properties getProperties()public static Properties getProperties()Java 语言编程技术20String/StringBuffer(StringBuilder)gg(g)可变类与不可变类可变类与不可变类例:例:appendixa:Immutable2.javaappendixa:Immutable2.java StringString 不可变的字符串不可变的字符串 String String 不可变的字符串不可变的字符串例:例:appendixa:Stringer.javaappendixa:Stringer.javaS iB ild/S iB ffS iB ild/S iB ff可变的字可变的字 StringBuilder/StringBufferStringBuilder/StringBuffer 可变的字可变的字符串符串append(append()insert(insert(位置,位置,子串子串)insert(insert(位置,位置,子串子串)setCharAt(setCharAt(位置,位置,替代字符替代字符)Java 语言编程技术21String/StringBuffer(StringBuilder)“”的重载的重载例:例:appendixa:ImmutableStrings.javaappendixa:ImmutableStrings.java String/StringBufferString/StringBuffer方法方法 String/StringBufferString/StringBuffer方法方法Java 语言编程技术22JAVA命令行参数 命令行参数的传入命令行参数的传入java java 主类名主类名 参数列表参数列表例:例:java ComplexNum 10 0 20 0java ComplexNum 10 0 20 0例:例:java ComplexNum 10.0 20.0java ComplexNum 10.0 20.0 读取命令行参数读取命令行参数public static void main(public static void main(String argsString args)Java 语言编程技术23JAVA命令行参数(续)每一个数组元素存储一个命令行参数,每一个数组元素存储一个命令行参数,数组元素的下标从数组元素的下标从0 0开始开始数组元素的下标从数组元素的下标从0 0开始开始数组长度根据实际输入的命令行参数数组长度根据实际输入的命令行参数数组长度根据实际输入的命令行参数数组长度根据实际输入的命令行参数个数自动调整。个数自动调整。若程序中需要的命令行参数个数多于若程序中需要的命令行参数个数多于若程序中需要的命令行参数个数多于若程序中需要的命令行参数个数多于实际给出的,会产生例外实际给出的,会产生例外ArrayIndexOutofBoundsExceptionArrayIndexOutofBoundsExceptionJava 语言编程技术24JAVA命令行参数(续)()处理命令行参数处理命令行参数检测实际输入的参数个数检测实际输入的参数个数检测实际输入的参数个数检测实际输入的参数个数public static void main(String args)public static void main(String args)for(int j=0;jfor(int j=0;jargs.lengthargs.length;j+);j+)System.out.println(argsj);System.out.println(argsj);字符串参数转换成字符串参数转换成数值参数数值参数 使用数据类型的使用数据类型的类方法类方法:使用数据类型的使用数据类型的类方法类方法:Integer.parseInt(s1);s1,s2Integer.parseInt(s1);s1,s2为为StringStringDouble valueOf(s2)doubleValue();Double valueOf(s2)doubleValue();Double.valueOf(s2).doubleValue();Double.valueOf(s2).doubleValue();例:例:testArgs.javatestArgs.javaJava 语言编程技术25JAVA命令行参数(续)()public static void main(String args)int aInt=0;float aFloat=0f;if(args.length2)System.out.println(Too short arguments!);System exit(0);System.exit(0);aInt=Integer.parseInt(args0);gp(g );aFloat=Float.valueOf(args1).floatValue();i l(l)System.out.println(aInt+aFloat+=);System.out.println(int result is:+(aInt+(int)aFloat);System out println(float result is:+(aInt+aFloat);Java 语言编程技术26System.out.println(float result is:+(aInt+aFloat);工具类库:日期类Date 构造函数构造函数Date()Date()初始化时间对象(毫秒初始化时间对象(毫秒-自自1970.1.1)1970.1.1)方法方法 方法方法long getTime()long getTime()其他若干方法其他若干方法不赞成使用(不赞成使用(deprecateddeprecated)不赞成使用(不赞成使用(deprecateddeprecated)Java 语言编程技术27工具类库:日期类Calendar Calendar(Calendar(表示日期和时间表示日期和时间)getInstance():getInstance():得到表示当前时间的实例如得到表示当前时间的实例如getInstance():getInstance():得到表示当前时间的实例,如得到表示当前时间的实例,如Calendar c =Calendar.getInstance();Calendar c =Calendar.getInstance();get(int):get(int):获取相应信息如获取相应信息如get(int):get(int):获取相应信息,如获取相应信息,如c.get(Calendar.YEAR)c.get(Calendar.YEAR)c get(Calendar HOUR)c get(Calendar HOUR)c.get(Calendar.HOUR)c.get(Calendar.HOUR)date getTime():date getTime():获取当前时间获取当前时间set(int int):set(int int):如如 c set(Calendar YEAR 1999)c set(Calendar YEAR 1999)set(int,int):set(int,int):如如 c.set(Calendar.YEAR,1999)c.set(Calendar.YEAR,1999)c.set(Calendar.MONTH,10)c.set(Calendar.MONTH,10)set(year month date):setset(year month date):set用来设置信息如用来设置信息如set(year,month,date):setset(year,month,date):set用来设置信息,如用来设置信息,如c.set(2000,10,7)c.set(2000,10,7)c set(2000 10 7 17 48 20)c set(2000 10 7 17 48 20)Java 语言编程技术28c.set(2000,10,7,17,48,20)c.set(2000,10,7,17,48,20)工具类库:Random nextDouble()nextDouble()nextFloat()nextFloat()nextGaussian()nextGaussian()nextGaussian()nextGaussian()nextInt()nextInt()nextLong()nextLong()setSeed(long)setSeed(long)setSeed(long)setSeed(long)Java 语言编程技术29工具类库:CollectionJava 语言编程技术30工具类库:Enumerationpublic interface Enumeration public interface Enumeration pppublic boolean hasMoreElements();public boolean hasMoreElements();bli ObjEl()bli ObjEl()public Object nextElement();public Object nextElement();public interface Iterator public interface Iterator ppboolean hasNext();boolean hasNext();Object next();Object next();Java 语言编程技术31void remove();void remove();枚举类型 Java 5.0Java 5.0中提供了枚举类型中提供了枚举类型public enum Grade public enum Grade A,B,C,D,F,INCOMPLETE;之前,表示特定的数据,通常使用之前,表示特定的数据,通常使用publicpublic;之前,表示特定的数据,通常使用之前,表示特定的数据,通常使用public public static final static final 的常量的常量public class OldGrade public static final int A=1;public static final int B=2;Java 语言编程技术32public static final int INCOMPLETE=6;枚举类型 遍历枚举值遍历枚举值:for(Grade g:Grade.values()System.out.println(Allowed value:+g+);例如例如 St dt jSt dt jg);例如例如 Student.javaStudent.javaJava 语言编程技术33枚举类型 带参数的枚举带参数的枚举:例:例:Sample.javaenum Size Sll(0 8)Small(0.8),Medium(1.0),L(1 2)Large(1.2);dbli iFdouble pricingFactor;Si(dbl)/构造方法构造方法Size(double p)/构造方法构造方法pricingFactor=p;Java 语言编程技术34枚举类型例:例:Sample2.java 添加方法的枚举添加方法的枚举:SipjSample3.javaenum Size Small(0.8),Medium(1.0),Large(1.2);private double pricingFactor;Size(double p)pricingFactor=p;public double getPricingFactor()ti iFtreturn pricingFactor;Java 语言编程技术35泛型(Generics)Java 5.0Java 5.0中提供了泛型中提供了泛型public class Point 例:例:Point.javapublic class Point T x;T y;y;public Point(T x,T y)this.x=x;this.y=y;public void setX(T x)public void setX(T x)this.x=x;public void setY(T y)this.y=y;Java 语言编程技术36泛型(Generics)严格的类型检查严格的类型检查 严格的类型检查严格的类型检查 消除了绝大多数的类型转换消除了绝大多数的类型转换List numberListALi t()=new ArrayList();List myList neArra List();=new ArrayList();例:例:GenericListTest.javaJava 语言编程技术37上机作业 编写一个程序,如果没有命令行参数,编写一个程序,如果没有命令行参数,有统性性性值有统性性性值则列出所有系统属性(属性属性值),则列出所有系统属性(属性属性值),如果有命令行参数,则根据命令行参数如果有命令行参数,则根据命令行参数如果有命令行参数,则根据命令行参数如果有命令行参数,则根据命令行参数显示指定的系统属性(属性属性值)显示指定的系统属性(属性属性值)。完成附录完成附录A A后练习后练习2 23 37 7 完成附录完成附录A A后练习后练习2 2、3 3、7 7Java 语言编程技术382 Create a class Create a class MyStringMyString containing a containing a StringStringobject that you initialize in the constructor usingobject that you initialize in the constructor usingobject that you initialize in the constructor using object that you initialize in the constructor using the constructors argument.Add a the constructors argument.Add a toString(toString()method and a methodmethod and a method concatenate(concatenate()that appendsthat appendsmethod and a method method and a method concatenate(concatenate()that appends that appends a a StringString object to your internal string.Implement object to your internal string.Implement clone(clone()in in MyStringMyString.Create two.Create two staticstatic methods methods ygygthat each take a that each take a MyString xMyString x reference as an reference as an argument and call argument and call x.concatenate(test)x.concatenate(test),but in,but