动力节点-java常用类

上传人:平*** 文档编号:16014942 上传时间:2017-11-06 格式:DOC 页数:17 大小:156.75KB
返回 下载 相关 举报
动力节点-java常用类_第1页
第1页 / 共17页
动力节点-java常用类_第2页
第2页 / 共17页
动力节点-java常用类_第3页
第3页 / 共17页
动力节点-java常用类_第4页
第4页 / 共17页
动力节点-java常用类_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《动力节点-java常用类》由会员分享,可在线阅读,更多相关《动力节点-java常用类(17页珍藏版)》请在金锄头文库上搜索。

1、 1 / 171. 纲要a) Stringb) StringBufferc) 基础类型对应的 8 个包装类d) 日期相关类e) 数字相关类f) Randomg) Enum2. 内容1.1 2.1、String1.1.1 2.1.1、String 类是不可变类,也就是说 String 对象声明后,将不可修改public class StringTest01 public static void main(String args) String s1 = a;String s2 = b;s1=s1 + s2; /ab/new String(“a”);System.out.println(s1);

2、2 / 17从以上内存图,大家可以看到,String 对象赋值后不能再修改,这就是不可变对象,如果对字符串修改,那么将会创建新的对象注意:只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里,如果是运行时对字符串相加或相减会放到堆中(放之前会先验证方法区中是否含有相同的字符串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然后再返回该对象的地址)1.1.2 2.1.2、String s1 = “abc”和 String s2 = new String(“abc”)public class StringTest02 public static void mai

3、n(String args) String s1 = abc;栈s1s2方法区(常量池)abab堆temp 3 / 17String s2 = abc;String s3 = new String(abc);System.out.println(s1=s2, + (s1=s2);System.out.println(s2=s3, + (s2=s3);System.out.println(s2 equlas s3, + (s2.equals(s3); 栈s1s2s3方法区(常量池)abc堆abc 4 / 17 如果是采用双引号引起来的字符串常量,首先会到常量池中去查找,如果存在就不再分配,如果不

4、存在就分配,常量池中的数据是在编译期赋值的,也就是生成 class 文件时就把它放到常量池里了,所以 s1 和 s2 都指向常量池中的同一个字符串“abc” 关于 s3,s3 采用的是 new 的方式,在 new 的时候存在双引号,所以他会到常量区中查找“abc”,而常量区中存在 “abc”,所以常量区中将不再放置字符串,而 new 关键子会在堆中分配内存,所以在堆中会创建一个对象 abc,s3 会指向 abc 如果比较 s2 和 s3 的值必须采用 equals,String 已经对 eqauls 方法进行了覆盖1.1.3 2.1.3、String 面试题分析String s1 = new

5、String(hello) ;String s2 = new String(hello) ;以上代码创建了几个对象?通过以上分析,大家会看到创建了 5 个对象,堆区中 2 个,常量池中 1 一个,栈区 2 个栈s1s2堆hellohello方法区(常量池)hello 5 / 17通过以上分析,使用 String 时,不建议使用 new 关键字,因为使用 new 会创建两个对象 记住:堆区中是运行期分配的,常量池中是编译器分配的1.1.4 2.1.4、String 常用方法简介1. endsWith:判断字符串是否以指定的后缀结束2. startsWith,判断字符串是否以指定的前缀开始3. e

6、quals,字符串相等比较,不忽略大小写4. equalsIgnoreCase,字符串相等比较,忽略大小写5. indexOf,取得指定字符在字符串的位置6. lastIndexOf,返回最后一次字符串出现的位置7. length,取得字符串的长度8. replaceAll,替换字符串中指定的内容9. split,根据指定的表达式拆分字符串10. substring,截子串11. trim,去前尾空格12. valueOf,将其他类型转换成字符串1.1.5 2.1.5、使用 String 时的注意事项因为 String 是不可变对象,如果多个字符串进行拼接,将会形成多个对象,这样可能会造成内存

7、溢出,会给垃圾回收带来工作量,如下面的应用最好不要用 String【代码示例】public class StringTest04 public static void main(String args) String s = ;for (int i=0; i100; i+) /以下语句会生成大量的对象/因为 String 是不可变对象/存在大量的对象相加或相减一般不建议使用 String/建议使用 StringBuffer 或 StringBuilders+=i;/ s = s+i; 6 / 17 1.1.6 2.1.5、正则表达式初步正则表达式,主要可以用来做字符串处理,可以描述特定的字符模

8、式,如:”a2”表示由两个字符“a” 构成的字符串,等同于普通字符串 “aa”,如”d”代表任意一个数字 09public boolean matches(String regex),返回此字符串是否匹配给定的正则表达式。public String replaceAll(String regex, String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。public class StringTest05 public static void main(String args) String s1 = asdd33dfsda

9、f33ddsd55fdd3dssf4343sdf455ddsdddh565gggh55ddhg;/将 dd 替换为中 System.out.println(s1.replaceAll(dd, 中);/将 dd 替换为中 System.out.println(s1.replaceAll(d2, 中);/将数字替换为中 System.out.println(s1.replaceAll(d, 中);/将非数字替换为中System.out.println(s1.replaceAll(D, 中); 7 / 171.2 2.2、StringBuffer 和 StringBuilder1.2.1 2.2.1

10、、StringBufferStringBuffer 称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。StringBuffer 是可变对象,这个是 String 最大的不同public class StringBufferTest01 public static void main(String args) StringBuffer sbStr = new StringBuffer();for (int i=0; i100; i+) /sbStr.append(i);/sbStr.append(,);/方法链的编程

11、风格sbStr.append(i).append(,);/拼串去除逗号/sbStr.append(i);/if (i != 99) / sbStr.append(,);/可以输出System.out.println(sbStr);System.out.println(); 8 / 17System.out.println(sbStr.toString();System.out.println();/去除逗号System.out.println(sbStr.toString().substring(0,sbStr.toString().length()-1);System.out.println

12、();System.out.println(sbStr.substring(0, sbStr.length()-1); 1.2.2 2.2.2、StringBuilder用法同 StringBuffer,StringBuilder 和 StringBuffer 的区别是 StringBuffer 中所有的方法都是同步的,是线程安全的,但速度慢,StringBuilder 的速度快,但不是线程安全的1.3 2.3、基本类型对应的包装类1.3.1 2.3.1、包装类概述基本类型的包装类主要提供了更多的实用操作,这样更容易处理基本类型。所有的包装类都是 final 的,所以不能创建其子类,包装类都是

13、不可变对象基本类型 包装类byte Byteshort Shortchar Characterint Integerlong Longfloat Floatdouble Doubleboolean Boolean 9 / 171.3.2 2.3.2、类层次结构 ObjectBolean CharcterNumberByte Short Integer Long Float Double除了 boolean 和 Character 外,其它的包装类都有 valueOf()和 parseXXX 方法,并且还具有byteVaue(),shortVaue(),intValue(),longValue(

14、),floatValue()和 doubleValue()方法,这些方法是最常用的方法public class IntegerTest01 public static void main(String args) int i1 = 100;Integer i2 = new Integer(i1);double i3 = i2.doubleValue();String s = 123;int i4 = Integer.parseInt(s);Integer i5 = new Integer(s);Integer i6 = Integer.valueOf(s); 10 / 171.3.3 2.3.

15、4、JDK5.0 的新特性在 JDK5.0 以前,包装类和基本类型做运算时,必须将包装类转换成基本类型才可以,而JDK5.0 提供 Auto-boxing/unboxing(自动装箱和拆箱) 自动将基础类型转换为对象 自动将对象转换为基础类型public class IntegerTest01 public static void main(String args) /jdk1.5 以前版本,必须按如下方式赋值Integer i1 = new Integer(100);/jdk1.5 及以后版本支持/自动装箱Integer i2 = 100;/jdk1.5 及以后版本支持/自动拆箱int i3 = i2;/jdk1.5 以前版本,必须按如下方式赋值int i4 = i2.intValue(); 1.4 2.4、日期类常用日期类:java.util.Datejava.text.SimpleDateFormatjava.util.Calendarimport java.util.Date; 11 / 17import java.text.SimpleDateFormat;import java.util.Calendar;public class DateTest01 public static void main(String

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号