JAVA入门基础_从零开始的培训_JAVA常用的引用类型及其API(三)

JAVA常用的引用类型及其API(三)

数组

数组的定义及使用场景

数组的定义:数组是用于存储多个相同类型数据的集合。
使用场景:1.当需要存储大量**相同类型的数据**且这些数据不需要**多次增删**时(先了解)

数组的几个知识点(内存、增删改查、长度、数据类型)

  1. 数组对象在内存中是一片连续的内存空间
  2. 增删慢、修改和查询快
  3. 数组的长度在创建时就已经固定了(无法修改)。
  4. 数组所存储的数据类型在创建时就已经固定了(无法修改)。

数组的创建方式

静态创建(创建时就已经将数据写死,2种方式)

1、 第一种
int[] arr = {1,8,6,8,9};
2、第二种
int[] arr2 = new int[]{9,5,4,2,3};

动态创建(创建时仅指定长度,之后再增添数据,1种方式)

// 定义一个int数组
int[] arr3 = new int[15];
// 为数组赋值
arr3[0] = 11;
arr3[1] = 15;...

如何获取数组中的数据

// 数组中的每一个元素都有一个唯一的索引(下标),从0开始
int[] arr = {14,13,15,22};

/* 假如现在需要获取到15这个数据,那么数组下标从0开始数
    {14,13,15,22}
     0   1  2  3
    因此想要得到15这个数据,则可以使用arr[2]获取到。
*/

System.out.println("想要获得数组中15这个数据: " + arr[2]);

数组的内存模型(内存的嵌套)

 int arr[] = new int[3];
//  当main方法执行如上的语句时,会进行如下操作
// 1.在栈内存中创建一个整形数组类型的引用 arr
// 2.在堆内存中创建一个整形数组的对象,并将该对象的地址赋值给arr这个引用
// 注意:创建数组时,其数组中的空间也有对应的内存地址。理解为数组对象有一个地址,它的元素也有地址(并且是连续的内存空间)。

数组增删慢、查询快的原因

  1. 数组使用的是索引,一个索引关联一个数据,可以通过索引计算出该数据的内存地址。
  2. 每次使用索引查找数据时,都会通过一个算法(第一个索引地址 + 当前索引 * 数据大小[不确定])来快速定位到当前索引所指向的内存地址,因此查询的速度快。

数组的两种遍历方式及区别

fori的遍历方式(遍历出的是每个数据的引用,引用类型时)

int[] arr = {5,95,1,26,51};
for (int i = 0; i < arr.length; i++){
    System.out.println(arr[i]);
}

foreach遍历方式(遍历出的是一个临时局部变量)

int[] arr = {5,95,1,26,51};
for(int i : arr) {
    System.out.println(i);
}

fori与foreach两种遍历方式的区别(2个)

  1. fori有索引位置、而foreach没有索引位置
  2. fori遍历出的每个元素都指向内存地址,而foreach拿到的是一个获取了数据的局部变量
  3. fori可以在循环中修改数据,foreach不能在循环中修改数据

在数组的指定索引处添加元素

使用fori循环的方式实现

public class Calculate {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5};

        System.out.println("&#x5F53;&#x524D;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;" + Arrays.toString(arr)); // [1, 2, 3, 4, 5]

        // &#x5728;&#x6570;&#x7EC4;&#x7D22;&#x5F15;2&#x7684;&#x4F4D;&#x7F6E;&#x6DFB;&#x52A0;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF1A;15&#xFF0C;&#x90A3;&#x4E48;&#x6DFB;&#x52A0;&#x540E;&#x7684;&#x6570;&#x7EC4;&#x5E94;&#x8BE5;&#x4E3A;&#xFF1A;{1, 2, 15, 3, 4, 5}
        arr = arrAddElement(arr, 2, 15);

        // &#x63D2;&#x5165;&#x6570;&#x636E;&#x540E;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;
        System.out.println("&#x63D2;&#x5165;&#x6570;&#x636E;&#x540E;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;" + Arrays.toString(arr)); // [1, 2, 15, 3, 4, 5]
    }

    public static int[] arrAddElement(int[] arr, int index, int element) {
        // &#x7531;&#x4E8E;&#x6570;&#x7EC4;&#x521B;&#x5EFA;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x6539;&#x53D8;&#x957F;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6570;&#x7EC4;&#x6765;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;&#x7531;&#x4E8E;&#x9700;&#x8981;&#x63D2;&#x5165;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x6240;&#x4EE5;&#x6570;&#x7EC4;&#x957F;&#x5EA6;&#x9700;&#x8981;&#x5728;&#x539F;&#x6570;&#x7EC4;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x52A0;&#x4E00;
        int[] newArr = new int[arr.length + 1];

        // &#x5C06;&#x7D22;&#x5F15;&#x524D;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        for (int i = 0; i < index; i++) {
            newArr[i] = arr[i];
        }

        // &#x5BF9;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#x8D4B;&#x503C;&#x9700;&#x8981;&#x63D2;&#x5165;&#x7684;&#x5143;&#x7D20;
        newArr[index] = element;

        // &#x5C06;&#x7D22;&#x5F15;&#x540E;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        for (int i = index; i < arr.length; i ++) {
            newArr[i + 1] = arr[i];
        }

        // &#x8FD4;&#x56DE;&#x65B0;&#x6570;&#x7EC4;
        return newArr;
    }
}

使用System.arraycopy()方法实现

  • 这里仅提供arrAddElement()方法的代码
public static int[] arrAddElement(int[] arr, int index, int element) {
        // &#x7531;&#x4E8E;&#x6570;&#x7EC4;&#x521B;&#x5EFA;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x6539;&#x53D8;&#x957F;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6570;&#x7EC4;&#x6765;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;&#x7531;&#x4E8E;&#x9700;&#x8981;&#x63D2;&#x5165;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x6240;&#x4EE5;&#x6570;&#x7EC4;&#x957F;&#x5EA6;&#x9700;&#x8981;&#x5728;&#x539F;&#x6570;&#x7EC4;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x52A0;&#x4E00;
        int[] newArr = new int[arr.length + 1];

        // &#x5C06;&#x7D22;&#x5F15;&#x524D;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        System.arraycopy(arr, 0, newArr, 0, index);

        // &#x5BF9;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#x8D4B;&#x503C;&#x9700;&#x8981;&#x63D2;&#x5165;&#x7684;&#x5143;&#x7D20;
        newArr[index] = element;

        // &#x5C06;&#x7D22;&#x5F15;&#x540E;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        System.arraycopy(arr, index, newArr, index + 1, arr.length - index);

        // &#x8FD4;&#x56DE;&#x65B0;&#x6570;&#x7EC4;
        return newArr;
    }

删除数组指定索引处的元素

使用fori循环的方式实现

public class Calculate {
    public static void main(String[] args) {

        int[] arr = {1, 2, 3, 4, 5};

        System.out.println("&#x5F53;&#x524D;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;" + Arrays.toString(arr)); // [1, 2, 3, 4, 5]

        // &#x5728;&#x6570;&#x7EC4;&#x7D22;&#x5F15;2&#x7684;&#x4F4D;&#x7F6E;&#x5220;&#x9664;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF1A;&#x90A3;&#x4E48;&#x5220;&#x9664;&#x540E;&#x7684;&#x6570;&#x7EC4;&#x5E94;&#x8BE5;&#x4E3A;&#xFF1A;{1, 2, 4, 5}
        arr = arrDeleteElementByIndex(arr, 2);

        // &#x63D2;&#x5165;&#x6570;&#x636E;&#x540E;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;
        System.out.println("&#x5220;&#x9664;&#x5143;&#x7D20;&#x540E;&#x6570;&#x7EC4;&#x7684;&#x503C;&#x4E3A;&#xFF1A;" + Arrays.toString(arr)); // [1, 2, 4, 5]
    }

    public static int[] arrDeleteElementByIndex(int[] arr, int index) {
        // &#x7531;&#x4E8E;&#x6570;&#x7EC4;&#x521B;&#x5EFA;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x6539;&#x53D8;&#x957F;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6570;&#x7EC4;&#x6765;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;&#x7531;&#x4E8E;&#x9700;&#x8981;&#x5220;&#x9664;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x6240;&#x4EE5;&#x6570;&#x7EC4;&#x957F;&#x5EA6;&#x9700;&#x8981;&#x5728;&#x539F;&#x6570;&#x7EC4;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x51CF;&#x4E00;
        int[] newArr = new int[arr.length - 1];

        // &#x5C06;&#x7D22;&#x5F15;&#x524D;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        for (int i = 0; i < index; i++) {
            newArr[i] = arr[i];
        }

        // &#x5C06;&#x7D22;&#x5F15;&#x540E;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        for (int i = index; i < arr.length -1; i++) {
              newArr[i] =  arr[i + 1];
        }

        // &#x8FD4;&#x56DE;&#x65B0;&#x6570;&#x7EC4;
        return newArr;
    }
}

使用System.arraycopy()方法实现

  • 这里仅提供arrDeleteElementByIndex()方法的代码
    public static int[] arrDeleteElementByIndex(int[] arr, int index) {
        // &#x7531;&#x4E8E;&#x6570;&#x7EC4;&#x521B;&#x5EFA;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x6539;&#x53D8;&#x957F;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6570;&#x7EC4;&#x6765;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;&#x7531;&#x4E8E;&#x9700;&#x8981;&#x5220;&#x9664;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x6240;&#x4EE5;&#x6570;&#x7EC4;&#x957F;&#x5EA6;&#x9700;&#x8981;&#x5728;&#x539F;&#x6570;&#x7EC4;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x51CF;&#x4E00;
        int[] newArr = new int[arr.length - 1];

        // &#x5C06;&#x7D22;&#x5F15;&#x524D;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        System.arraycopy(arr, 0, newArr, 0, index);

        // &#x5C06;&#x7D22;&#x5F15;&#x540E;&#x7684;&#x6570;&#x636E;&#x8D4B;&#x503C;&#x7ED9;&#x65B0;&#x6570;&#x7EC4;
        System.arraycopy(arr, index + 1, newArr, index, arr.length - index - 1);

        // &#x8FD4;&#x56DE;&#x65B0;&#x6570;&#x7EC4;
        return newArr;
    }

System.arraycopy()方法各参数解释(5个参数)

/*
 * &#x4F5C;&#x7528;: &#x590D;&#x5236;&#x6574;&#x4E2A;&#x6570;&#x7EC4;
 * Object src: &#x539F;&#x59CB;&#x6570;&#x7EC4;
 * int srcPos: &#x4ECE;&#x539F;&#x59CB;&#x6570;&#x7EC4;&#x7684;&#x7B2C;&#x51E0;&#x4E2A;&#x4E0B;&#x6807;&#x5F00;&#x59CB;&#x590D;&#x5236;
 * Object dest&#xFF1A; &#x76EE;&#x6807;&#x6570;&#x7EC4;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8981;&#x590D;&#x5236;&#x5230;&#x8BE5;&#x6570;&#x7EC4;&#x4E2D;
 * int destPos: &#x4ECE;&#x76EE;&#x6807;&#x6570;&#x7EC4;&#x7684;&#x7B2C;&#x51E0;&#x4E2A;&#x4E0B;&#x6807;&#x5F00;&#x59CB;&#x590D;&#x5236;
 * int length&#xFF1A; &#x4E00;&#x5171;&#x9700;&#x8981;&#x590D;&#x5236;&#x51E0;&#x4E2A;&#x5143;&#x7D20;
 * &#x63D0;&#x793A;&#x4E00;&#x70B9;&#xFF1A;&#x6E90;&#x6570;&#x7EC4;&#x4E0E;&#x76EE;&#x6807;&#x6570;&#x7EC4;&#x5FC5;&#x987B;&#x4E3A;&#x76F8;&#x540C;&#x7C7B;&#x578B;&#x7684;&#x6570;&#x7EC4;
*/

String字符串

字符串的创建方式以及常量池

// 1&#x3001;&#x521B;&#x5EFA;String&#x5BF9;&#x8C61;
// &#x865A;&#x62DF;&#x673A;&#x4F1A;&#x5728;&#x5806;&#x5185;&#x5B58;&#x7684;Eden&#x533A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;String&#x7684;&#x5BF9;&#x8C61;
String str1 = new String("&#x4ECA;&#x5929;&#x5929;&#x6C14;&#x4E0D;&#x9519;Abc");

// &#x865A;&#x62DF;&#x673A;&#x4F1A;&#x76F4;&#x63A5;&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x653E;&#x5728;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;
String str2 = "&#x4ECA;&#x5929;&#x5929;&#x6C14;&#x4E0D;&#x9519;Abc";
String str3 = "&#x4ECA;&#x5929;&#x5929;&#x6C14;&#x4E0D;&#x9519;Abc";

// &#x5224;&#x65AD;&#x4E24;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x5730;&#x5740;&#x662F;&#x5426;&#x4E00;&#x81F4;  false
System.out.println(str1 == str2);

// &#x5224;&#x65AD;&#x4E24;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x5730;&#x5740;&#x662F;&#x5426;&#x4E00;&#x81F4;  true, &#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#x5E38;&#x91CF;&#x6C60;&#x7684;&#x5B58;&#x5728;
System.out.println(str2 == str3);

String对象的基本方法

// 1 &#x5224;&#x65AD;&#x4E24;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5185;&#x5BB9;&#x662F;&#x5426;&#x76F8;&#x7B49;
System.out.println(str1.equals(str2));

// 2 &#x83B7;&#x53D6;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x957F;&#x5EA6;
System.out.println(str1.length());

// 3 &#x53BB;&#x9664;&#x5B57;&#x7B26;&#x4E32;&#x4E24;&#x7AEF;&#x7A7A;&#x683C;
System.out.println(str1.trim());

// 4 &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x4E3A;&#x7A7A;(&#x5224;&#x65AD;&#x957F;&#x5EA6;&#x662F;&#x5426;&#x4E3A;0)
System.out.println(str1.isEmpty());

// 5 &#x5224;&#x65AD;&#x662F;&#x5426;&#x4EE5;&#x6307;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5F00;&#x5934;
System.out.println(str1.startsWith("&#x4ECA;&#x5929;&#x5929;&#x6C14;"));

// 5 &#x5224;&#x65AD;&#x662F;&#x5426;&#x4EE5;&#x6307;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x7ED3;&#x5C3E;
System.out.println(str1.endsWith("Abc"));

// 6 &#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x7684;&#x82F1;&#x6587;&#x5B57;&#x6BCD;&#x8F6C;&#x6362;&#x4E3A;&#x5168;&#x5927;&#x5199;
System.out.println(str1.toUpperCase());

// 7 &#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x7684;&#x82F1;&#x6587;&#x5B57;&#x6BCD;&#x8F6C;&#x6362;&#x4E3A;&#x5168;&#x5C0F;&#x5199;
System.out.println(str1.toLowerCase());

// 8 &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x662F;&#x5426;&#x5305;&#x542B;&#x6307;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32;
System.out.println(str1.contains("&#x4ECA;&#x5929;&#x5929;&#x6C14;&#x4E0D;&#x597D;"));

// 9 &#x622A;&#x53D6;&#x5B57;&#x7B26;&#x4E32;,
    // 9.1&#x83B7;&#x53D6;&#x4ECE;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#x5F00;&#x59CB;&#x53CA;&#x518D;&#x5F80;&#x540E;&#x7684;&#x5168;&#x90E8;&#x5143;&#x7D20;
    str1.substring(0);
    // 9.2 &#x4ECE;&#x5B57;&#x7B26;&#x4E32;&#x7D22;&#x5F15;2&#x7684;&#x4F4D;&#x7F6E;&#x5F00;&#x59CB;&#xFF0C;&#x622A;&#x53D6;&#x5230;&#x7D22;&#x5F15;3&#xFF08;&#x56E0;&#x4E3A;&#x542B;&#x5934;&#x4E0D;&#x542B;&#x5C3E;&#xFF09;&#x7684;&#x4F4D;&#x7F6E;
    str1.substring(2, 4);

String对象的其他方法

// 1 &#x6839;&#x636E;&#x7D22;&#x5F15;&#x67E5;&#x627E;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x6307;&#x5B9A;&#x7684;&#x5B57;&#x7B26;
System.out.println(str1.charAt(0));

// 2 &#x6839;&#x636E;&#x5B57;&#x7B26;&#x4E32;&#x67E5;&#x627E;&#x7B2C;&#x4E00;&#x6B21;&#x51FA;&#x73B0;&#x7684;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;,&#x4ECE;&#x5DE6;&#x5230;&#x53F3;
System.out.println(str1.indexOf("Abc"));

// 3 &#x6839;&#x636E;&#x5B57;&#x7B26;&#x4E32;&#x67E5;&#x627E;&#x7B2C;&#x4E00;&#x6B21;&#x51FA;&#x73B0;&#x7684;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;,&#x4ECE;&#x53F3;&#x5230;&#x5DE6;
System.out.println(str1.lastIndexOf("Abc"));

// 4 &#x5C06;&#x67E5;&#x627E;&#x5230;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x66FF;&#x6362;&#x6210;&#x53E6;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x53EA;&#x66FF;&#x6362;&#x67E5;&#x627E;&#x5230;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x5339;&#x914D;&#x7684;&#x5B57;&#x7B26;&#x4E32;
System.out.println(str1.replace("&#x4ECA;&#x5929;", "&#x660E;&#x5929;"));

// 5 &#x5C06;&#x67E5;&#x627E;&#x5230;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#xFF08;&#x67E5;&#x627E;&#x7684;&#x89C4;&#x5219;&#x53EF;&#x4EE5;&#x662F;&#x6B63;&#x5219;&#x8868;&#x8FBE;&#x5F0F;&#xFF09;&#x66FF;&#x6362;&#x6210;&#x53E6;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x627E;&#x5230;&#x51E0;&#x4E2A;&#x5C31;&#x66FF;&#x6362;&#x51E0;&#x4E2A;
System.out.println(str1.replaceAll("&#x4ECA;&#x5929;", "&#x660E;&#x5929;"));

// 6 &#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x8F6C;&#x6362;&#x4E3A;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#xFF0C;&#x4E00;&#x4E2A;&#x4E2D;&#x6587;&#x5728;UTF-8&#x5360;&#x7528;3&#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x4E00;&#x4E2A;&#x5B57;&#x6BCD;&#x4E00;&#x4E2A;&#x5B57;&#x8282;
byte[] buf = str1.getBytes();
System.out.println(Arrays.toString(buf));

// 7 &#x5C06;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x8F6C;&#x6362;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;
str1 = new String(buf);
System.out.println(str1);

String类的原理(底层结构、2个字符串拼接时)

1. String&#x7C7B;&#x662F;&#x4E00;&#x4E2A;final&#x4FEE;&#x9970;&#x7684;&#x7C7B;&#xFF0C;&#x4E0D;&#x53EF;&#x88AB;&#x7EE7;&#x627F;
2. &#x5E95;&#x5C42;&#x5B58;&#x50A8;&#x6570;&#x636E;&#x7684;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x6570;&#x7EC4;final char value[]&#xFF0C;&#x770B;&#x51FA;&#x5B57;&#x7B26;&#x4E32;&#x662F;**&#x4E0D;&#x53EF;&#x53D8;**&#x7684;
3. &#x5F53;&#x4E24;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x62FC;&#x63A5;&#x65F6;&#xFF0C;&#x5C06;&#x4F1A;**&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5B57;&#x7B26;&#x6570;&#x7EC4;**&#xFF0C;&#x5C06;2&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x62FC;&#x63A5;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x5F88;**&#x5F71;&#x54CD;&#x6548;&#x7387;**

StringBuffer 及 StringBuilder

StringBuffer及StringBuilder是什么?

&#x5B83;&#x4E24;&#x662F;&#x53EF;&#x53D8;&#x7684;&#x5B57;&#x7B26;&#x5E8F;&#x5217;&#xFF0C;&#x5E95;&#x5C42;&#x662F;&#x4E00;&#x4E2A;&#x4E0D;&#x5E26;final&#x4FEE;&#x9970;&#x7684;&#x5B57;&#x7B26;&#x6570;&#x7EC4;&#xFF0C;&#x8FD9;2&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;&#x662F;&#x4E00;&#x81F4;&#x7684;&#x3002;

StringBuffer/StringBuilder的常用方法

StringBuilder str = new StringBuilder();

// &#x8FFD;&#x52A0;&#x5185;&#x5BB9;
str.append("abc");
// &#x5728;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x5904;&#x63D2;&#x5165;&#x5185;&#x5BB9;
str.insert(1, "d");
// &#x5220;&#x9664;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x5904;&#x7684;&#x6570;&#x636E;
str.deleteCharAt(0);
// &#x5220;&#x9664;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x8303;&#x56F4;&#x7684;&#x6570;&#x636E;
str.delete(0, 1);
// &#x622A;&#x53D6;&#x5B57;&#x7B26;&#x4E32;
str.substring(2, 3);

// &#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x53CD;&#x8F6C;
str.reverse();
// &#x5C06;&#x7D22;&#x5F15;0~2&#x7684;&#x5143;&#x7D20;&#x66FF;&#x6362;&#x4E3A;ddd
str.replace(0, 2 ,"abc");
// &#x5C06;&#x5176;&#x8F6C;&#x6362;&#x4E3A;String
System.out.println(str.toString());

StringBuffer及StringBuilder什么时候用?

  • 由于String底层是一个不可变的字符数组,因此如果进行字符串拼接时效率会很低
  • 所以如果字符串拼接操作比较多的时候就可以使用可变字符序列StringBuffer或StringBuilder

既然底层是数组,那么是如何扩容的?

  • 数组每次扩容时,会将当前 数组长度*2+2
  • 如果扩容后的长度仍不够装下新追加的数据,则数组长度会扩容为 当前数组长度 + 追加的数组长

什么时候使用StringBuffer?什么时候使用StringBuilder呢?

  • StringBuffer是线程安全的,也就意味着效率会低一些,因此在多线程的时候可以使用。
  • StringBuilder是线程不安全的,速度快。在不存在线程安全问题的时候使用。

Date 日期类、SimpleDateFormat 日期格式化类、Calendar 日历类

Date日期类的基本使用

/*
 &#x521B;&#x5EFA;&#x4E00;&#x4E2A;Date&#x5BF9;&#x8C61;&#xFF0C;&#x4F1A;&#x7528;&#x5F53;&#x524D;&#x65F6;&#x95F4;&#x521B;&#x5EFA;Date&#x5BF9;&#x8C61;
 Date date = new Date();

 &#x4F7F;&#x7528;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x521B;&#x5EFA;Date&#x5BF9;&#x8C61;
 Date date2 = new Date(1999, 10, 12);
*/

// &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;&#x683C;&#x5F0F;&#x5316;&#x65E5;&#x671F;&#x7684;&#x7C7B;&#xFF0C;&#x540E;&#x7EED;&#x4F1A;&#x8BF4;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

// &#x521B;&#x5EFA;2&#x4E2A;&#x65E5;&#x671F;&#x7C7B;
Date date1 = sdf.parse("2022-7-27 13:27:27");
Date date2 = sdf.parse("2022-7-26 13:11:20");

// &#x5224;&#x65AD;&#x65E5;&#x671F;date1&#x662F;&#x5426;&#x5728;date2&#x4E4B;&#x540E;   &#x7ED3;&#x679C;&#xFF1A; true
date1.after(date2);

// &#x5224;&#x65AD;&#x65E5;&#x671F;date1&#x662F;&#x5426;&#x5728;date2&#x4E4B;&#x524D;   &#x7ED3;&#x679C;&#xFF1A; false
date1.before(date2);

// &#x82E5;&#x65E5;&#x671F;date1&#x5728;date2&#x4E4B;&#x524D;&#xFF0C;&#x5219;&#x4E3A;-1&#xFF0C;&#x5728;date2&#x4E4B;&#x540E;&#x4E3A;1&#xFF0C;&#x4E00;&#x81F4;&#x5219;&#x4E3A;0   &#x7ED3;&#x679C;&#xFF1A; 1
date1.compareTo(date2);

// &#x83B7;&#x53D6;&#x65F6;&#x95F4;&#x6233;&#xFF0C;&#x8FD4;&#x56DE;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x4E3A;long
date1.getTime();

SimpleDateFormat 日期格式化类基本使用

作用: 用于格式化日期,让日期的格式满足我们的需求

// &#x5BF9;&#x8C61;&#x7684;&#x521B;&#x5EFA;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

// &#x5C06;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x8F6C;&#x6362;&#x4E3A;&#x65E5;&#x671F;&#x7C7B;
Date date = sdf.parse("2022-7-27 14:23:59");

// &#x5C06;&#x4E00;&#x4E2A;&#x65E5;&#x671F;&#x7C7B;&#x8F6C;&#x6362;&#x4E3A;&#x5177;&#x4F53;&#x7684;&#x65F6;&#x95F4;
String formatDate = sdf.format(date);

// &#x8F93;&#x51FA;&#x5DF2;&#x7ECF;&#x88AB;&#x8F6C;&#x6362;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x65F6;&#x95F4;   &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;2022-07-27 02:23:59
System.out.println(formatDate);

Calendar 日历类的使用

// &#x5BF9;&#x8C61;&#x7684;&#x521B;&#x5EFA;
Calendar cal = Calendar.getInstance();

// &#x5E74;&#x4EFD;
System.out.println(cal.get(Calendar.YEAR));

// &#x6708;&#x4EFD;&#xFF0C; 1&#x6708;&#x662F; 0&#xFF0C; 2&#x6708;&#x662F;1&#xFF0C;&#x4EE5;&#x6B64;&#x7C7B;&#x63A8;
System.out.println(cal.get(Calendar.MONTH) + 1);

// &#x5F53;&#x6708;&#x4E2D;&#x7684;&#x7B2C;&#x51E0;&#x5929;
System.out.println(cal.get(Calendar.DAY_OF_MONTH));

// &#x5F53;&#x6708;&#x7684;&#x7B2C;&#x51E0;&#x5468;
System.out.println(cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));

// &#x4E00;&#x5468;&#x4E2D;&#x7684;&#x7B2C;&#x51E0;&#x5929; , 1&#x4EE3;&#x8868;&#x661F;&#x671F;&#x65E5;&#xFF0C;2&#x4EE3;&#x8868;&#x661F;&#x671F;&#x4E00;&#xFF0C;&#x4EE5;&#x6B64;&#x7C7B;&#x63A8;
System.out.println(cal.get(Calendar.DAY_OF_WEEK));

// &#x5224;&#x65AD;&#x4ECA;&#x5929;&#x662F;&#x5426;&#x4E3A;&#x5468;&#x4E94;
System.out.println(cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY);

Math数学类、Random随机类、枚举类

Math数学类的常用方法

int a = 10;
int b = 20;

// &#x8FD4;&#x56DE;2&#x4E2A;&#x6570;&#x503C;&#x4E4B;&#x95F4;&#x66F4;&#x5927;&#x7684;&#x503C; , &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;20
Math.max(a, b);

// &#x8FD4;&#x56DE;2&#x4E2A;&#x6570;&#x503C;&#x4E4B;&#x95F4;&#x66F4;&#x5C0F;&#x7684;&#x503C; , &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;10
Math.min(a, b);

// &#x5411;&#x4E0A;&#x53D6;&#x6574; , &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;3.0
Math.ceil(2.2222);

// &#x5411;&#x4E0B;&#x53D6;&#x6574; , &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;2.0
Math.floor(2.222);

// &#x56DB;&#x820D;&#x4E94;&#x5165; , &#x7ED3;&#x679C;&#x4E3A;&#xFF1A;5
Math.round(5.4);

// &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6570;&#x7684;&#x7EDD;&#x5BF9;&#x503C;
Math.abs(-22);

// &#x6C42;&#x51E0;&#x7684;&#x51E0;&#x6B21;&#x5E42;&#xFF0C;&#x8FD9;&#x91CC;&#x662F;&#x6C42;2&#x7684;3&#x6B21;&#x5E42;&#xFF0C;&#x56E0;&#x6B64;&#x7ED3;&#x679C;&#x4E3A;&#xFF1A; 2 * 2 * 2 = 8
Math.pow(2, 3);

// &#x5224;&#x65AD;&#x6570;&#x503C;&#x662F;&#x6B63;&#x6570;&#x3001;&#x8D1F;&#x6570;&#x8FD8;&#x662F;0&#xFF0C;&#x5206;&#x522B;&#x8FD4;&#x56DE;&#xFF1A;1&#x3001;-1&#x3001;0 &#xFF0C;&#x7ED3;&#x679C;&#x4E3A;&#xFF1A;-1
Math.signum(-3);

使用Math与Random生成指定范围的随机数

  • 使用Math.random()方法实现指定范围的随机数
/*
    Math.random() &#x751F;&#x6210;&#x4E00;&#x4E2A;&#x4ECE;0-1&#x7684;&#x4F2A;&#x968F;&#x673A;&#x6570;&#xFF0C;&#x4E0D;&#x5305;&#x542B;1
    &#x6C42; 51 ~ 100 &#x7684;&#x6574;&#x6570;
&#x89E3;&#x6790;&#xFF1A;
    1. &#x7531;&#x4E8E;&#x662F;&#x751F;&#x6210;&#x4E00;&#x4E2A;0 - 1&#x4E14;&#x4E0D;&#x5305;&#x542B;1&#x7684;&#x968F;&#x673A;&#x6570;&#xFF0C;&#x56E0;&#x6B64;&#x53EA;&#x8981;&#x4E0E;&#x4E00;&#x4E2A;&#x6570;(x)&#x76F8;&#x4E58;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x4ECE;0&#x5230;x
&#x7684;&#x6570;&#x503C;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x5305;&#x542B;x
    2. &#x56E0;&#x6B64;&#x4F7F;&#x7528;&#x751F;&#x6210;&#x7684;&#x6570;&#x4E58;&#x4EE5;x&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x8FDB;&#x884C;**&#x52A0;&#x4E00;**&#x64CD;&#x4F5C;
    3. &#x56E0;&#x4E3A;&#x6709;&#x4E00;&#x4E2A;&#x6700;&#x5C0F;&#x8303;&#x56F4;&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981;&#x6700;&#x5C0F;&#x8303;&#x56F4;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x6307;&#x5B9A;&#x8303;&#x56F4;&#x7684;&#x968F;&#x673A;&#x6570;&#x4E86;
    4. &#x518D;&#x5C06;&#x503C;&#x8F6C;&#x6362;&#x4E3A;&#x4E00;&#x4E2A;&#x6574;&#x6570;&#x3002;
    &#x5206;&#x6790;&#xFF1A;100 - 51 = 49&#xFF0C;&#x7531;&#x4E8E;&#x8FD8;&#x9700;&#x8981;&#x5305;&#x542B;100&#xFF0C;&#x56E0;&#x6B64;&#x9700;&#x8981; +1 &#x7B49;&#x4E8E;50&#xFF0C;&#x6700;&#x540E;&#x518D;&#x52A0;&#x4E0A;51&#x5373;&#x53EF;
*/
int random = (int)(Math.random() *  50 + 51);
System.out.println(random);
  • 使用Random类的成员方法实现指定范围的随机数
// &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x968F;&#x673A;&#x6570;&#x7C7B;&#x7684;&#x5BF9;&#x8C61;
Random random = new Random();
// &#x8C03;&#x7528;&#x5176;nextInt&#x65B9;&#x6CD5;&#x83B7;&#x5F97;&#x4E00;&#x4E2A;&#x968F;&#x673A;&#x6574;&#x6570;&#xFF0C;&#x5176;&#x5B9E;&#x8DDF;Math.random&#x5DEE;&#x4E0D;&#x591A;
int number = random.nextInt(50) + 51;

System.out.println(number);

枚举类

枚举类的用途

  • 当需要定义一组常亮时使用枚举类

枚举类的基本使用

public class Calculate {
    public static void main(String[] args){
        // &#x7ED3;&#x679C;&#x4E3A;&#xFF1A; man
        System.out.println(Gender.man);

        // &#x7ED3;&#x679C;&#x4E3A;woman
        System.out.println(Gender.woman);
    }
}
enum Gender {
    man,woman
}

File文件类

获得文件或文件夹的属性信息(是否存在、文件/夹名称、绝对路径、父绝对路径、是否为文件、是否为文件夹、字节大小、是否可读/可写/可执行、最后修改的毫秒值、获得路径下所有文件及文件夹)

// File&#x7C7B;&#x5BF9;&#x8C61;&#x7684;&#x521B;&#x5EFA;
// &#x521B;&#x5EFA;&#x4E00;&#x4E2A;File&#x6587;&#x4EF6;&#x7C7B;&#x7684;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x8DEF;&#x5F84;&#x3001;&#x4E5F;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x6211;&#x8FD9;&#x6307;&#x5B9A;&#x7684;&#x662F;&#x6587;&#x4EF6;&#x5939;
File file = new File("d:/test");

// &#x5224;&#x65AD;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x5B58;&#x5728;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.exists();

// &#x83B7;&#x5F97;&#x6587;&#x4EF6;&#x6216;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x540D;&#x79F0;&#xFF0C;&#x8FD4;&#x56DE;String&#x7C7B;&#x578B;
file.getName();

// &#x83B7;&#x53D6;&#x6587;&#x4EF6;&#x7684;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#xFF0C;&#x8FD4;&#x56DE;String&#x7C7B;&#x578B;
file.getAbsolutePath();

// &#x83B7;&#x53D6;&#x7236;&#x7EA7;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#xFF0C;&#x8FD4;&#x56DE;String&#x7C7B;&#x578B;
file.getParent();

// &#x5224;&#x65AD;&#x662F;&#x5426;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.isFile();

// &#x5224;&#x65AD;&#x662F;&#x5426;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.isDirectory();

// &#x83B7;&#x5F97;&#x6587;&#x4EF6;&#x7684;&#x5B57;&#x8282;&#x5927;&#x5C0F;&#xFF0C;&#x8FD4;&#x56DE;long&#x7C7B;&#x578B;
file.length();

// &#x5224;&#x65AD;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x53EF;&#x8BFB;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.canRead();

// &#x5224;&#x65AD;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x53EF;&#x5199;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.canWrite();

// &#x5224;&#x65AD;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x53EF;&#x6267;&#x884C;&#xFF0C;&#x8FD4;&#x56DE;boolean&#x7C7B;&#x578B;
file.canExecute();

// &#x6587;&#x4EF6;&#x6700;&#x540E;&#x4FEE;&#x6539;&#x65F6;&#x95F4;&#x7684;&#x6BEB;&#x79D2;&#x503C;&#xFF0C;&#x8FD4;&#x56DE;long&#x7C7B;&#x578B;
file.lastModified();

// &#x83B7;&#x53D6;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x4E0B;&#x6240;&#x6709;&#x7684;&#x6587;&#x4EF6;&#x4E0E;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5E76;&#x7528;File&#x5C01;&#x88C5;&#xFF0C;&#x751F;&#x6210;&#x4E00;&#x4E2A;File&#x6570;&#x7EC4;&#xFF0C;&#x7C7B;&#x578B;&#x4E3A;&#xFF1A;File[]
file.listFiles();

创建/删除文件或文件夹

File file = new File("d:/test/abc");

// &#x521B;&#x5EFA;&#x5355;&#x4E2A;&#x6587;&#x4EF6;&#x5939;
file.mkdir();

// &#x521B;&#x5EFA;&#x591A;&#x7EA7;&#x6587;&#x4EF6;&#x5939;
file.mkdirs();

// &#x521B;&#x5EFA;&#x6587;&#x4EF6;
file.createNewFile();

// &#x5220;&#x9664;&#x6587;&#x4EF6;/&#x6587;&#x4EF6;&#x5939;
file.delete();

// &#x5224;&#x65AD;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x5B58;&#x5728;&#xFF0C;&#x5B58;&#x5728;&#x5219;&#x5220;&#x9664;
file.deleteOnExit();

小练习,删除一个文件夹

public class Calculate {
    public static void main(String[] args) throws IOException {
        File dir = new File("d:/test");

        // &#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x5220;&#x9664;&#x8BE5;&#x8DEF;&#x5F84;
        deleteDir(dir);
    }

    /**
     *
     * @param dir &#x4F20;&#x5165;&#x4E00;&#x4E2A;File&#x7C7B;&#x578B;&#x7684;&#x5BF9;&#x8C61;,&#x5E94;&#x8BE5;&#x6EE1;&#x8DB3;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x6761;&#x4EF6;
     */
    public static void deleteDir(File dir) {

        // &#x83B7;&#x53D6;&#x5230;&#x8BE5;&#x6587;&#x4EF6;&#x5939;&#x4E2D;&#x6240;&#x6709;&#x7684;&#x6587;&#x4EF6;&#x53CA;&#x5B50;&#x6587;&#x4EF6;&#x5939;
        File[] files = dir.listFiles();

        // &#x5C06;&#x6587;&#x4EF6;&#x53CA;&#x6587;&#x4EF6;&#x5939;&#x8FDB;&#x884C;&#x904D;&#x5386;
        for (File file : files) {
            // &#x5224;&#x65AD;&#x662F;&#x5426;&#x4E3A;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5982;&#x679C;&#x4E3A;&#x6587;&#x4EF6;&#x5939;&#x5219;&#x9012;&#x5F52;&#x8C03;&#x7528;&#x8BE5;&#x65B9;&#x6CD5;
            if(file.isDirectory()) {
                deleteDir(file);
            }else {
                // &#x5982;&#x679C;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5219;&#x4EE3;&#x8868;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x5C06;&#x5176;&#x5220;&#x9664;
                file.delete();
            }
        }

        // &#x6700;&#x540E;&#x5220;&#x9664;&#x7236;&#x6587;&#x4EF6;&#x5939;
        dir.delete();
    }
}

Original: https://www.cnblogs.com/itdqx/p/16521418.html
Author: code_Stars
Title: JAVA入门基础_从零开始的培训_JAVA常用的引用类型及其API(三)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594038/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • future用法-java中异步执行多个任务并集中处理所有结果

    需求背景 同事问了个问题,java中有什么办法让我异步查询多个表的数据,最后将所有结果进行处理输出想到future是解决这类问题常用的,于是写了个demo给他参考 简化需求 定义3…

    Java 2023年6月9日
    086
  • Docker 启动 Redis 就停止解决方案(2022-3)

    启动命令如下: docker run -itd \ -p 6379:6379 \ –name myredis \ -v /home/redis/redis.conf:/etc/r…

    Java 2023年6月9日
    090
  • SpringBoot 集成腾讯云短信服务

    开通腾讯云短信服务 注册腾讯云 个人实名认证 进入到控制台,在云产品中找到短信 默认是没有开通的,阅读服务协议后,点击开始接入 目前来说,只要实名认证过的,直接就可以开通短信服务 …

    Java 2023年5月30日
    080
  • 搬砖_kafka的一些命令

    有关kafka的一些命令 kafka查看当前消费组消费到哪个offset cd /opt/kafka/bin #&#x5373;&#x8FDB;&#x516…

    Java 2023年6月7日
    0105
  • Could not find resource com/xxx/xxx/StudentMapper.xml报错解决

    问题: Could not find resource com/xxx/xxx/StudentMapper.xml 原因: 没有导出xml文件,pom.xml文件配置有问题。也因为…

    Java 2023年6月15日
    083
  • Hyperledger Fabric 2.x 自定义智能合约

    一、说明 为了持续地进行信息的更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制;智能合约在 Fabric 中称之为 &#x…

    Java 2023年6月6日
    0104
  • 设计模式之享元模式

    享元模式又称蝇量模式或者羽量模式,属于结构型模式;是指以共享的方式高效的支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而…

    Java 2023年6月5日
    0126
  • 反射加缓存,解决不同的业务下调用不同的实现

    根据前端传入不同的支付code,动态找到对应的支付方法,发起支付。我们先定义一个注解。 @Retention(RetentionPolicy.RUNTIME) @Target(El…

    Java 2023年6月14日
    072
  • Spring简介

    ​ spring框架:spring是一个非常活跃的开源框架。基于IOC和aop来构架多层javaee系统,以帮助分离项目组件之间的依赖关系(解耦) 底层: 工厂模式+xml Spr…

    Java 2023年6月13日
    081
  • 两个有序数组求中位数算法

    最近研究一个算法表示很有收获,加深了对二分法的运用,记录如下: 原题 解法一 点击查看代码 //&#x4E11;&#x964B;&#x7684;&#…

    Java 2023年6月9日
    0101
  • SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP实现多数据源

    一、整合SpringJDBC 1 JDBC JDBC(Java Data Base Connectivity,Java 数据库连接)是一种用于执行 SQL 语句的 Java API…

    Java 2023年5月30日
    079
  • Netty源码解读(一)-前置准备

    前置条件 源码版本netty4.1 了解Java NIO、Reactor模型和Netty的基本使用。 解释一下: Java NIO:了解BIO和NIO的区别以及Java NIO基础…

    Java 2023年6月16日
    074
  • 项目全局异常处理

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    095
  • Java 读取Word文档中的文本内容

    1、添加依赖关系 org.apache.poi poi-ooxml 3.8 org.apache.poi poi-scratchpad 3.8 2、读取word内容代码 Strin…

    Java 2023年5月29日
    063
  • Linux系统中Redis和Tomcat的PID文件路径设置

    Tomcat: /bin/catalina.sh 文件头注释下面添加一行:CATALINA_PID=/var/run/tomcat.pid Redis: redis.conf配置文…

    Java 2023年6月5日
    0108
  • FileInputStream(文件字节输入流)

    FileInputStream(文件字节输入流) ​ 首先我们先看一下文件字节输入流 1.构造方法: 构造方法 说明 FileInputStream(File file) 通过打开…

    Java 2023年6月9日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球