Java类之常用类String类(一)简介及其构造方法

本文详细介绍了JavaString类的位置、继承关系、构造方法,包括无参和有参构造,重点讲解了不同构造函数的作用,以及如何通过字符集进行字符串转换。

Java类之常用类String类

参考网址:https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/String.html

一、类位置及其继承数

在这里插入图片描述
由API文档可知:
Class String类是在java.long包下的
所有实现的接口:Serializable, CharSequence, Comparable, Constable, ConstantDesc

二、看其详细介绍

在这里插入图片描述
由API文档可知:
Class String类的父类为Object类,权限修饰符public final表明它不可被继承,也就不可被重写,它实现了Serializable, Comparable, CharSequence, Constable, ConstantDesc这些接口

三、看其构造方法

在这里插入图片描述
由API文档可知:
String类有15个构造器,其中有两个现已弃用,一个无参构造,14个有参构造

四、构造方法详解

String() 无参构造器

public String()

初始化新创建的 String 对象,使其表示空字符序列。请注意,没有必要使用此构造函数,因为字符串是不可变的。
在这里插入图片描述
s的改变并不是字符串的改变,而是s指向的地址值发生了改变。

String(byte[] bytes)

public String(byte[] bytes)

通过使用默认字符集解码指定的字节数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。
未指定当给定字节在默认字符集中无效时此构造函数的行为。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类。
即将byte类型的数组转为字符串
参数
bytes - 要解码为字符的字节
示例代码:

package 构造方法;

class Demo1 {
    public static void main(String[] args) {
          byte [] a={97,98,101,42,10};
          String x=  new String(a);
          System.out.println(x);
    }
}

在这里插入图片描述

String(byte[] ascii, int hibyte)(以弃用,不详细解释)❌

public String(byte[] ascii , int hibyte)

此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方法是通过String构造函数获取Charset ,字符集名称,或者使用平台的默认字符集。

String(byte[] bytes , int offset , int length)

public String(byte[] bytes , int offset , int length)

通过使用默认字符集解码指定的字节子数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于子数组的长度。
未指定当给定字节在默认字符集中无效时此构造函数的行为。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类。
参数
bytes - 要解码为字符的字节
offset - 要解码的第一个字节的索引
length - 要解码的字节数截取的
最后一个索引不可以大于数组最大索引,不然会报超界错误。
示例代码:

package 构造方法;

public class Demo2 {
    public static void main(String[] args) {
        byte [] a={97,98,99,100,101};
        String x=  new String(a,1,4);
        System.out.println(x);
    }
}

在这里插入图片描述

String( byte[] ascii , int hibyte , int offset , int count )(以弃用,不详细解释)❌

public String( byte[] ascii , int hibyte , int offset , int count )

已弃用 此方法无法将字节正确转换为字符。 从JDK 1.1开始,首选的方法是通过String构造函数获取Charset ,字符集名称,或使用平台的默认字符集。

String(byte[] bytes,int offset, int length, String charsetName)

public String(byte[] bytes,int offset, int length, String charsetName)

通过使用指定的字符集解码指定的字节子数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于子数组的长度。
未指定给定字节在给定字符集中无效时此构造函数的行为。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类
参数 :
bytes - 要解码为字符的字节
offset - 要解码的第一个字节的索引
length - 要解码的字节数
charsetName - 支持的字符集名称
charsetName 作为参数的构造方法里面,会在 StringCoding 使用一个 StringDecoder 作为中转的辅助,而且这个 String Coding.String Decoder 是有缓存机制的。多次使用相同的 casrsetName 可能用用到相同的缓存StringCoding.StringDecoder;
示例代码:

package 构造方法;

import java.io.UnsupportedEncodingException;

public class Demo2 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte [] a={97,98,99,100,101};
        String x=  new String(a,1,4,"ASCII");
        System.out.println(x);
    }
}

在这里插入图片描述

String(byte[] bytes,int offset, int length, Charset charset)

public String(byte[] bytes,int offset, int length, Charset charset)

通过使用指定的字符集解码指定的字节子数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于子数组的长度。
此方法始终将格式错误的输入和不可映射的字符序列替换为此字符集的默认替换字符串。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类。
参数
bytes - 要解码为字符的字节
offset - 要解码的第一个字节的索引
length - 要解码的字节数
charset- 用于解码字节的字符集
Charset当作参数的里面是直接创建 CharsetDecoder 的 decode 方法的。

示例代码:

package 构造方法;

import java.io.UnsupportedEncodingException;

public class Demo2 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte [] a={97,98,99,100,101};
        String x=  new String(a,1,4,"ASCII");
        System.out.println(x);
    }
}

在这里插入图片描述

String(byte[] bytes, String charsetName)

public String(byte[] bytes, String charsetName)

通过使用指定的字符集解码指定的字节数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。
未指定给定字节在给定字符集中无效时此构造函数的行为。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类。
参数
bytes - 要解码为字符的字节
charsetName - 支持的字符集名称

示例代码:

package 构造方法;
import java.io.UnsupportedEncodingException;
public class Demo3 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte [] bytes={97,98,99,100,101};
        String x=  new String(bytes,"ASCII");
        System.out.println(x);
    }
}

在这里插入图片描述

String(byte[] bytes, Charset charset)

public String(byte[] bytes, Charset charset)

通过使用指定的字符集解码指定的字节数组来构造新的字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。
此方法始终将格式错误的输入和不可映射的字符序列替换为此字符集的默认替换字符串。当需要对解码过程进行更多控制时,应使用 CharsetDecoder 类
参数
bytes - 要解码为字符的字节
charset- 用于解码字节的字符集
示例代码:

package 构造方法;
import java.io.UnsupportedEncodingException;
public class Demo3 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte [] bytes={97,98,99,100,101};
        String x=  new String(bytes,"ASCII");
        System.out.println(x);
    }
}

在这里插入图片描述

String(char[] value)

public String(char[] value)

分配一个新的字符串,以便它表示当前包含在字符数组参数中的字符序列。复制字符数组的内容;对字符数组的后续修改不会影响新创建的字符串。
参数
value -字符串的初始值
示例代码:

package 构造方法;

public class Demo4 {
    public static void main(String[] args) {
        char [] values = { 'a', 'b', 'c', 'd', 'e', 'h', 'h', 'h', 'h','h' };
        String s=new String(values);
        System.out.println(s);
    }
}

在这里插入图片描述

String(char[] value, int offset, int count)

public String(char[] value, int offset, int count)

分配一个新的字符串,其中包含字符数组参数的子数组中的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。复制子数组的内容;对字符数组的后续修改不会影响新创建的字符串。
value - 作为字符源的数组
offset - 初始偏移量
count - 长度
示例代码:

package 构造方法;

class Demo5 {
    public static void main(String[] args) {
        char [] values = { 'a', 'b', 'c', 'd', 'e', 'h', 'h', 'h', 'h','h' };
        String s=new String(values,4,2);
        System.out.println(s);
    }
}

在这里插入图片描述

String(int[] codePoints, int offset, int count)

public String(int[] codePoints, int offset, int count)

分配一个新的字符串,其中包含 Unicode 代码点数组参数的子数组中的字符。offset 参数是子数组的第一个代码点的索引,count 参数指定子数组的长度。子数组的内容将转换为字符;对 int 数组的后续修改不会影响新创建的字符串。
参数
codePoints - 作为Unicode代码点的源的数组
offset - 初始偏移量
count - 长度
示例代码:

package 构造方法;

 class Demo6 {
     public static void main(String[] args) {
         int[] bytes = new int[] { 96, 97, 98, 88 };
         String s=new String(bytes,2,2);
         System.out.println(s);
     }
}

在这里插入图片描述

String(String original)

public String(String original)

初始化新创建的 String 对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要原始副本的显式副本,否则不需要使用此构造函数,因为字符串是不可变的。
参数
original - A String
示例代码:

package 构造方法;

public class Demo9 {
    public static void main(String[] args) {
        String s = new String("abcdefghijk");
        String s2 = new String(s);
        System.out.println(s2);
    }
}

在这里插入图片描述

String(StringBuffer buffer)

public String(StringBuffer buffer)

分配一个新字符串,其中包含字符串缓冲区参数中当前包含的字符序列。复制字符串缓冲区的内容;字符串缓冲区的后续修改不会影响新创建的字符串。
参数
buffer - A StringBuffer(StringBuffer类型的变量)
示例代码:

package 构造方法;

class Demo7 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("abcdefghijk");
        String s=new String(sb);
        System.out.println(s);
    }
}

在这里插入图片描述

String(StringBuilder builder)

public String(StringBuilder builder)

分配一个新字符串,其中包含字符串生成器参数中当前包含的字符序列。复制字符串生成器的内容;字符串生成器的后续修改不会影响新创建的字符串。
参数
builder - A StringBuilder (StringBuilder类型的变量)
示例代码:

package 构造方法;
 class Demo8 {
     public static void main(String[] args) {
         StringBuilder sb = new StringBuilder();
         sb.append("abcdefghijk");
         String s=new String(sb);
         System.out.println(s);
     }
}

在这里插入图片描述

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我头像真的只是只猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值