常见API(二)

API 应用程序编程接口,提高编程效率。本次学习了Object类,Objects工具类,包装类,StringBuilder,StringBuffer,和StringJoiner。

目录

1.Object

常见方法:

2.Objects

常见方法:

3.包装类

介绍:

包装类的相关操作:

4.StringBuilder

介绍:

使用好处:

StringBuffer*

案例

5.StringJoiner

介绍:

[常用方法 :](#常用方法 :)


1.Object

Object类是java中所有类的祖宗类,因此所有类都可以直接使用Object类中的一些方法

常见方法:

|---------------------------------|--------------|
| 方法名 | 说明 |
| public String toString() | 返回对象的字符串表达形式 |
| public boolean equals(Object o) | 判断两个对象是否相等 |
| protected Object clone() | 对象克隆 |

java 复制代码
package d10_api_Object;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //重写equals方法,比好两个对象的内容一样就返回true
    //比较者:s2 == this
    //被比较者:s1 == o
    @Override
    public boolean equals(Object o) {
        //1.判断两个对象的地址是否一样 一样直接返回true
        if (this == o) return true;
        //2.判断o是否为null直接返回false 比较的二者类型不相同,返回false
        if (o == null || getClass() != o.getClass()) return false;
        //3.o不是空 且一定是学生类型的对象,开始比较内容了
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        //super 去调用父类的Object的clone方法
        //使用时类要加一个Cloneable的接口 这是一个标记接口
        //会有报错提醒 需要去抛开
        return super.clone();
    }

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

package d10_api_Object;

public class Text {
    public static void main(String[] args) {
        //目标:学习认识API Object
        Student s1 = new Student("陈平安",19);
        System.out.println(s1.toString());
        System.out.println(s1); //s1 默认是调用toString方法
        //toString默认是显示地址,实际用处不大,常重写为显示内容

        Student s2 = new Student("陈平安",19);
        System.out.println(s2.equals(s1));
        //equals默认是比较两个元素的地址
        System.out.println(s2 == s1); //一样可以进行地址的比较
        // 所以还是会需要子类去重写这个方法 去比较内容

        //克隆
        //浅克隆 :拷贝出的新对象与原数据中的一模一样(引用类型拷贝的只是地址)
        //深克隆:对象中的基本数据类型直接拷贝
        //       字符串数据拷贝的还是地址
        //       还包含的其他对象,不会拷贝地址,会创建新对象

    }
}

2.Objects

Objects是一个工具类,提供了很多操作对象的静态方法给我们使用

常见方法:

|-------------------------------------------------|--------------------------------|
| 方法名 | 说明 |
| public static boolean equals(Object a,Object b) | 先做非空判断,再比较两个对象 |
| public static boolean isNull(Object obj) | 判断对象是否为null,为null返回true,反之 |
| public static boolean nonNull(Object obj) | 判断对象是否不为null,不为null则返回 true,反之 |

java 复制代码
package d10_api_Object;

import java.util.Objects;

public class Text2 {
    public static void main(String[] args) {
        //目标:掌握Objects类提供的常用方法
        String s1 = null;
        String s2 = "楠楠";
        //System.out.println(s1.equals(s2));
        //自身是空 有安全问题 会报错
        System.out.println(Objects.equals(s1, s2));
        //更加安全

        System.out.println(Objects.isNull(s1)); //ture
        System.out.println(s1 == null); //原理是一致的
        System.out.println(Objects.isNull(s2));

        System.out.println(Objects.nonNull(s1));
        System.out.println(Objects.nonNull(s2));
        
    }
}

3.包装类

包装类就是把基本类型的数据包装成对象

介绍:

|------------|--------------------|
| 基本数据类型 | 对应的包装类(引用数据类型) |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Float |
| boolean | Boolean |

包装类的相关操作:

  1. 包装类的创建 自动装箱 自动拆箱
java 复制代码
package d10_api_Object;

import java.util.ArrayList;

public class Text3 {
    public static void main(String[] args) {
        //目标:掌握包装类的使用
        //Integer a = new Integer(12);//已过时
        Integer a = Integer.valueOf(12);
        System.out.println(a);

        //自动装箱:可以自动把基本类型的数据转换为对象
        Integer a3 = 12;

        //自动拆箱:可以自动把包装数据类型的对象转换为对应的基本数据
        int a4 = a3;
        System.out.println(a4); //12

        //泛型和集合不支持基本数据类型 只能支持引用数据类型
        //ArrayList<int> list = new ArrayList<int>(); 报错
        ArrayList<Integer> list  = new ArrayList<>();
        list.add(12);
        list.add(13); //自动装箱

        int rs = list.get(1); //自动拆箱
    }
}

2.其他相关操作

java 复制代码
    //1.把基本类型的字符串转化为字符串
        Integer a5 = 23;
        String s1 = Integer.toString(a5);
        System.out.println((s1 + 1));
        //也可以这样
        String s2 = a5 + "";
        System.out.println((s2 + 1));

        //2.把字符串类型的 数值 转化成对应的基本类型
        String ageStr = "29";
        //int age = Integer.parseInt(ageStr); //29
        //直接使用 valueOf 转化
        int age = Integer.valueOf(ageStr); //29
        System.out.println((age + 1)); //30

        String score = "99.5";
        double sco = Double.parseDouble(score);
        System.out.println(sco+0.5); //100

4.StringBuilder

可变字符串对象,相当于一个容器,里面装的字符串可以改变,用来操作字符串的

介绍:

|----------------------------------|-------------------------|
| 构造器 | 说明 |
| public StringBuilder() | 创建一个空白的可变的字符串对象,不包含任何内容 |
| public StringBuilder(String str) | 创建一个指定字符串内容的可变字符串对象 |

|-----------------------------------|-----------------------------------|
| 方法名称 | 说明 |
| public StringBuilder append(任意类型) | 添加数据并返回StringBuilder对象本身 |
| public StringBuilder reverse() | 将对象的内容反转 |
| public int length() | 返回对象内容长度 |
| public String toString() | 通过toString()就可以实现把String转换为String |

java 复制代码
package d10_api_Object;

public class Text4 {
    public static void main(String[] args) {
        //目标:搞清楚StringBuilder的用法和作用
        //StringBuilder s= new StringBuilder(); //s ""
        StringBuilder s= new StringBuilder("楠楠");

        //1.拼接内容
        s.append("K");
        s.append(12);
        System.out.println(s);//

        //支持链式编程
        s.append(666).append(777).append(888);
        System.out.println(s);

        //2.反转内容
        s.reverse();
        System.out.println(s);

        //3.返回字符串长度
        System.out.println(s.length());

        //4.把StringBuilder类型转化为String类型
        String rs = s.toString();
        System.out.println(rs);

    }
}

使用好处:

相比于String的好处:更适合做字符串频繁的修改,拼接。效率会更高,代码更简洁。

java 复制代码
package d10_api_Object;

public class Text5 {
    public static void main(String[] args) {
        //目标:掌握StringBuilder 的使用好处
        //需求:要拼接100万次abc
        //先用 String 测试性能
      /*  String rs = "";
        for (int i = 0; i < 1000000; i++) {
            rs = rs + "abc";
        }
        System.out.println(rs);
       */
        //测试性能很差
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100000; i++) {
            sb.append("abc");
        }
        System.out.println(sb);

        //执行效率快
    }
}

StringBuffer*

  • StringBuffer的用法和StringBuider是一模一样的
  • 但是StringBuilder是线程不安全的,而StringBuffer是线程安全的

案例

需求:设计一个方法,用于返回任意整型数组的内容,要求返回的数组内容格式如[11,22,33]

java 复制代码
package d10_api_Object;

public class Text6 {
    public static void main(String[] args) {
        //目标:完成遍历数组内容,并拼接或指定格式的案例
        int [] a = {11,22,33};
        String s = getArrayData(a);
        System.out.println(s);
    }

    public static String getArrayData(int [] arr){
        //判空
        if(arr == null){return null;}

        //数据存在
        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("]");
        return sb.toString();
    }
}

5.StringJoiner

介绍:

(JDK8 后才有)

和StringBuilder一样,也是用来操作字符串,也可以看做一个容器,内容是可变的。

好处:可以提高效率,而且更加简洁。

常用方法 :

|---------------------------------------|-----------------------------------------|
| 构造器 | 说明 |
| public StringJoiner (间隔符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号 |
| public StringJoiner (间隔符号,开始符号,结束符号 ) | 创建一个StringJoiner对象,指定拼接时的间隔符号,开始符号,结束符号 |

|-------------------------------|------------------------|
| 方法名称 | 说明 |
| public StringJoiner add(添加内容) | 添加数据,并返回对象本身 |
| public int length() | 返回长度(字符出现的个数) |
| public String toString | 返回一个字符串(该字符串就是拼接之后的结果) |

java 复制代码
package d10_api_Object;

import java.util.StringJoiner;

public class Text7 {
    public static void main(String[] args) {
        //目标:掌握StringJoiner的使用
        StringJoiner s = new StringJoiner(" ");
        s.add("楠楠");
        s.add("等你");
        System.out.println(s);

        StringJoiner s1 = new StringJoiner(" ","[","]");
        s1.add("会的");
        s1.add("是嘛");
        System.out.println(s1);
    }
}

学习时间:2024.8.5

相关推荐
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~3 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616883 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java4 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习