java语言之常用类._第1页
java语言之常用类._第2页
java语言之常用类._第3页
java语言之常用类._第4页
java语言之常用类._第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021年7月11日1 2021年7月11日2 主要内容 nJDKJDK文档阅读文档阅读 nObjectObject类类 nStringString类和类和StringBufferStringBuffer类类 n包装类包装类 nMathMath类类 2021年7月11日3 Object类 toString() nJDK文档的阅读 nObject类是java中所有的类的基类,即使你没有指明从该类继 承,java也会自动帮你添加extends Object; npublic String toString() ,用于描述当前对象的有关特征; n回顾:“”号规则。在“”的两边只要有一个是字符串时,

2、发生什么情况全部转化为字符串,从本质上来看是调用了 该对象的toString()方法; TestToString.java 2021年7月11日4 Object类 equals(Objectobj) n什么叫相等? n代表的是同一个对象; nEquals代表的是对象的内容相同,什么叫内容相同, 由equals方法决定; npublic boolean equals(Objectobj) ,一般来讲子 类需要重写equals方法;例如:Jdk中的String类就 重写了equals方法; TestEquals.java 2021年7月11日5 Object类 finalize() nC+需要程序

3、员回收对象,java则交由垃圾收集器来 自动处理无用对象; n垃圾收集器工作的条件,系统中至少存在一个以上的 无用对象; n垃圾收集器工作的时间由系统决定,因此无法预测; n垃圾收集器收集该对象的前提条件:一是该对象已没 有任何引用指向它;二是当前的内存紧张; nprotected void finalizefinalize()在垃圾收集器收集该对象时 调用 TestFinalize.java 2021年7月11日6 Object类 clone() n问题:如果你要拷贝一个对象,怎么办?自己写代码 拷贝对象中的各个属性可以吗? n考虑:如果其中的属性有的是引用变量,怎么办? emp1 Empl

4、oyee Addresshomeadd emp2 Employee Addresshomeadd 火车站,凯旋大厦 2021年7月11日7 Id:1 Name:zhangsan Con:0X9999Tel:8888888 P1:0 x8888 P2:0 x7777 Id:1 Name:zhangsan Con:0X9999 Tel:444488 2021年7月11日8 Object类 clone() n浅拷贝是指当对象的字段值被拷贝时, 字段引用的对象不会被拷贝。 n深拷贝是对对象实例中字段引用的对象 也进行拷贝的一种方式。 n简单地说,浅拷贝只复制顶级对象,而 深拷贝则复制对象及其子对象。

5、2021年7月11日9 Object类 clone() n观察API文档可知,clone()方法为protected,所以在用户代码中除非继承了该 类,否则,不能直接使用该方法; n若希望实现深拷贝,则在重写clone()方法时,应该自己写一段代码,在复制两 个对象的字段的同时,还要考虑Address对象的创建。 n同时要求实现Cloneable接口,否则会抛出CloneNotSupportedException nCloneable接口:标记型接口 public Object clone() try Employee e = (Employee)super.clone(); e.add =

6、(Address)this.add.clone() return e; catch (CloneNotSupportedException ex) ex.printStackTrace() ; TestClone2.java 2021年7月11日10 思考题 n请思考在学习了clone之后,使用如果要拷贝 数组,你可以如何处理? 2021年7月11日11 ninta=1,2,3,4,56,7,8; nintb=(int)a.clone(); n如果是对象数组呢? 2021年7月11日12 String 类的构造方法 构造方法构造方法说明说明 String()它将创建一个空字符串 String(

7、String value) 它将新建一个字符串作为指定字符串的 副本 String (char value)它将根据字符数组构造一个新字符串 String (char value, int offset,int length) 它将根据字符数组的第offset个起构造 一个长度为length的新字符串 String(byte value) 它将通过转换指定的字节数组新建一个 字符串 String类位于java.lang包中,它代表一个不可 变的字符序列。 2021年7月11日13 “hello”和new String(“hello”)的 区别 nString s1 = “hello”; nSt

8、ring s2 = “hello”; nString s3 = new String(“hello”) ; nString s4 = new String(“hello”) ; nSystem.out.println(s1=s2) ; nSystem.out.println(s1.equals(s2) ; nSystem.out.println(s3=s4) ; nSystem.out.println(s3.equals(s4) ; n能分析清楚其中的内存运行情况吗? 2021年7月11日14 字符串的访问 npublicintlength(),用于返回String的长度,注意和 数组的len

9、gth相区别; npubliccharcharAt(intindex)返回字符串在第index 个位置上的字符 nindexOf和lastIndexOf ngetBytes 现的位置 String s = new String(hellohellohello) ; System.out.println(s.indexOf(e) ; /1 System.out.println(s.indexOf(e,2) ; /6 System.out.println(s.indexOf(ell) ; /1 System.out.println(s.lastIndexOf(e) ; /11 System.out

10、.println(s.lastIndexOf(ell) ; /11 2021年7月11日15 String练习 n把十六进制的字符串,例如:“AC01”,转换 为10进制整数 TestHexToDec.java 2021年7月11日16 字符串的比较 public boolean regionMatches(inttoffset, Stringother, intooffset, intlen) boolean equalsIgnoreCase (String value) 此方法比较两个字符串, 忽略大小写形式 int compareTo(String value) 按字典顺序比较大小 Sy

11、stem.out.println(pareTo(aaa) ; /0 System.out.println(“pareTo(aaa) ; /1 System.out.println(pareTo(“bbb) ; /-1 “abc”,”bbb”,”xyz”,”wab”,”aadaad” 请按字典序列将他们排序输出 2021年7月11日17 String练习 Strings=new String(“helloHellohelloHelloHello”); 编写代码,求出s字符串的长度 查询出该字符串中第10个字符为哪一个 把该字符串中的hello全部替换为Happy! 判断从第5个位置开始是否为“H

12、ello”子串 求出该字符串中从第8个到第12的子串; s.length() s.charAt(10); s.repalceAll(“hello”,”happy”); s.startsWith(Hello,5); s.substring(8,12) 2021年7月11日18 其他重要方法 public String split(Stringregex) 分别输出一个Email地址的域名和用户名; 输入一个浮点数,分别输出他们的整数部分和小数部 分; public boolean startsWith(Stringprefix) public boolean endsWith(Stringsuf

13、fix) public String toLowerCase() public String toUpperCase() 2021年7月11日19 String的静态方法valueOf() n给出inti=10;floatf=3.14f;doubled= 1.008; n把它们变换为字符串; nStringstrI=String.valueOf(i); nStringstrF=String.valueOf(f); nStringstrD=String.valueOf(d); 2021年7月11日20 String练习 n实现文本编辑器中常用的查找和替换功能; n查找时不仅要指出第一次出现的位置

14、,还要指出在该字符串 中一共有多少个,并打印出所有出现的开始位置; n注意替换时分别实现默认替换第一个和全部替换功能; n输出一个字符串中所有的小写英文字母、大写英文字母以 及所有的非英文字母; TestSearchAndReplace.java TestString2.java 2021年7月11日21 String和StringBuffer nBuffer的作用:调节大小不匹配、速度不匹配的数据交换; nStringBuffer表示的是可变的字符串; n注意分析可变和不可变的内存模型; 构造方法构造方法说明说明 StringBuffer() 建立一个空的字符缓冲区,默认大小16个 字节 S

15、tringBuffer(int length) 建立一个length长的空的字符缓冲区 StringBuffer(String str) 建立一个字符串,内容为str,并在它后面 附加16个字节的缓冲区 方法方法说明说明 s.Length()返回字符串的长度 s. capacity() 返回字符串字符缓冲区的长度 2021年7月11日22 String和StringBuffer nString中的方法: substring(),concat(),toLowerCase(),toUpperCase(),trim(),repla ceFirst(),replaceAll()等方法都是返回一个新的字

16、符串,而没有 改变原来的字符串; nStringBuffer中的方法:append(),insert(),delete(),repalce()等方 法都是能改变原字符串的值; nStringBuffer中的reverse()方法; TestString3.java 2021年7月11日23 String和StringBuffer nString类重写了Object的equals方法,因此: qString str1 = new String(“hello”) ; qString str2 = new String(“hello”) ; qStr1.equals(str2) ; /true nS

17、tringBuffer没有重写Object的equals方法,因此: qStringBuffer strB1 = new String(“hello”) ; qStringBuffer strB2 = new String(“hello”) ; qStrB1.equals(strB2) ; /flase nString类能用“”连接,而StringBuffer类不能用“”连 接 ; 2021年7月11日24 Java包装类 n基本数据类型不是类 nJava中的包装类为Java封装了基本数据类型,并为它提供 了相应的操作; 原始数据类型原始数据类型包装类包装类 byte(字节)Byte char

18、(字符)Character int(整型)Integer long(长整型)Long float(浮点型)Float double(双精度)Double boolean(布尔)Boolean short(短整型)Short 2021年7月11日25 包装类的层次 Java.long.ObjectJava.long.NumberByte Short Int Long Float Double Character Boolean 继承自Number类的都有byteValue、shortValue等方法; 都有parseXXX等方法 都有ValueOf方法 包装类都是final类 Jdk1.5之后允

19、许包装类和基本类型混合运算 2021年7月11日26 Long n考虑需求: n把long转换为Long n把Long转换为long n把Long转换为int n把Long转换为short n把Long转换为double n把Long转换为float n把String类型转换为 Long n把Long转换为String n把Long分别转换为二 进制、八进制、十六进 制字符串 考虑需求: new Long(123L) Long.valueOf(123L) Long变量.longValue() Long变量.intValue() Long变量.shortValue() Long变量.double

20、Value() Long变量.floatValue() new Long(“13”) Long.parseLong(“12”) Long.toString() Long.toBinaryString(123L) Long.toOctalString(123L); Long.toHexString(123); 2021年7月11日27 包装类和String练习 n给出字符串“ 3.14, 2.2 ,1.1; 2.9 , 2.1; 3.0, 12.5, 5, 8; 9” n要求把该字符串转化为一个二维的double类型的数组,并输 出; TestConvert.java n给出数字12345678

21、 n输出为“12,345,678”字符串 TestConvert2.java n修改TestConvert2.java,输入的长整数以及分割符和分 割的长度都作为参数输入,修改为TestConvert3.java TestConvert3.java 2021年7月11日28 Math n其中基本上都是静态方法; nMath是final类型; nMath的构造函数是private修饰的,因此,它 不能被实例化; n其中包含两个常数E(自然对数)和PI(圆周 率); 2021年7月11日29 Math 方法方法说明说明 doublesin(double numvalue) 计算角numvalue的

22、正弦值 doublecos(double numvalue) 计算角numvalue的余弦值 doublepow(doublea, doubleb) 计算a的b次方 doublerandom();返回0.0到1.0的随机数 doublesqrt(double numvalue) 计算给定值的平方根 intabs(intnumvalue)计算int类型值numvalue的绝对值, 也接收long、float和double类型的参 数 doubleceil(double numvalue) 返回大于等于numvalue的最小整数值 doublefloor(double numvalue) 返回小于

23、等于numvalue的最大整数值 2021年7月11日30 Java.util.Random类 方法方法说明说明 Random()构造方法 Random(longseed)构造方法,以seed作为种子 nextInt()返回int类型的随机数 nextInt(inti)返回0到i的之间的随机整数 nextLong()返回Long类型的随机数 nextFloat()返回Flaot类型的随机数,介于0到1之间 nextDouble()返回Double类型的随机数,介于0到1之 间 nextBoolean()返回Boolean类型的随机数 setSeed(longseed)设置seed种子 2021

24、年7月11日31 Random练习 n使用Random生成一个6X6的介于01000之 间的随机int型的矩阵,并给出一个数,查找它 是否在此随机矩阵中; TestRandom.java 2021年7月11日32 Java.util.Arrays类 方法方法说明说明 binarySearch二分查找 fill填充指定的值 sort把数组进行排序 equals比较是否相等 toString TestArrays.java 2021年7月11日33 课堂练习 n创建Dog类,其中含有weight,color等属性。 n使用Arrays对Dog进行排序。 n使用Arrays对Dog进行binaryS

25、earch。 n分析:对Dog类中是否需要进行equals方法的 重写。 n结论:二分查找,前提是排序,然后要注意使 用的是comparable接口进行二分比较和查找。 2021年7月11日34 练习 n编写矩阵的乘法。 n编写一个能对100万维的矩阵进行乘法的代码。 (分块) n在学习了图形编程后,测试Random中的产生 正态分布的方法nextGussian。 2021年7月11日35 Date nDate类包装了一个long类型的数据,表示距 离GMT的1970年1月1日0:0:0相距的毫秒 数; n常规的使用方法: qDate date = new Date(); qdate.getT

26、ime() ; qnew Date()等价于new Date(System.currentTimeMillis(); 2021年7月11日36 java.text.DateFormat n用于定制日期的格式 n常用的是DateFormat的子类 SimpleDateFormat n常用的用法: Date date = new Date() ; /设定日期格式,以下的EEEE表示星期 SimpleDateFormat f = new SimpleDateFormat(yyyy-MMMM-dd-EEEE) ; System.out.println(f.format(date) ; /设定日期格式

27、f = new SimpleDateFormat(yy/MM/dd hh:mm:ss) ; System.out.println(f.format(date) ; 2021年7月11日37 java.text.DateFormat n常用方法:parse把日期字符串解析为Date类的对象 nnewSimpleDateFormat(_format).parse(_date); TestDateParser.java n练习给出了“2008年01月22日15:04:13”和“2006年12月 22日1:02:23”两个字符串,试求出两者相距的天数; TestDateParser1.java 2021年7月11日38 java.util.Calendar n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论