1.API 常用类

发布于:2023-01-16 ⋅ 阅读:(389) ⋅ 点赞:(0)

什么是JDK API?

Application Programming Interface 应用程序接口

已经写好的,可供直接调用的类。

比如: 字符串操作、IO流、集合操作、线程、网络编程Socket等等

String类

1.1 String对象不能改变

(1)String的底层是字符数组   private final char value[];//定义了一个字符数组

(2)String类是final修饰的,不能继承,不能改变,但引用可以重新赋值

         原理:字符串一旦初始化不可更改,但是可以通过在字符串常量池中重写创建一个字符串,            改变引用的指向,进而改变字符串的值

(3)String采用的编码方式是Unicode

1.2 String常量池

(1)Java为了提高性能,静态字符串在常量池中创建,并且是同一对象,使用时直接拿取。

(2)对于重复的字符串直接量,JVM会去常量池查找,如果有则返回,无则创建。

扩展 : 常量池创建了几个对象的问题 String s = new String(String:"a");

两个或1个,如果常量池中有a则返回,如果没有则创建一个a,加上new的对象是两 个。

1.3 String构造方法

String字符串的初始化

(1)直接赋值

(2)通过构造方法初始化

a.public Sting(String str);

b.public String(char[] c);

1.4 String常用方法

(1)判断

boolean equals(Object obj):比较字符串的内容是否相同

(2)截取

int length():获取字符串的长度,其实也就是字符个数

char charAt(int index):获取指定索引处的字符

int indexOf(String str):获取str在字符串对象中第一次出现的索引

(3)转换

char[] toCharArray():把字符串转换为字符数组

String toLowerCase():把字符串转换为小写字符串

String toUpperCase():把字符串转换为大写字符串

(4)其他

String trim():去除字符串两端空格

String[] split(String str):按照指定符号分割字符串

1.5 StringBuilder

1.可变字符串

StringBuilder底层在其父类(AbstractStringBuilder)中封装了一个char类型的数组

StringBuilder创建的初始容量是16

2.构造方法

StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。

StringBuilder(int capacity) 构造一个不带任何字符自己定义容量的字符串生成器

StringBuilder(String str) 构造一个字符串生成器,并初始化为指定的字符串内容。

3.常用方法

append(任意内容):追加字符串

扩容实现原理:数组的Arrays.copyOf方法

扩容算法:源数组容量乘2加2

(长度跟容量不是一个概念)

public static void main(String[] args) {
//1.append方法
StringBuilder sb1 =new StringBuilder();//初始容量16
sb1.append("lllllllllllllllll");//追加的字符串长度:17 超出了初始容量
System.out.println("sb1的容量:" + sb1.capacity());//34 17*2+2
sb1.append("llllllllllllllllll");//18 再次追加超出
System.out.println("sb1的内容:" + sb1);
System.out.println("sb1的容量:" + sb1.capacity());//70 34*2+2
System.out.println("sb1的长度:" + sb1.length());//35
}

insert(int,任意类型)方法:插入

delete(int start,int end):删除

replace(int start,int end,String s):替换

reverse():字符串的反转

4.StringBuilder和StringBuffer区别

(1)StringBuffer是线程安全的

(2)StringBuilder是线程非安全的,因此运行速率较快。

 StringBuffer用了synchronized关键字

正则表达式(不是很懂)

Object类

1.Object

java.lang.Object位于java继承关系的顶端。

Object类是所有类的父类

Object类的引用可以指向任意对象。

2.toString方法

当我们直接打印对象时,结果为对象地址值。

重写父类Object的toString方法可以将对象以字符串的形式输出

所以在定义实体类时强烈建议给每一个对象都重写toString方法

3.equals方法

在没有重写equals方法的情况下,它俩比较的都是地址值。

一般情况下,在每一个类中都应重写父类Object的equals方法,使比较更有意义

重写equals后,对象比较的是它的成员变量值。

4.equals和==区别

如果没有重写equals方法,则==和equals没有区别。都比较的是地址信息。

如果重写equals,则比较的是两个对象内容(成员变量的值)。

5.实体类创建

创建时应进行如下操作:

私有化属性

无参构造

有参构造

set和get方法

toString方法

equals和hashcode方法

import java.util.Objects;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id && Objects.equals(username, user.username) &&
Objects.equals(password, user.password);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password);
}
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到