资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
江西师范大学计算机信息工程学院计算机科学系,面向对象程序设计课程组 ,面向对象程序设计,目 录,第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章 类的管理及常用工具类,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 包,好的编程习惯:为每个类都指定一个包;导入时,导入类而不是导入包。,9/28,类的访问权限 缺省:该类只能被同一包中的类访问 public:该类可被包外的类访问 当然,访问前需要导入,或者使用 包名+类名格式,5.1.3 访问权限,A、B、C、D可以访问哪些类?,10/28,类中成员的访问权限 成员的访问权限:四种 注意:纵向看,只有两种:能访问、不能访问,5.1.3 访问权限,对同一类而言,成员相互间可任意访问,无权限之分。,对同处一包的类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 ,5.5 字符串的高级应用,23/28,java正则表达式的常用描述符号,java正则表达式的常用描述符号,正则表达式示例: aeiou 匹配 a、e、i、o、u中的任何一个字符 abc 匹配 a、b、c之外的任何一个字符 a-cA-c 匹配 a、b、c、A、B、C中的任一字符 a-c0-2匹配 a、b、c、0、1、2之外的任一字符 (abc)3 匹配 abcabcabc a-dx-z 等价于 a-dx-z a-z&bc 表示除b、c之外的所有小写英文字母,24/28,正则表达式 构造正则表达式类似构造SQL语句,类似编程 不同语言在描述正则表达式时略有不同。 Pattern和Matcher(位于java.util.regex包) 专用于正则表达式处理,处理方法(类似KMP算法):现对正则式编译优化,然后再匹配。,5.5 字符串的高级应用,基本示例:Ch_5_9.java、Ch_5_10.java 综合示例:C 标识符的识别 IdentifyID.java,25/28,String类中支持正则表达式的相关方法 String split(String regex)/regex是分隔串 String replaceFirst(String regex, String rp) String replaceAll(String regex, String rp) 注意:参数rp不支持正则表达式,5.5 字符串的高级应用,基本示例:Ch_5_11.jav
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号