资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,江西师范大学,计算机,信息工程,学院,计算机科学系,面向对象程序设计,课程组,面向对象程序设计,目,录,第,1,章 程序设计语言概述,第,2,章 程序设计语言的基本成分,第,3,章 程序设计方法概述,第,4,章 面向对象语言基础,第,5,章 类的管理及常用工具类,第,6,章 异常处理和断言,第,7,章 线程,第,8,章,GUI,编程基础和,applet,第,9,章,I/O,流,第,10,章 网络通信,第,11,章 泛型与集合,框架,2,/28,5.1,包,5.2,包装器,类 和,自动,装箱,/,拆箱,5.3,枚举,5.4,数组的高级应用,5.5,字符串的高级,应用,补:随机数,类,第,5,章 类的管理及常用工具类,全面完整理解并掌握类及成员的存取权限;,掌握包装器类引入原因和基本使用方式;理解和掌握自动拆箱,/,自动装箱机制;,理解紧凑型,for,循环和,正则表达式。,本章,重点,3,/28,包,包的声明和导入,访问权限,5.1,包,4,/28,包是类,/,接口的管理机制,包是,存放,类,/,集合的目录或,压缩包,。包,与类的关系,类似于,目录,/,压缩包与文件;,Java,类库大多以压缩包形式存储,如*,.,jar,实际上,,lib,目录下的,ct.sym,也是压缩包,包名格式示例:,UserData.NanChang.Bank,Java,是面向网络的语言,需要借助包,来,区分放置于不同主机上的类,、类库或对象,。如,Java,RMI(Remote,Method,Invocation),机制,.,5.1,包,5,/28,声明,包,声明包,就是告知编译器,要将该文件编译后产生的所有,.class,文件,均放,入指定,的包中,。,其中若包不存在,则会自动创建。,格式,:,package,包名,1.,包名,2.,包名,3,.;,如:,package,aa.bb.cc;,语法限定,:,一个,Java,源文件中只能声明一个包,且声明语句只能作为源文件的第一条指令,。,5.1,包,6,/28,导入包,背景:使用包中的类,,可用全名或相对名,如,全,名,:,java.util.Scanner,相对,名:,Scanner,,需要导入包,导入包,就是,设定类的搜索路径。,格式:,import,包名,1.,包名,2.,类名,|,接口名,|*,5.1,包,import aa.EnumDemo;,import java.util.*;,import java.util.Scanner;,7,/28,注意事项,无法导入其它包中的非,public,类;,要正确设置,classPath,环境变量,让编译器能找到系统包。,Java,编译器会自动导入包,java.lang,。如,System,、,String,、,Math,等均在此包。,导,入,包不包含,被导入包的子,包;,如,import,java.*,;,不能导入,java.util.Scanner,类,对大型项目,导入时尽量指明具体类,而不要用,.*,的方式,后者会极大影响编译速度,。,5.1,包,8,/28,无名,包问题,无名,包:,若,源文件中未用,package,声明,则编译后产生的,.class,文件自动放置于无名包。例如:,A.class,位于无名包,;,B.class,位于包,X,影响:无名包中的类无法被导入。换言之,无名包中的类无法被其它包中的类使用。,5.1,包,A.java,public class A,B.java,package X;,public class B,好的编程习惯:,为每个类都指定一个,包;导入时,导入类而不是导入包。,9,/28,类的访问权限,缺省:该类只能被同一包中的类访问,public,:该类可被包外的类,访问,当然,访问前需要导入,或者使用 包名,+,类名格式,5.1.3,访问权限,package p1,public,class A,class B,A.java,package p2,public,class C,class D,C.java,A,、,B,、,C,、,D,可以访问,哪些类,?,10,/28,类,中成员的访问权限,成员的访问权限:四种,注意:纵向看,只有两种:能访问、不能访问,5.1.3,访问权限,修饰符,同一类,同一包,不同包的子类,所有类,public,protected,缺省,private,对同一类而言,成员相互间可任意访问,无权限之分。,对同处一包的类,A,、,B,,,A,不能访问,B,的,private,成员,,其余均可访问。,若类,A,、,B,分处不同包,,A,只能访问,B,的,public,成员,,其余均,不能,访问。,11,/28,试,分析下面各类之间相互访问的可能,5.1.3,访问权限,package X;,public,class,A,public int x1,;,protected int,x2;,int x3,;,private,int x4,;,class,B,package Y;,import X.A;,public,class,C,class,D,extends A ,12,/28,包装器类的引入背景,包装器类的构造函数,包装器类的常用方法,自动装箱和自动拆箱,5.2,包装器类和自动装箱,/,拆箱,13,/28,背景:提供与基本类型相关的常用功能操作,基本类型使用频繁,需用汇编,/C,等单独实现;,why?,基本绑定的操作方法太少,功能不强。,包装器类,:为基本型配备的对应类。,Byte,、,Short,、,Integer,、,Long,、,Float,、,Double,、,Character,、,Boolean,包装器类主要实现了两种功能:,实现基本类型与引用类型之间的自动转换。,实现基本类型与,String,类型之间的相互转换,。,5.2,包装器类和自动装箱,/,拆箱,这,6,种均属,Number,类的子类,14,/28,包装器类的使用,构造函数:,包装器类名,(,基本类型值,),或,包装,器类名,(,基本类型值的字符串,),常用方法,基本类型,xxxValue();,/,转成特定数值型,static xxx parseXxx(String s);/String,转基本型,xxx,static W valueOf(String s);,/String,转包装器型,W,5.2,包装器类和自动装箱,/,拆箱,Integer i1=new Integer(5);,Integer i2=new Integer(5);,Integer i3=new Integer(1.25);,/,运行时报错,Double d=i1;/,编译错,Boolean b=new Boolean(ture);/,正确,Boolean b=new Boolean(TRUE);/,正确,字符串转,Double,:,Double d=Double.valueOf,(1.2);,字符串,转,double,:,double d=Double.parseDouble(,1.2,);,double,转字符串:,String s=Double.toString(3.14,);,double,转,byte,:,byte b=(new Double(3.14).byteValue();,15,/28,自动,装箱和拆箱,自动,装箱:基本型自动转换为对应包装器型,自动装箱:包装器型自动转换为对应基本型,如,:,Double a=1.2,;double,b=a,;,自动装箱、拆箱可能隐含错误,例如:,Integer,i=null;int j=i;/,运行时错,等同,于:,Integer i=null;int j=i.intValue();,注意:,jDK1.5,才引入对,Boolean,的自动拆箱,如:,Boolean b=new Boolean(ture);,if,(b)-,此句在,JDK1.5,之前环境中发生编译,错,5.2,包装器类和自动装箱,/,拆箱,16,/28,枚举,(,JDK,1.5,新增机制,),格式,:,enum,枚举类型名,枚举常量表,所有,的枚举型都隐式地继承自,Java.lang.Enum,该类是一个泛型类,任何类都不能直接扩展该类。,枚举常量按定义顺序分别对应索引值,0,、,1,、,2,、,等,并,自动具备,public,、,static,、,final,等属性,。,编译器为枚举,型附加,两静态方法,(,类,Enum,中无此方法,),:,5.3,枚举,enum Week,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;,Week w;w=Week.FRIDAY;,w=SUNDAY;/,编译错,1,、,public static E values(),,返回一个枚举型数组,包含,所有,枚举常量,各常量位置按声明顺序存储,2,、,public static E valueOf(String name,),返回枚举常量,name,;若该常量未定义则运行时抛出异常。,示例详见:,ch_5_5.java,17,/28,紧凑型,for,循环结构,拷贝数组,Arrays,工具类,5.4,数组的高级应用,18,/28,for-each,循环,结构(,JDK1.5,新增),格式:,for,(Tyep,e,:exp)S;,其中,exp,是数据集,对象,(,必须是数组或实现了,Iterable,接口的对象,)。,e,是循环变量(相当于,exp,中的元素)。执行方式为:,1.),从,exp,中取出下一个元素赋值给,e,,执行语句,S,;,2.),若,exp,所有元素均已迭代,则循环结束;否则,转,1),。,注意,:,e,不能在,for-each,结构之外定义,。,5.4,数组的高级应用,void,f,(),int,a=1,2,3,4,5;,int,i,=0;,for(,i,:,a,)System.out.print(+i);,/,编译错,for(,int j,:a)System.out.print(+j);/,正确,19,/28,arraycopy,:位于,System,类,用于数组复制,void arraycopy(Object src,int,p1,Object,dest,int,p2,int,len),将,srcp1,.p1+len-1,复制,到,destp2,.p2+len-1,中,Arrays,是数组的工具类,存于,java.util,包中,Arrays,提供了用于处理数组的常用静态方法,包括排序,sort,、,binarySearch,(前提是数组必须要有序)、比较数组元素是否相等,equals,、填充数组元素,fill,等。,5.4,数组的高级应用,示例详见,Ch_5_6.java,、,Ch_5_7.java,20,/28,StringBuffer,和,StringBuilder,正则表达式,字符串的高级应用,5.5,字符串的高级应用,21,/28,引入,期望引入大容量、可更改的字符串存储对象。,StringBuffer,类,该类对象,可看作是一个用于存储字符串的数据块,可反复修改,重复,使用。,StringBuilder,类,JDK1.5,版新增,功能与,StringBuffer,几乎一样,,执行,更高效,,但在线程中使用不安全。,5.5,字符串的高级应用,示例详见,Ch_5_8.java,22,/28,正则表达式,是,一种能够刻画某种词法规则的字符串。,0Xx(0-9a-fA-F)+,表示,十六进制数,,含义为:以,0,作开头,后接,X,或,x,,再后面就是若干个(至少,1,个)数字、字母(,a-f,或,A-F,)。,a-zA-Z_+(w,)*,:表示,C,的标识符,,标识含义见后,。,应用:如何识别下面字符串,中的十六进制数:,08+AF-0 x98AF-Bc*0XA93bf,
展开阅读全文