04-常用API-01(Java.lang包)


前言

  • 什么是API

    ​ API (Application Programming Interface) :应用程序编程接口

  • java中的API

    ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来

    我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

一、知识网图

在这里插入图片描述
如图可以清晰的看到核心类库和拓展类库共同组成为类库,我们的API就是编程接口帮助我们具体实现这个类库。
在核心类库中,目前主要用到得比较多的是java.lang包和java.util包下的类

  • 本篇主要先说说java.lang包下的类
  • 注意:直接属于java.lang包下的类使用时都不需要导包

二、java.lang包下的常用API

1. Scanner类—键盘录入字符串

Scanner类 :

  • ​next() : 遇到了空格, 就不再录入数据了 , 结束标记: 空格, tab键
  • nextLine() : 可以将数据完整的接收过来 , 结束标记: 回车换行符

  • 问题:由于nextLine()遇到回车换行符就会结束,因此永远不能实现用户输入字符串的功能,如下:
    在这里插入图片描述
  • 解决方法:
  • 在这里插入图片描述
    在这里插入图片描述

2. String类

2.1 String概述

​ 1 String 类在 java.lang 包下,所以使用的时候不需要导包

(所有在 java.lang 包下的类,使用时都不需要导包)

​ 2 String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象

​ 3 字符串是常量,是不可变的,它们的值在创建后不能被更改
在这里插入图片描述

- 因为String内部都是被final修饰的

2.2 String类的构造方法

常用的构造方法
在这里插入图片描述

2.3 字符串的特点

  • java程序中所有的双引号字符串,都是String类型的对象

  • 字符串不可变,它们的值在创建后不能被更改

  • 内存结构图解:
    在这里插入图片描述虽然String的值是不可变的,但是它们可以共享

  • (原因:下面注意中的第二点)
    在这里插入图片描述

  • 注意:

  • 所有字符串常量都会存在方法区的字符串常量池中

  • 使用字符串字面量创建对象时,系统会检查该字符串是否在字符串常量池(方法区中)存在,

    • 如果不存在,会创建新的
    • 如果存在,不会重新创建而是直接复用

2.4 创建字符串对象的区别对比

  • 通过构造方法创建

    ​ 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

  • 直接赋值方式创建

    ​ 以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

  • 在内存中的理解
    在这里插入图片描述

2.5 String方法小结

  • String类的常用方法 :
  • 字符串的比较
  • public boolean equals(Object anObject) :
    • 比较字符串的内容,严格区分大小写
  • public boolean equalsIgnoreCase(String anotherString)
    • 比较字符串的内容,忽略大小写
  • 遍历字符串
  • public int length()
    • 返回此字符串的长度
  • public char charAt(int index)
    • 返回指定索引处的 char 值
  • 遍历并统计字符串中字符的个数
  • public char[] toCharArray()
    • 将字符串拆分为字符数组后返回
  • 截取字符串
  • public String substring(int beginIndex, int endIndex)
    • 根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)
  • public String substring(int beginIndex)
    • 从传入的索引处截取,截取到末尾,得到新的字符串
  • 替换字符串
  • public String replace(CharSequence target, CharSequence replacement)
    • 使用新值,将字符串中的旧值替换,得到新的字符串
  • 切割字符串
  • public String[] split(String regex)
    • 根据传入的规则切割字符串,得到字符串数组

3. StringBuilder类

3.1 StringBuilder类概述

为什么要用StringBuilder:
​ 在字符串拼接操作中,如果用"+"拼接运算中会产生大量的临时StringBuilder对象和临时字符串对象,浪费内存空间

  • 用"+"拼接运算时,StringBuilder对象和临时字符串对象的内存结构
    在这里插入图片描述
  • 所以为了避免内存空间的浪费,我们可以通过StringBuilder来完成,
  • 故StringBuilder适用于大量字符串拼接的场景

概述 : StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的

3.2 StringBuilder类和String类的区别

  • String类:

    • 内容是不可变的
  • StringBuilder类:

    • 内容是可变的
    • 默认长度为16

3.3 StringBuilder类的构造方法

常用的构造方法
在这里插入图片描述
在这里插入图片描述

public class StringBuilderDemo01 {
    public static void main(String[] args) {
        //public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length():" + sb.length());

        //public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length():" + sb2.length());
    }
}

3.4 StringBuilder常用的成员方法

  • 添加和反转方法
    在这里插入图片描述

  • PS1:public StringBuilder append(任意类型)使用中

  • 原本的StringBuilder对象接收添加后的内容
    在这里插入图片描述

  • 链式调用
    在这里插入图片描述- PS2:public StringBuilder reverse()反转

  • reverse()方法:是StringBuilder 类中利用位运算符进行字符位置交换的一个方法

  • 进行反转后,是会改变对象的内容的
    在这里插入图片描述### 3.5 StringBuilder和String相互转换【应用】

  • StringBuilder转换为String

    ​ public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String

  • String转换为StringBuilder

    ​ public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

  • 示例代码

public class StringBuilderDemo02 {
    public static void main(String[] args) {
        /*
        //StringBuilder 转换为 String
        StringBuilder sb = new StringBuilder();
        sb.append("hello");

        //String s = sb; //这个是错误的做法

        //public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
        String s = sb.toString();
        System.out.println(s);
        */

        //String 转换为 StringBuilder
        String s = "hello";

        //StringBuilder sb = s; //这个是错误的做法

        //public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
        StringBuilder sb = new StringBuilder(s);

        System.out.println(sb);
    }
}
  • PS:进行转换后,还能再反复进行互相转换
    在这里插入图片描述
  • 结论:反复进行互相转换,即当需要变化内容就转换为StringBuilder类的对象,如果不需要改变了,想让其不被改变,又可以转换为String类的对象。

3.6 StringBuilder拼接字符串案例

案例需求 :

​ 定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,

​ 并在控制台输出结果。例如,数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

实现步骤 :

  1. 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
  2. 定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
    返回值类型 String,参数列表 int[] arr
  3. 在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
  4. 调用方法,用一个变量接收结果
  5. 输出结果

代码实现 :

/*
    思路:
        1:定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        2:定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
          返回值类型 String,参数列表 int[] arr
        3:在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        4:调用方法,用一个变量接收结果
        5:输出结果
 */
public class StringBuilderTest01 {
    public static void main(String[] args) {
        //定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};

        //调用方法,用一个变量接收结果
        String s = arrayToString(arr);

        //输出结果
        System.out.println("s:" + s);

    }

    //定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
    /*
        两个明确:
            返回值类型:String
            参数:int[] arr
     */
    public static String arrayToString(int[] arr) {
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringBuilder sb = new StringBuilder();

        sb.append("[");

        for(int i=0; i<arr.length; i++) {
            if(i == arr.length-1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }

        sb.append("]");

        String s = sb.toString();

        return  s;
    }
}

3.7 StringBuilder—字符串反转案例

案例需求 :

例如: 键盘录入abcd,输出结果为dcba

思路:

  1. 键盘录入一个字符串,用Scanner实现
  2. 定义一个方法,实现字符串反转,返回值类型String,参数String类型
  3. 在方法中使用StringBuilder实现字符串的反转,并把结果转成Strin类型返回

代码实现:

 //        2. 定义一个方法,实现字符串反转,返回值类型String,参数String类型
    //        3. 在方法中使用StringBuilder实现字符串的反转,并把结果转成Strin类型返回
    public static String show(String str){
        StringBuilder sb = new StringBuilder(str);
        sb=sb.reverse();
        str=sb.toString();
        return str;
    }
    public static void main(String[] args) {
//        例如: 键盘录入abcd,输出结果为dcba
//        1. 键盘录入一个字符串,用Scanner实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str=sc.next();
        str=show(str);
        
        System.out.println(str);
    }

4. Math类

  • 1、Math类概述

    • Math 包含执行基本数字运算的方法
  • 2、Math中方法的调用方式

    • Math类中无构造方法,但内部的方法都是静态
    • 则可以通过 类名.进行调用
  • 3、Math类的常用方法
    在这里插入图片描述

5. System类

  • 被final修饰-不能被继承;没有构造方法-不能被实例化

  • 内部方法都是静态的方法,通过类名.进行调用

  • System类的常用方法
    在这里插入图片描述

  • 示例代码

  • public static long currentTimeMillis()
    在这里插入图片描述

  • 需求1:在控制台输出1-10000,计算这段代码执行了多少毫秒

public class SystemDemo {
    public static void main(String[] args) {
        // 获取开始的时间节点
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 10000; i++) {
            System.out.println(i);
        }
        // 获取代码运行结束后的时间节点
        long end = System.currentTimeMillis();
        System.out.println("共耗时:" + (end - start) + "毫秒");
    }
}
  • 需求2:从指定源数组中复制一个数组

    • 复制从指定的位置开始,到目标数组的指定位置结束
  • 使用方法:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
    在这里插入图片描述

6. Object类

6.1 Object类的toString方法

  • Object类概述

    • Object 是类层次结构的根

    • 每个类都可以将 Object 作为超类。

    • 所有类都直接或者间接(多层继承直至Objeck类)的继承自该类,换句话说,该类所具备的方法,所有类都会有一份

    • 内部方法都是非私有的方法,子类都能调用

  • 查看方法源码的方式

    • 选中方法,按下Ctrl + B
  • 重写toString方法的方式

      1. Alt + Insert 选择toString
      1. 在类的空白区域,右键 -> Generate -> 选择toString

某类若没有重写Object类中toString方法,输出打印该类对象时就会调用Objeck的toString方法,如上

  • toString方法的作用:

    • 以良好的格式,更方便的展示对象中的属性值

6.2 Object类的equals方法

  • equals方法比较实体类对象时比较的是地址值

  • 在String类中比较的是字符串的内容:并且区分大小写

  • equals方法的作用

    • 用于对象之间的比较,返回true和false的结果
    • 举例:s1.equals(s2); s1和s2是两个对象
  • 重写equals方法的场景

    • 不希望比较对象的地址值,想要结合对象属性进行比较的时候。
  • 重写equals方法的方式

    • 方式一:alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
    • 方式二:在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上
      在这里插入图片描述
      在这里插入图片描述

7. Objects类

  • 在 JDK1.7以后才有的Objects 类

  • 内部的方法都是静态方法,因此直接通过 类名. 进行调用

  • 常用方法
    在这里插入图片描述

Objects类常用方法-示例代码

测试类

package com.wedu.ObjeckStudy;

import com.wedu.ObjeckStudy.domain.Student;

import java.util.Objects;

public class ObjeckStudyDemo01 {
	public static void main(String[] args) {
        /*
        * Objects (应用)——常用方法如下
        */
        //1.
        //public static tring tostring(对象)返回参数中对象的字符串表示形式
        Student student1 = new Student("01","猪八戒", 50);
        System.out.println(Objects.toString(student1));//与下面那条语句的结果一样,了解即可
        System.out.println(student1);

        //2.
        //public static String tostring(对象,默认字符串)返回对象的字符串表示形式
        Student student2 = new Student();//如果无参构造了该对象,控制台打印结果依旧会执行Student.toString方法
        System.out.println(Objects.toString(student2,"该对象为空,请知晓"));
        student2=null;
        System.out.println(Objects.toString(student2,"该对象为空,请知晓"));

        System.out.println("================================");
        //3.
        //public static Boolean isNuLL(对象)判断对象是否为空——是不是空的
        System.out.println(Objects.isNull(student2));
        System.out.println(student2 == null);

        //4.
        //falsepublic static Boolean nonNuLL(对象)判断对象是否不为空——是不是不为空的/是不是有内容在里面
        System.out.println(Objects.nonNull(student2));
        System.out.println(student2!=null);
    }
}

8. BigDecimal类

  • 为什么适用BigDecimal

  • 运算过程:

    先要将十进制转换为二进制,得出运算结果后再转换为十进制进行显示

    而浮点数没法通过二进制精确表示,所以存在精度误差问题

  • 作用

    • 可以用来进行精确计算
    • 场景:适用于对精度比较高的场景,尤其用于金融场景下金额的计算
  • 特殊:
    在API帮助文档可以看到BigDecimal类是属于math类下的子类,因此虽然间接在java.lang包下,但是也需要导入math类的包才能使用
    在这里插入图片描述

  • 构造方法
    在这里插入图片描述

  • 尽量使用BigDecimal(String val),传递字符串形式进行精度问题的解决

  • 常用方法
    在这里插入图片描述

  • 总结

  1. BigDecimal是用来进行精确计算的
  2. 创建BigDecimal的对象,构造方法使用参数类型为字符串的
  3. 四则运算中的除法,如果除不尽请使用divide的三个参数的方法

BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
(以下都是API-JDK9中已过时的方法,可以用,但是存在可替代的方法,后期再学习)

参数1 ,表示参与运算的BigDecimal 对象。 参数2 ,表示小数点后面精确到多少位 参数3 ,舍入模式
BigDecimal.ROUND_UP 进一法 BigDecimal.ROUND_FLOOR 去尾法
BigDecimal.ROUND_HALF_UP 四舍五入

9. 包装类

9.1 基本类型包装类

  • 基本类型包装类的作用

    将基本数据类型封装成对象的好处在于:可以在对象中定义更多的功能方法操作该数据

    常用的操作之一:用于基本数据类型与字符串之间的转换

  • 基本类型对应的包装类
    在这里插入图片描述

9.2 Integer类(应用)

  • Integer类概述

    包装一个对象中的原始类型 int 的值

  • Integer类构造方法
    在这里插入图片描述
    在这里插入图片描述

  • 其他类型同理

9.3 自动拆箱和自动装箱

  • 自动装箱

    ​ 把基本数据类型转换为对应的包装类类型

  • 自动拆箱

    ​ 把包装类类型转换为对应的基本数据类型

9.4 int和String类型的相互转换

  • int转换为String

  • 转换方式

    • 方式一:直接在数字后加一个空字符串
      在这里插入图片描述

    • 方式二:通过String类静态方法valueOf()

  • String转换为int

  • 转换方式

    • 方式一:先将字符串数字转成Integer,再调用valueOf()方法
      在这里插入图片描述

    • 方式二:通过Integer静态方法parseInt()进行转换
      在这里插入图片描述

    • 注意:(方式一方式二同理)

在这里插入图片描述

9.5 字符串数据排序案例

  • 案例需求

    ​ 有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果是:27 38 46 50 91

  • 思路

    • 使用String中的String[] split(String regex)方法进行切割

      分隔符选择空格,因为字符串中的有效数字之间是用空格分隔的

    • 创建int类型的数组,来接收字符串切割后并经过转换的数据,因为转换类型后才能进行排序

    • 用循环和String转换为int的方式二进行类型转换得到最终的int数组

    • 按要求进行排序

    • 使用循环遍历打印该数组

  • 代码实现:

public class IntegerTest {
    public static void main(String[] args) {
        //定义一个字符串
        String s = "91 27 46 38 50";

        //把字符串中的数字数据存储到一个int类型的数组中
        String[] strArray = s.split(" ");
//        for(int i=0; i<strArray.length; i++) {
//            System.out.println(strArray[i]);
//        }

        //定义一个int数组,把 String[] 数组中的每一个元素存储到 int 数组中
        int[] arr = new int[strArray.length];
        for(int i=0; i<arr.length; i++) {
            arr[i] = Integer.parseInt(strArray[i]);
        }

        //对 int 数组进行排序
        Arrays.sort(arr);

      	for(int i=0; i<arr.length; i++){
         System.out.print(arr[i] + " ");
      	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值