JAVA学习日志8(String和包装类)

本文深入讲解JAVA编程核心概念,涵盖API使用、类与库导入、String与StringBuffer操作、正则表达式应用及包装类特性。详细解读了String的内存存储机制、StringBuffer的线程安全特性以及正则表达式的匹配规则。

JAVA学习日志8

API

应用程序接口编程,也就是JDK提供的一些可以用的封装好的类或者是实现的方法 枚举,我们更关注的是怎么使用而不是实现的原理。

类与库
类与库的使用实际就是把别人已经写好的类在自己项目中的调用。

  • 步骤
    1.将已有项目导出export ,转成java下的jar文件
    在这里插入图片描述
    2.在目的项目下新建lib目录把导出的.jar文件移到lib目录下
    3.添加依赖,右键点击jar 选择build path
    4.添加成功后就可以使用jar中的类与方法
    5.删除时先删除jar在删除依赖

  • 库是由多个jar组成的,可以添加用于测试的Junit

Object
object类也叫超类是所有对象(包括数组)的父类,object没有父类。

  • toString()方法
    返回一个字符串,这个字符串代表该对象的字符串表示显示实际就是内存地址
    子类一般都会重写toSring方法,一般返回的是属性的值
  • equals()
    用来判断对象是否相等,实际判断的是两个对象的地址
    子类一般会重写equals方法,一般用来判断属性值是否相等
  • equals 和 == 的比较
    == 只能用于应用数据类型而后基本数据类型的比较,比较的是引用数据类型时比较的是地址,比较基本数据类型时比较的是值
    equals 一般都会被重写,用于引用数据类型的比较,比较的是属性值

String
String在JDK1.7以后存在堆内存的常量池里
String底层是使用字节byte数组来存储的
String是不可变的,是共享的(String是引用类型的数据,所以会在堆内存开辟空间,在堆内存里存储的实际是一个字节数组,即把字符串的每一个字符转成对对应的码值进行存储。这个数组会有一个地址,这个地址会存储在堆内存的地址池里,当Sting类型变量的值发生改变时,(如 原 String str =“a”; 现在重新赋值str =“b”)会遍历地址池里的地址,查看每一个地址所指向的内容是否和新赋值的内容相等,如果是则把这个地址给到变量,如果不是则在堆内存里开辟空间存储新值,地址放到堆内存并给到变量(如 当str=“b”,会先在地址池里找是否有这样的地址,其指向的地址里存储的也是“b”,有的话则把这个地址给到str),String类型的变量在堆里其地址和值都是不变的,但是共享的)

  • String的构造方法3+1
    public String()空字符串
    public String(byte []byte)把字节数组转换成字符串
    public String(char[] value)把多个字符转换成 字符串
    String str =”abc”

  • 一些方法
    public boolean equals(Object anObject) ==> 用于来判读两个字符串是否相等
    public boolean equalsIgnoreCase(String anotherString) ==>忽略大小写 判断时候
    public boolean contains(CharSequence s) 判断 s是否存在
    public boolean startsWith(String prefix) 判断指定前缀开始
    public boolean endsWith(String suffix) 判断指定后缀结尾
    public boolean isEmpty() 判断字符串是否为""

  • public int length() 返回字符串的长度
    public char charAt(int index) 获取指定索引下的字符
    public String substring(int beginIndex,int endIndex)表示对字符串进行截取 beginIndex 开始截取的位置 endIndex 结束的位置 包头不包尾
    public int indexOf(String str,int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,str-查找的字符串 fromIndex-从指定的索引位置开查找

  • public char[] toCharArray() 把字符串转换成一个char类型的数组
    public byte[] getBytes() 把字符串转换为 字节数组
    public String toLowerCase() 把字符转换成小写
    public String toUpperCase() 把字符转换成大写
    public String concat(String str) 字符串从尾部进行拼接 +
    public String replace(char oldChar,char newChar) 使用新的值替代就得值

StringBuffer
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区。每个字符串缓冲区都有一定的容量(初始为16字符)。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大

  • StringBuffer和String的区别
    1.String是不可变的字符序列,没有提供修改私有成员的方法;StringBuffer是可变的字符序列,提供了修改成员变量的方法
    1.String长度不可变换,StringBuffer是可变的

  • 构造方法
    public StringBuffer() 构造一个其中不带字符的字符串缓冲区,初始容量为16 个字符
    public StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
    public StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

  • 一些方法
    public StringBuffer append() 有很多重载的方法可以来插入各种类型 向末尾进行追加
    public String toString() 得到StringBuffer 具体的字符串数据
    public StringBuffer reverse() 反转 abc–>cba
    public StringBuffer replace(int start,int end,String str) 替换

  • String与StringBuffer
    String ==> 转换成 StringBuffer ==>1.通过StringBufferf的构造方法 2.通过调用 new StringBuffer().append(str)
    StringBuffer ==>转换String ==> 1.toString() 2. 通过字符串的构造方法

包装类
1.把基本数据类型进行封装,封装之后就成一个类对象

  • 包装类的好处:
    1可以调用类的属性与方法
    2.提供了基本数据类型相互进行转换 int ==>String
    3.集合中泛型必须使用的包装类 不能是基本数据类型

integer
Integer 类在对象中包装了一个基本类型 int 的值

  • 构造方法
    public Integer(int value) 构造一个新分配的 Integer 对象,它表示指定的 int 值
    public Integer(String s) 将String类型转换为Integer类型(传递的参数必须是数字的字符串否则会出错)
  • 一些static方法
    static int parseInt(String s)字符串参数作为十进制整数解析
    public static Integer valueOf(int i) 将int 类型转换为 Integer
    public static Integer valueOf(String s) 将 String 转换为 Integer

自动装箱与拆箱
1.在jdk 1.5之后有自动装箱与拆箱
2.自动装箱 ==>把基本数据类型 转换为 包装类
在这里插入图片描述
3.自动拆箱 ==> 把包装类型 转换成 基本数据类型
在这里插入图片描述
5. 手动装箱
在这里插入图片描述
6.手动拆箱: 调用方法 public int intValue()

正则表达式
1.正则表示其实就是一个字符串,每一个字符都有特殊的含义
2.作用:主要要做一些前后端的验证

[abc]a、b 或 c(简单类)
[^abc]任何字符,除了 a、b 或 c(否定)
[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]d、e 或 f(交集)
[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]a 到 z,而非 m 到 p:[a-lq-z](减去)

[] ==>表示匹配一个字符

.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]

Greedy 数量词

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次
  • 一些常用方法
    public boolean matches(String regex) ==> 告知此字符串是否匹配给定的正则表达式。
    public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串
    public String replaceAll(String regex,String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串(用repalcement替换调用者的内容,按照regex规则)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值