常见API(二)

news2024/9/22 8:46:41

           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()对象克隆

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,反之

 

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

intInteger
longLong
charCharacter
floatFloat
doubleFloat
booleanBoolean

包装类的相关操作:

         1. 包装类的创建 自动装箱 自动拆箱

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.其他相关操作

    //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

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的好处:更适合做字符串频繁的修改,拼接。效率会更高,代码更简洁。 

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]

 

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返回一个字符串(该字符串就是拼接之后的结果)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing开放地址法和拉链法

开放地址法&#xff0c;把h数组全部设置为3f&#xff0c;然后设定null为0x3f3f3f3f&#xff0c;find函数设定返回值t&#xff0c;如果h[t]null,那么x在h中不存在&#xff0c;否则为存在 #include<iostream> #include<cstring> #include<string> #define LEN…

在Vue3中如何为路由Query参数标注类型

前言 最近发布了一款支持IOC容器的Vue3框架&#xff1a;Zova。与以往的OOP或者Class方案不同&#xff0c;Zova在界面交互层面仍然采用Setup语法&#xff0c;仅仅在业务层面引入IOC容器。IOC容器犹如一把钥匙&#xff0c;为我们打开了业务工程化的大门&#xff0c;允许我们探索…

Linux网络编程2

TCP编程 顺序图 socket() 函数 socket()函数用于创建一个新的套接字。它是进行网络编程的第一步&#xff0c;因为所有的网络通信都需要通过套接字来进行。 原型&#xff1a; #include <sys/socket.h> int socket(int domain, int type, int protocol); domain&…

使用Go语言绘制饼图的教程

使用Go语言绘制饼图的教程 在本教程中&#xff0c;我们将学习如何使用Go语言及gg包绘制饼图&#xff0c;并将其保存为PNG格式的图片。饼图是一种常用的数据可视化图表&#xff0c;用于展示数据的比例关系和组成部分。 安装gg包 首先&#xff0c;确保你已经安装了gg包。如果还…

前端的学习-CSS(七)

一&#xff1a;定位(position) 1&#xff1a;为什么使用定位。 有一些固定的盒子&#xff0c;并且压在其他盒子上面&#xff0c;一些网页&#xff0c;会有固定的窗口&#xff0c;这些是标准流和浮动无法解决的&#xff0c;比如下面的例子。旁边的红色边框的效果是不会随着页面的…

汇昌联信数字做拼多多运营怎么入行?

拼多多作为中国领先的电商平台之一&#xff0c;近年来在数字运营领域展现出了强大的生命力和创新能力。汇昌联信数字作为一个潜在的新入行者&#xff0c;如何进入拼多多的运营领域&#xff0c;成为业界关注的焦点。本文旨在探讨汇昌联信数字如何通过有效的策略和方法&#xff0…

hal库回调函数机制

1. 第一行就是标准库函数的 在 nvic那个中断向量表里面的函数 以前写的都是 在中断向量表里面把这个中断处理函数重写 2. 第二行 第三行 的 hal库就是 通过中断向量表里面的这个函数 &#xff0c;再一次调用hal自己的中断回调函数&#xff0c;就是相当于多封装了两层 这个图更…

局部整体(二)利用python绘制维恩图

局部整体&#xff08;二&#xff09;利用python绘制维恩图 维恩图&#xff08; Venn Diagram&#xff09;简介 维恩图显示集与集之间所有可能存在的逻辑关系&#xff0c;每个集通常以一个圆圈表示&#xff0c;每个集都是一组具有共同之处的物件或数据。当多个圆圈&#xff08;…

【Material-UI】File Upload Button 组件详解

文章目录 一、基础实现1. component"label"2. 隐藏的输入元素 二、样式和交互增强1. 自定义按钮样式2. 交互提示 三、支持多文件上传四、无障碍性&#xff08;Accessibility&#xff09;1. 提供 aria-label 或 aria-labelledby2. 支持键盘导航 五、高级用法和集成1. …

leetcode-215. 数组中的第K个最大元素

题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5…

STM32-低功耗模式详解

一、概述 低功耗模式&#xff08;Low Power Mode&#xff09;是为了减少电子设备的能耗而设计的操作模式&#xff0c;广泛应用于依赖电池供电的设备中&#xff0c;旨在延长电池寿命或减少能源消耗。在用户需要设备长时间工作或在电量极为有限的情况下非常实用&#xff0c;虽然牺…

如何在IDEA上使用JDBC编程【保姆级教程】

目录 前言 什么是JDBC编程 本质 使用JDBC编程的优势 JDBC流程 如何在IEDA上使用JDBC JDBC编程 1.创建并初始化数据源 2.与数据库服务器建立连接 3.创建PreparedStatement对象编写sql语句 4.执行SQL语句并处理结果集 executeUpdate executeQuery 5.释放资源 前言 在…

yandex 不定长旋转验证码PPOCR识别案例

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 某yandex 不定长旋转验证码如下: 可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证…

『 C++ 』异常

文章目录 异常概念及使用自定义类型的异常C 标准库的异常体系异常的重新抛出异常安全异常规范异常的优缺点 异常概念及使用 C语言常见的错误处理机制如下: 返回值约定 通过定义一些列的返回值以及其对应的错误信息表述,通过不同的返回值来查看当前函数是否与调用成功; 通常情…

锂电池生产工艺数字化的业务架构.pptx

搜索《方案驿站》公众号进行下载。

【系统架构设计】数据库系统(五)

数据库系统&#xff08;五&#xff09; 数据库模式与范式数据库设计备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 备份与恢复 分布式数据库系统 数据仓库 数据挖掘 对数据挖掘技术进行支持的三种基础技术已经发展成熟&#xff0c…

【设计模式】六大原则-上

首先什么是设计模式&#xff1f; 相信刚上大学的你和我一样&#xff0c;在学习这门课的时候根本不了解这些设计原则和模式有什么用处&#xff0c;反而不如隔壁的C更有意思&#xff0c;至少还能弹出一个小黑框&#xff0c;给我个hello world。 如何你和我一样也是这么想&#xf…

2-56 基于matlab的图像融合增强技术

基于matlab的图像融合增强技术。通过原始图像——傅里叶变换——频率域滤波处理——傅里叶变换——增强后的图像。傅立叶变换以及傅立叶反变换.过程就是将空间的信息分解为在频率上的表示,通过傅立叶正反变换的处理,才使得频率域上的处理可以用于图像的增强。程序已调通&#x…

联想QuickFix工具中心,一款综合性电脑维护和管理工具

联想QuickFix工具中心是联想公司推出的一款综合性电脑维护和管理工具&#xff0c;它集成了众多实用的电脑维护工具&#xff0c;如系统优化、硬盘清理、网络优化、硬件诊断等&#xff0c;旨在为用户提供一个便捷的平台来解决电脑日常使用中遇到的各种问题。该工具中心适用于Wind…

AttributeError: ‘ChatGLMTokenizer‘ object has no attribute ‘sp_tokenizer‘. 已解决

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…