设计类、包装类和字符串

十二、设计类

1.单例模式

  • 此类创建的对象永远只能有一个

  • 两类:

  • 1、饿汉模式:苯类的模式

  • 2、懒汉模式:WangMu.java

  • 方案:

  • 1.限制当前类在其它类自主创建对象:私有构造方法

  • 2.在自己类中创建一个对象

  • 3.提供静态公有的get方法,用来获取已经创建好的对象

2.懒汉模式

  • 缺点:线程不安全

  • 解决:同步锁

十三、包装类和字符串

1.1基本数据类型与其包装类

基本数据类型:

byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、char(2字 节)、boolean(不确定)

1.1.1基本数据类型所对应的包装类

byte -------Byte

short -------Short

int -------Integer

long -------Long

float -------Float

double -------Double

char -------Character

boolean -------Boolean

1.1.2数据的装箱和拆箱

拆箱:将包装类型数据转换成基本类型数据

装箱:将基本类型数据包装成引用类型数据

装箱:使用包装类中的构造方法,或静态valueOf方法

例1 int a = 5;

Integer i = new Integer(a);

例2 double b = 3.0;

Double d = Double.valueOf(b);

拆箱:使用包装类中的xxValue方法

例1 Integer i = new Integer(5);

int a = i.intValue();

自动拆箱:直接将包装类对象数据赋值给基本类型变量

注意:-128和127之间自动装箱的对象会进入Integer通过静态内部类实现的一个缓存区(Integer.valueOf方法中会进行缓存操作),如以下方法产生的Integer对象都会放入缓冲区:

Integer num=100;

Integer num=Integer.valueOf(100);

Integer num=scanner.nextInt();//自动装箱

1.1.3基本类型与字符串之间的相互转换

基本类型转字符串:

字符串连接符:任何基本类型数据与字符串链接都变成字符串形式

String类中的valueOf方法:

字符串转基本类型

包装类中的parseXxx方法:

注意:

\1. 字符串不能直接转成字符类型,需要使用String类中的charAt方法去字符串中取一个字符

\2. 若字符串转数值类型时,若字符串中存在不能表示数值的字符时,抛出NumberFormatException异常

\3. 字符串转布尔类型时,当且仅当字符串是“true”时,结果为true,否则其他任意字符串转布尔类型结果都是false

包装类中的valueOf方法:

注意:

\1. 可以使用包装类中的valueOf(String str)方法:Character类中没有valueOf(String str)方法

\2. valueOf方法返回值类型是包装类对象,所以在jdk1.5之前不能使用此方法实现字符串转基本类型

1.2字符串

String类是final的,是不允许被继承的。同时String对象的内容也不可改变,

1.2.1String类

1.2.1.1常用构造方法

API

*String()

创建出一个字符串对象,此字符串中没有任何字符,空字符串 String(byte[] bytes, *String charsetname)

通过使用指定的charset解码指定的 byte 数组,构造一个新的

*String String(String str)

初始化一个新创建的String对象,使其表示一个与参数相同的字符序列

1.1.2.1.2常用的成员方法

\1. 获取字符串的长度:

API

int length(); //返回此字符串的长度。

\2. 获取某个字符或者字符串在原字符串中第一次出现的位置

API

int indexOf(int ch)

返回指定字符在此字符串中第一次出现处的索引。

int indexOf(int ch, int fromIndex)

返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

int indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(String str, int fromIndex)

回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

\3. 获取某个字符或者字符串在原字符串中最后一次出现的位置

API

int lastIndexOf(int ch)

返回指定字符在此字符串中最后一次出现处的索引。

int lastIndexOf(int ch, int fromIndex)

返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。

int lastIndexOf(String str)

返回指定子字符串在此字符串中最右边出现处的索引。

int lastIndexOf(String str, int fromIndex)

返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索

\3. 获取某个字符或者字符串在原字符串中最后一次出现的位置

API

int lastIndexOf(int ch)

返回指定字符在此字符串中最后一次出现处的索引。

int lastIndexOf(int ch, int fromIndex)

返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。

int lastIndexOf(String str)

返回指定子字符串在此字符串中最右边出现处的索引。

int lastIndexOf(String str, int fromIndex)

返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索

\5. 判断字符串中是否包含某个子字符串

API

boolean contains(CharSequence s)

当且仅当此字符串包含指定的 char 值序列时,返回 true。

\6. 判断字符串中是否有内容

API

boolean isEmpty()

当且仅当 length() 为 0 时返回 true。

\7. 判断字符串是否是以某个前缀开始的

API

boolean startsWith(String prefix)

测试此字符串是否以指定的前缀开始。

\8. 判断字符串是否是以某个后缀开始的

API

boolean endsWith(String suffix)

测试此字符串是否以指定的后缀结束。

\9. 判断字符串的内容是否相等

API

boolean equals(Object anObject)

将此字符串与指定的对象比较

\10. 忽略大小写相等比较

API

boolean equalsIgnoreCase(String anotherString)

将此 String 与另一个 String 比较,不考虑大小写。

\11. 替换

API

String replace(char oldChar, char newChar)

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar得到的。

String replace(CharSequence target, CharSequence replacement)

使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

\12. 截取

API

String substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。

\13. 去除前面和尾部的空格

API

String trim()

返回字符串的副本,忽略前导空白和尾部空白。

\14. 格式化字符串:将字符串按照指定的格式输出

API

static String format(String format, Object... args)

使用指定的格式字符串和参数返回一个格式化字符串。

%f float

%d 整型

%s 字符串

%c char

%b boolean

注意:可以保留小数点后几位

\15. 比较

API

int compareTo(String anotherString)

按字典顺序比较两个字符串。

int compareToIgnoreCase(String str)

按字典顺序比较两个字符串,不考虑大小写。

注意:

如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。

如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。

如果这两个字符串相等,则结果为 0

\16. 拼接

API

String concat(String str)

将指定字符串连接到此字符串的结尾

\17. 拆分

API

String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

1.2.1.3内存中的字符串

字面常量的形式创建String对象时,在编译期间会把字面常量放到class文件的字符串常量池。当虚拟机启动时,会创建一个运行时常量池,运行时常量池会存储所有被加载类文件中定义的字符串常量,也就是会按照class文件中的常量信息填充运行时常量池。

程序执行过程中,如果遇到某个String是以字面常量的形式创建的,则首先在运行时常量池中寻找是否已经存在这样这样的字符串,如果存在,则直接返回这个常量的引用

运行时常量池:jdk1.7之前 ,常量池在方法区中,jdk1.7(包括1.7)之后,常量池放在堆中。

1.2.2StringBuffer类

1.2.2.1常用构造方法

API:

StringBuffer(String str)

构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

StringBuffer()

构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。

StringBuffer(CharSequence seq)

构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。

StringBuffer(int capacity)

构造一个不带字符,但具有指定初始容量的字符串缓冲区。

1.2.2.2常用的成员方法

\1. 增加

API

StringBuffer append(String str)

StringBuffer insert(int offset, String str)

\2. 删除

API

StringBuffer delete(int start, int end)

StringBuffer deleteCharAt(int index)

\3. 修改

API

StringBuffer replace(int start, int end, String str)

void setCharAt(int index, char ch)

\4. 获取

API,和String类中的用法相同

indexOf

lastIndexOf

charAt

length

substring

\5. 反转

API

StringBuffer reverse()

1.2.3.StringBuilder**类**

StringBuilder类也是字符串缓冲区,类中的方法与StringBuffer类中的方法使用方法一样,区别在于StringBuilder**类中的方法都是线程不安全的,而StringBuffer类中的方法都是线程安全的**

1.2.4正则表达式(**Regular Expression)**

正则表达式就是一个验证字符串格式是否满足要求的字符串。

1、字符类:

 

2**、预定义字符类:**

. 任意字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\w 单词字符:[a-z A-Z _0-9]

3**、边界匹配器:**

^ 行开头

$ 行结尾

4**、数量:**

X? 一次或0次

X* 0次或多次(包括1次)

X+ 一次或多次

X{n} 恰好n次

X{n, } 至少n次

X{n,m} 至少n次,不超过m次

使用String类中的matches方法验证字符串格式:

判断电话号码、QQ邮箱格式是否匹配

使用split方法将字符串按照指定的标记拆分:

5**、扩展:**

Pattern类 :正则表达式编译类

Matcher类:匹配器

关键知识点默写

\1. 包装类:

byte- Byte

short-Short

int-Integer

long -Long

float-Float

double-Double

char- Character

boolean -Boolean

\2. Integer

如果使用 Integer 创建对象,数据在堆中存放

Integer i=100; Integer i2=100;//是同一

个对象 ,Integer中有缓存区

装箱 :基本类型转成包装类 ;拆箱:包装类转成基本类型

\3. 基本类型和字符串之间

基本类型转成字符串

字符串转成基本类型

\4.. 字符串操作

构造方法

常用方法

字符串常量池

\5. StringBuffer

增强的String, 追加 插入 替换

StringBuilder jdk1.5

区别:

1 功能一样

2 StringBuffer线程安全,StringBuilder线程不安全

3 StringBuilder效率高

6正则表达式(**Regular Expression)**

正则表达式就是一个验证字符串格式是否满足要求的字符串。

1、字符类:

 

 

2**、预定义字符类:**

. 任意字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\w 单词字符:[a-z A-Z _0-9]

3**、边界匹配器:**

^ 行开头

$ 行结尾

4**、数量:**

X? 一次或0次

X* 0次或多次(包括1次)

X+ 一次或多次

X{n} 恰好n次

X{n, } 至少n次

X{n,m} 至少n次,不超过m次

使用String类中的matches方法验证字符串格式:

判断电话号码、QQ邮箱格式是否匹配

使用split方法将字符串按照指定的标记拆分:

5**、扩展:**

Pattern类 :正则表达式编译类

Matcher类:匹配器

常见面试题

\1. String str = new String("abc");创建出了几个字符串对象? 2个

\2.b1,b2,b3,b4的值分别是多少?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新手菜鸟大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值