类的管理以及常用工具类

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

江西师范大学·计算机信息工程学院·计算机科学系要知其然,更要知其所以然。目录第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章类的管理及常用工具类1.全面完整理解并掌握类及成员的存取权限;2.掌握包装器类引入原因和基本使用方式;理解和掌握自动拆箱/自动装箱机制;3.理解紧凑型for循环和正则表达式。本章重点3/28要知其然,更要知其所以然。包包的声明和导入访问权限5.1包4/28要知其然,更要知其所以然。包是类/接口的管理机制包是存放类/集合的目录或压缩包。包与类的关系,类似于目录/压缩包与文件;―Java类库大多以压缩包形式存储,如*.jar―实际上,lib目录下的ct.sym也是压缩包包名格式示例:UserData.NanChang.BankJava是面向网络的语言,需要借助包来区分放置于不同主机上的类、类库或对象。如JavaRMI(RemoteMethodInvocation)机制.5.1包5/28要知其然,更要知其所以然。声明包声明包,就是告知编译器,要将该文件编译后产生的所有.class文件,均放入指定的包中。―其中若包不存在,则会自动创建。格式:package包名1[.包名2[.包名3...]];―如:packageaa.bb.cc;语法限定:一个Java源文件中只能声明一个包,且声明语句只能作为源文件的第一条指令。5.1包6/28要知其然,更要知其所以然。导入包背景:使用包中的类,可用全名或相对名,如―全名:java.util.Scanner―相对名:Scanner,需要导入包导入包,就是设定类的搜索路径。格式:import包名1[.包名2...]].类名|接口名|*5.1包importaa.EnumDemo;importjava.util.*;importjava.util.Scanner;7/28要知其然,更要知其所以然。注意事项无法导入其它包中的非public类;要正确设置classPath环境变量,让编译器能找到系统包。Java编译器会自动导入包java.lang。如System、String、Math等均在此包。导入包不包含被导入包的子包;―如importjava.*;不能导入java.util.Scanner类对大型项目,导入时尽量指明具体类,而不要用.*的方式,后者会极大影响编译速度。5.1包8/28要知其然,更要知其所以然。无名包问题无名包:若源文件中未用package声明,则编译后产生的.class文件自动放置于无名包。例如:―A.class位于无名包;B.class位于包X影响:无名包中的类无法被导入。换言之,无名包中的类无法被其它包中的类使用。5.1包A.javapublicclassA{}B.javapackageX;publicclassB{}好的编程习惯:为每个类都指定一个包;导入时,导入类而不是导入包。9/28要知其然,更要知其所以然。类的访问权限缺省:该类只能被同一包中的类访问public:该类可被包外的类访问―当然,访问前需要导入,或者使用包名+类名格式5.1.3访问权限packagep1publicclassA{}classB{}A.javapackagep2publicclassC{}classD{}C.javaA、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访问权限packageX;publicclassA{publicintx1;protectedintx2;intx3;privateintx4;}classB{}packageY;importX.A;publicclassC{}classDextendsA{}12/28要知其然,更要知其所以然。包装器类的引入背景包装器类的构造函数包装器类的常用方法自动装箱和自动拆箱5.2包装器类和自动装箱/拆箱13/28要知其然,更要知其所以然。背景:提供与基本类型相关的常用功能操作基本类型使用频繁,需用汇编/C等单独实现;why?基本绑定的操作方法太少,功能不强。包装器类:为基本型配备的对应类。Byte、Short、Integer、Long、Float、Double、Character、Boolean包装器类主要实现了两种功能:实现基本类型与引用类型之间的自动转换。实现基本类型与String类型之间的相互转换。5.2包装器类和自动装箱/拆箱这6种均属Number类的子类14/28要知其然,更要知其所以然。包装器类的使用构造函数:―包装器类名(基本类型值)或―包装器类名(基本类型值的字符串)常用方法―基本类型xxxValue();//转成特定数值型―staticxxxparseXxx(Strings);//String转基本型xxx―staticWvalueOf(Strings);//String转包装器型W5.2包装器类和自动装箱/拆箱Integeri1=newInteger(5);Integeri2=newInteger(5);Integeri3=newInteger(1.25);//运行时报错Doubled=i1;//编译错Booleanb=newBoolean(ture);//正确Booleanb=newBoolean(TRUE);//正确字符串转Double:Doubled=Double.valueOf(1.2);字符串转double:doubled=Double.parseDouble(1.2);double转字符串:Strings=Double.toString(3.14);double转byte:byteb=(newDouble(3.14)).byteValue();15/28要知其然,更要知其所以然。自动装箱和拆箱自动装箱:基本型自动转换为对应包装器型自动装箱:包装器型自动转换为对应基本型―如:Doublea=1.2;doubleb=a;自动装箱、拆箱可能隐含错误例如:Integeri=null;intj=i;//运行时错等同于:Integeri=null;intj=i.intValue();注意:jDK1.5才引入对Boolean的自动拆箱如:Booleanb=newBoolean(ture);if(b)--此句在JDK1.5之前环境中发生编译错5.2包装器类和自动装箱/拆箱16/28要知其然,更要知其所以然。枚举(JDK1.5新增机制)格式:enum枚举类型名{枚举常量表}所有的枚举型都隐式地继承自Java.lang.Enum―该类是一个泛型类,任何类都不能直接扩展该类。―枚举常量按定义顺序分别对应索引值0、1、2、…等,并自动具备public、static、final等属性。―编译器为枚举型附加两静态方法(类Enum中无此方法):5.3枚举enumWeek{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}Weekw;w=Week.FRIDAY;w=SUNDAY;//编译错1、publicstaticE[]values(),返回一个枚举型数组,包含所有枚举常量,各常量位置按声明顺序存储2、publicstaticEvalueOf(Stringname)返回枚举常量name;若该常量未定义则运行时抛出异常。示例详见:ch_5_5.java17/28要知其然,更要知其所以然。紧凑型for循环结构拷贝数组Arrays工具类5.4数组的高级应用18/28要知其然,更要知其所以然。for-each循环结构(JDK1.5新增)格式:for(Tyepe:exp)S;其中exp是数据集对象(必须是数组或实现了Iterable接口的对象)。e是循环变量(相当于exp中的元素)。执行方式为:―1.)从exp中取出下一个元素赋值给e,执行语句S;―2.)若exp所有元素均已迭代,则循环结束;否则,转1)。注意:e不能在for-each结构之外定义。5.4数组的高级应用voidf(){int[]a={1,2,3,4,5};inti=0;for(i:a)System.out.print(+i);//编译错for(intj:a)System.out.print(+j);//正确}19/28要知其然,更要知其所以然。arraycopy:位于System类,用于数组复制voidarraycopy(Objectsrc,intp1,Objectdest,intp2,intlen)―将src[p1...p1+len-1]复制到dest[p2...p2+len-1]中Arrays是数组的工具类,存于java.util包中Arrays提供了用于处理数组的常用静态方法,包括排序sort、binarySearch(前提是数组必须要有序)、比较数组元素是否相等equals、填充数组元素fill等。5.4数组的高级应用示例详见Ch_5_6.java、Ch_5_7.java20/28要知其然,更要知其所以然。StringBuffer和StringBuilder正则表达式字符串的高级应用5.5字符串的高级应用21/28要知其然,更要知其所以然。引入期望引入大容量、可更改的字符串存储对象。StringBuffer类该类对象可看作是一个用于存储字符串的数据块,可反复修改,重复使用。StringBuilder类JDK1.5版新增,功能与StringBuffer几乎一样,执行更高效,但在线程中使用不安全。5.5字符串的高级应用示例详见Ch_5_8.java22/28要知其然,更要知其所以然。正则表达式是一种能够刻画某种词法规则的字符串。―0[Xx]([0-9a-fA-F])+表示十六进制数,含义为:以0作开头,后接X或x,再后面就是若干个(至少1个)数字、字母(a-f或A-F)。―[a-zA-Z_]+(\\w)*:表示C的标识符,标识含义见后。应用:如何识别下面字符串中的十六进制数:08+AF-0x98AF-Bc*0XA93bf5.5字符串的高级应用23/28要知其然,更要知其所以然。java正则表达式的常用描述符号java正则表达式的常用描述符号元字符描述:表达特定含义量词描述:表达重复次数元字符含义元字符含义量词含义\d数字\D数字以外的字符X?表示X至多重复1次(即X要么不出现,要么出现1次).任何一个字符\w字字符(字母、数字、下划线)X*表示X重复多次(≥0次)X+表示X重复多次(≥1次)\s空白字符[]要查找的字符集\W字字符以外的字符X{n}X重复n次-一段连续的范围^不存在的字符X{n,}X重复至少n次&&并且()刻画一个整体X{n,m}X重复至少n次,至多m次正则表达式示例:[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之外的任一字符(ab

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功