JAVA:常用API

一.什么是API?

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

简单的来说:就是Java帮我们已经写好的方法,我们可以直接使用。

二.有哪些常用的API?

Object、Objects、StringBuilder、Math、System、BigDecimal等

三.Object

1、Object类的作用:

一个类要么默认继承了Object类,要间接继承了Object类,Object类是Java中的祖宗类。

Object类的方法是一切子类都可以直接使用,所以我们要学习Object类的方法。

2、Object类的常用方法

方法名说明
public String toString()默认是返回当前对象在堆内存中的地址信息:类的全限定名@内存地址
public Boolean equals(Objecto)默认是比较当前对象与另一个的地址是否相同,相同返回true,不相同即返回false

3、Object的toString方法

方法名说明
public String toString()默认是返回当前对象在堆内存中的地址信息:类的全限定名@内存地址
public class Student{ // extends object 任何定义的类都继承祖宗类:Object,写不写都行
//    定义学生属性:姓名性别年龄
    private String name;
    private char sex;
    private int age;

    public Student() {
    }

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
//       @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//        Student student = (Student) o;
//        return sex == student.sex &&
//                age == student.age &&
//                Objects.equals(name, student.name);
//    }
//    
    //    @Override
//    public String toString() {
//        return "Student{" +
//                "name='" + name + '\'' +
//                ", sex=" + sex +
//                ", age=" + age +
//                '}';
//    }

    public String getName() {
        return name;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student("双面龟", '龟', 15);
//        toString:默认是返回当前对象在堆内存中的地址中的地址信息——>类的全限名@内存地址
        String s = stu1.toString();
        System.out.println(s);
        System.out.println("------");
//        默认可以省略toString调用不写
        System.out.println(stu1.toString());
        System.out.println(stu1);
    }
}

控制台输出结果:

 开发中直接输出对象,默认输出对象地址其实是毫无意义的,开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。这个时候,父类toString方法存在的意义就是为了被子类重写,以便于返回对象的内容信息,而不是地址信息

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

控制台输出结果:

此时父类Obiect的toString方法已被子类Student重写,按照Java的就近原则,就会找子类的toString。

toString总结 

Object的toString方法的作用是什么?

默认是打印当前对象的地址信息;

让子类重写,以便于返回子类对象的内容信息。

4、Object的equals方法

方法名

说明
public Boolean equals(Object o)默认是比较当前对象和另一个对象是否相同,相同返回true,不同返回false

例:如果是直接使用默认equals比较两个对象:

public class Test02 {
    public static void main(String[] args) {
        Student stu1 = new Student("阿酷", '鱼', 15);
        Student stu2 = new Student("阿酷", '鱼', 15);
        System.out.println(stu1==stu2);
    }
}

因为stu1和stu2都是新对象,地址不同,比对后返回false:

 父类equals方法存在的意义就是为了被子类重写,以便子类自己来指定比较规则这个就是equals存在的意义。

    @Override
    public boolean equals(Object o) {
//        第一层过滤:判断是否为同一个对象在比较,是则返回true
        if (this == o) return true;
/*        第一层过滤后,证明不是自己和自己比较进入第二层
          进入第二层过滤:判断传入的’0‘是否是null,如果是空值直接返回false
          或者是this.getClass(stu1的类型)是否与o.getClass(stu2的类型)不相同,是则返回false
 */
        if (o == null || getClass() != o.getClass()) return false;
//        过滤完毕,说明传入的’o‘不是null,stu1和stu2类型也相同,将Ojbect类型的’o‘强制转换为Student类型
        Student student = (Student) o;
//        两者性别、年龄、性别都相等、返回true,不然就是返回false
        return sex == student.sex &&
                age == student.age &&
                Objects.equals(name, student.name);
    }
public class Test02 {
    public static void main(String[] args) {
        Student stu1 = new Student("阿酷", '鱼', 15);
        Student stu2 = new Student("阿酷", '鱼', 15);
        Student stu3 = new Student("泡泡", '鱼', 15);
        System.out.println(stu1==stu2);
        System.out.println(stu1.equals(stu1));
        System.out.println(stu1.equals(null));
        System.out.println(stu1.equals(stu3));
        System.out.println(stu1.equals(stu2));
    }
}

控制台输出结果:

 equals总结

Object的equals方法的作用是什么?

默认是否与另一个对象比较地址是否相等;

让子类重写,以便于比较2个子类对象的内容是否相等。

四、Objects

Objects类与Object是继承关系,Objects类是从jdk1.7开始之后才有的。

1、Objects的常见方法

方法名

说明

public static boolean equals(Object a,Object b)比较两个对象,底层会进行非空判断,从而可以避免空指针异常;再进行equals比较
public static boolean isNull(Object obj)判断变量是否为null,为null返回true,否则返回false

官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的euqals方法来比较两个对象:

 Object的equals方法留下的隐患:

 Objects的equals方法比较的结果是一样的,但是更安全。

Objects的equals方法解决了这个隐患:

控制台输出结果:

 

2.isNull的使用

public class Test04 {
    public static void main(String[] args) {
        String s1 = null;
        String s2 = "嘻嘻";
        
//      默认方法直接判断  
        System.out.println(s1 == null);
        System.out.println(s2 == null);
//      调用isNull方法的话就显得更专业、优雅
        System.out.println(Objects.isNull(s1));
        System.out.println(Objects.isNull(s2));

    }
}

 控制台输出结果:

 五、StringBuilder

1、什么是StringBuilder

StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。

作用:提高字符串的操作效率,如拼接、修改等。

2.String Builder构造器

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

3.String Builder常用方法

方法名称说明
public StringBuilder append(任意类型)添加数据并返回
public StringBuilder reverse()将对象的内容反转
public int length()返回对象内容长度
public String toString()通过toString就可以实现把StringBuilder转换为String
public class Test {
    public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder();
        // append方法:添加数据并返回StringBuilder对象本身
        sb1.append(3);
        sb1.append('月');
        sb1.append(18);
        sb1.append('日');
        sb1.append(22.42);
        sb1.append("我在想什么");

        System.out.println(sb1);
//         StringBuilder支持链式编程
        StringBuilder sb2 = new StringBuilder();
        sb2.append("nam的").append("正真").append("个一");
//        reverse方法:将对象的内容反转
        System.out.println(sb2.reverse());
//        注意:StringBuilder只是拼接字符串的手段:效率好;
//        最终的目的还是要恢复String类型
        StringBuilder sb3 = new StringBuilder();
        sb3.append("唱跳").append("rap");
//        toString方法:恢复成string类型
        /*
        为什么要恢复成string类型:
        大多数人的习惯,都习惯接收一个string类型的密码
         */
        String result = sb3.toString();
        checkPassWord(result);

    }
//    检查密码
    public static void checkPassWord(String passWord){
        System.out.println(passWord);
    }
}

控制台输出结果:

4.StringBuilder的优点

 String类拼接字符串,由于String类是不可变字符串,所以一个“+”符号,就要在堆内存中产生一个新对象,并且拼接完后,又会将原对象当做垃圾扔掉,非常浪费内存,性能也不好。

StringBuilder类拼接字符串,只需要创建一个新对象,而且每拼接完一次,就会返回原对象,效率高,性能好。

 总结:

为什么拼接、反转字符串的时候要用StringBuilder?

String:内容不可变、拼接字符串性能差‘

StringBuilder:内容是可变的、拼接字符串性能好、书写优雅

定义字符串使用String;

拼接、修改等操作字符串使用StringBuilder。

六:案例:打印整型数组内容

1、需求

设计一个方法用于输出任意整型数组的内容,要求输出成如下格式

"该数组的内容为:[11,22,33,44,55,66]"

2、分析

1、定义一个方法,用于接收一个数组,将数组内容输出
2、当传入的数组不为null时,才开始拼接,否则返回null
3、定义循环,遍历数组内容
4、在循环外,定义一个空的StringBuilder对象,用于拼接遍历出的数组内容,先拼个左中括号,利用有参构造器,省一行代码
5、在循环内,判断每次遍历到的这个数据 是否为 最后一个,是则不用", “隔开,否则用”, "隔开
6、拼一个右中括号
7、将拼接结果恢复成字符串类型并返回
8、模拟一组数据,传入方法

/*
需求:
设计一个方法用于输出任意整型数组的内容,要求输出成如下格式:
"该数组的内容为:[11,22,33,44,55]"
 */
public class Test02 {
    public static void main(String[] args) {
        int[] a = {11, 22, 33, 44, 55};
        String rs = printArr(a);
        System.out.println("该数组内容为:"+rs);
        System.out.println("---------------");
        int[]b = null;
        System.out.println("该数组内容为:"+printArr(b));
        System.out.println("---------------");
        int[]c = {};
        System.out.println("该数组内容为"+printArr(c));
    }
//    定义一个方法,用于接收一个数据,将数组内容输出
public static String printArr(int[]arr) {
//        当传入的数组不为null时,才开始拼接。
    if (arr != null) {
//        在循环外,定义一个空的StringBuilder对象,用于拼接遍历出的数组内容
//        利用有参构造器,先拼一个左中括号
        StringBuilder sb = new StringBuilder("[");
//        定义循环,遍历数组内容
        for (int i = 0; i < arr.length; i++) {
//            在循环内,判断每次遍历到的数字是否为最后一个,不是加上","隔开,是则不用
            sb.append(arr[i]).append(i == arr.length - 1 ? "" : ",");
        }
//        拼一个右中括号
        sb.append("]");
//        将拼接结果恢复成字符串类型并返回
        return sb.toString();
    } else {
//        是null则返回null
        return null;

    }
}
}

 控制台输出结果:

七:System 

1.什么是System

System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。

2.System类的常用方法

方法名说明
public static void exit终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis()返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数组拷贝

计算机来历:

时间毫秒值:

  • 计算机认为时间是有起点的, 起始时间:1970年1月1日 00:00:00
  • 时间毫秒值:指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的。1s = 1000ms。
public class SystemExitTest {
    public static void main(String[] args) {
        System.out.println("程序开始.......");
        System.exit(0);
//        System的exit方法:JVM终止(程序终止)
    }
}

public class currentTimeMillisTest {
    public static void main(String[] args) {
//        计算机认为起源时间:返回1970-1-1 00:00:00 走到刺客的总的毫秒值:时间毫秒值
        long time = System.currentTimeMillis();
        System.out.println(time);
//        分析开始之前,先记录一个起始时间
        long startTime = System.currentTimeMillis();
//        进行时间的计算:性能分析
        for (int i = 0; i < 10000; i++) {
            System.out.println("输出:"+i);
        }
//        分析结束,记录一个结束时间
        long endTime = System.currentTimeMillis();
//        将毫秒值转换成秒值:(结束时间 - 开始时间) /1000.0秒
        System.out.println((endTime - startTime)/1000.0+"s");
    }
}

 

public class ArraycopyTest {
    public static void main(String[] args) {
//        原数组
        int[] arr1 = {11,22,33,44,55};
//        新数组
        int[] arr2 = new int[6];
//        拷贝数组内的位置:1和2
        System.arraycopy(arr1,1,arr2,1,2);
//        输出arr2
        System.out.println(Arrays.toString(arr2));

    }
}

 七、BigDecimal

1.作用

用于解决浮点型运算精度失真的问题。

 创建BigDecimal对象来封装浮点型数据(最后的方式是调用方法)

public static BigDecimal valueOf(double val):	封装浮点数成为BigDecimal对象。

2.BigDecimal常用API

方法名说明
public BigDecimal add(BigDecimal b)加法
public BigDecimal subtract(BigDecimal b)减法
public BigDecimal multiply(BigDecimal b)乘法
public BigDecimal divide(BigDecimal b)除法
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)除法

注意事项
【强制】 禁止使用构造方法BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象。

​ 说明:BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

​ 如:BigDecimal g = new BigDecimal(0.1F); 实际的存储值为:0.10000000149。

 正例: 优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的 toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断

BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);	// 推荐
public class BigDecimalTest {
    public static void main(String[] args) {
//        浮点型运算的时候直接+-*/可能会出现数据失真(精度问题)
        System.out.println(0.09+0.01);
        System.out.println(1.0-0.32);
        System.out.println(1.005*50);
        System.out.println(1.005/50);

        System.out.println("---------------");

        double a =0.1;
        double b =0.2;
        double c = a+b;
        System.out.println("a+b="+c);

        System.out.println("---------------");
//        包装浮点型数据成为大数据对象BigDecimal
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b2 = BigDecimal.valueOf(b);

//        加减乘除
        BigDecimal c1 = a1.add(b2);
        BigDecimal c2 = a1.subtract(b2);
        BigDecimal c3 = a1.multiply(b2);
        BigDecimal c4 = a1.divide(b2);

//        输出加减乘除
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);

        System.out.println("-------------");

/*      BigDecimal只是用来计算的手段,最终目的还是要恢复成double类型
        BigDecimal的doubleValue方法可以直接转成double
*/
        double rs1 = c1.doubleValue();
        double rs2 = c2.doubleValue();
        double rs3 = c3.doubleValue();
        double rs4 = c4.doubleValue();
        checkValue(rs1);
        checkValue(rs2);
        checkValue(rs3);
        checkValue(rs4);

        System.out.println("-------------");
        BigDecimal g1 = BigDecimal.valueOf(10.0);
        BigDecimal g2 = BigDecimal.valueOf(3.0);
//      RoundingMode.HALF_UP舍入模式
        BigDecimal e1 = g1.divide(g2,2, RoundingMode.HALF_UP);
        System.out.println(e1);
    }
    public static void checkValue(double i){
        System.out.println(i);
    }
}

控制台输出结果:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二战华为成功上岸,准备了小半年,要个27k应该也算不上很高吧~

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;华为的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

二,八,十,十六进制等常用进制详解

总目录 文章目录总目录一、常用进制1、进制基本信息2、各进制的表示形式二、进制转换原理1、其他进制转为十进制计算原理2、十进制转为其他进制计算原理3、二进制&#xff0c;八进制&#xff0c;十六进制之间的转换结语一、常用进制 1、进制基本信息 基数数码名称描述20 和 1…

【C++】| C/C++内存管理

前言&#xff1a; 在上期&#xff0c;我们已经对类和对象的全部知识进行了总结和梳理。在类和对象学习完之后&#xff0c;今天我将给大家呈现的是关于——C/C内存管理的基本知识。 本文目录 1. C/C内存分布 2. C语言中动态内存管理方式 &#xff08;1&#xff09;C语言跟内…

php科研项目申报审批系统

目 录 1 绪论 4 1.1 开发背景 4 1.2 开发意义 4 1.3 相关知识介绍 4 1.3.1 Apache 4 1.3.2 MySQL 5 1.3.3 PHP 6 1.3.4 Dreamweaver CS3 7 1.4 本文所做的工作及组织结构 7 2 系统分析 7 2.1 需求分析 7 2.2 可行性分析 7 2.3 系统界面…

CSDN博客专家证书发放名单(2023年3月已更新)

目录 证书发放频次 6月&#xff08;第一批&#xff09;证书发放名单&#xff08;80位&#xff09; 7月&#xff08;第二批&#xff09;证书发放名单&#xff08;50位&#xff09; 8月&#xff08;第三批&#xff09;证书发放名单&#xff08;54位&#xff09; 9月&#xf…

2个月月活突破1亿,增速碾压抖音,出道即封神的ChatGPT,现在怎么样了?ChatGPT它会干掉测试?

从互联网的普及到智能手机&#xff0c;都让广袤的世界触手而及&#xff0c;如今身在浪潮中的我们&#xff0c;已深知其力。 前阵子爆火的ChatGPT&#xff0c;不少人保持观望态度。现如今&#xff0c;国内关于ChatGPT的各大社群讨论&#xff0c;似乎沉寂了不少&#xff0c;现在…

Prometheus监控实战之Exporter详解

1 exporter是什么&#xff1f; 广义上向prometheus提供监控数据的程序都可以成为一个exporter的&#xff0c;一个exporter的实例称为target, exporter来源主要2个方面&#xff0c;一个是社区提供的&#xff0c;一种是用户自定义的。 2 常用exporter 官方和一些社区提供好多ex…

彻底关闭Windows自动更新

彻底关闭Windows自动更新 目录 彻底关闭Windows自动更新 前言 Windows10彻底关闭自动更新方法步骤&#xff1a; 一、禁用Windows Update服务 二、在组策略里关闭Win10自动更新相关服务 三、禁用任务计划里边的Win10自动更新 四、在注册表中关闭Win10自动更新 前言 我们用…

易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办?

易语言支持库配置闪退打不开怎么办&#xff1f; 易语言支持库配置闪退解决方法丨支持库配置崩溃_易语言打开支持易语言支持库配置闪退丨支持库配置崩溃_易语言打开支持库配置就闪退怎么办? 很多人都遇到过 打开易语言支持库安装菜单报错退出的问题 今天教大家解决方法 我们…

4.2--Redis总结之高可用篇(关于哨兵机制)---(温故而知新篇)--加油呀

1.为什么要有哨兵机制&#xff1f; 在 Redis 的主从架构中&#xff0c;由于主从模式是读写分离的&#xff0c;如果主节点挂了&#xff0c;那么将没有主节点来服务客户端的写操作请求&#xff0c;也没有主节点给从节点进行数据同步了 哨兵机制&#xff0c;它的作用是实现主从节…

spring集成mybaits以注解方式完成连表查询练习

题目&#xff1a; 以注解的方式完成连表查询 1、查询全部员工信息&#xff0c;要求显示部门名称 2、根据姓名模糊查询员工信息 自己看完&#xff0c;建一个简单的员工表和部门表。 1、先创建一个maven模块&#xff0c;这里直接建的普通…

SpringMVC --- 获取请求参数、域对象共享数据、视图

一、SpringMVC获取请求参数 1.1、通过ServletAPI获取 将 HttpServletRequest 作为控制器方法的形参&#xff0c;此时 HttpServletRequest 类型的参数表示封装了当前请求的请求报文的对象 RequestMapping("/param/servletAPI")public String getParamByServletAPI(H…

从零开始实现一个C++高性能服务器框架----配置模块

此项目是根据sylar框架实现&#xff0c;是从零开始重写sylar&#xff0c;也是对sylar丰富与完善 项目地址&#xff1a;https://gitee.com/lzhiqiang1999/server-framework 简介 项目介绍&#xff1a;实现了一个基于协程的服务器框架&#xff0c;支持多线程、多协程协同调度&am…

【C++】多态(下)

文章目录1.单继承中的虚函数表整体代码用程序打印虚表如何寻找到虚表地址虚表存在哪里&#xff1f;2.多继承中的虚函数表整体代码寻找虚表地址注意事项多继承重写后的func1的地为什么地址不同&#xff1f;ptr1调用函数——一次jmpptr2 调用函数——多次jmp1.单继承中的虚函数表…

window环境 python ide 安装教程分享

一、 右键-以管理员身份运行 python.exe&#xff08;以安装 3.8 的为例&#xff0c;安 装方法是一样的哈&#xff09; 二、选择你的安装方式。 特别注意&#xff1a;需要把 Add Python ** to PATH 勾选上 ②Customize installation 是自定义安装&#xff0c;安装位置你可以自己…

链表【左程云:Java】

一、单链表 1.单链表的节点结构 2.反转单向和双向链表 2.1 反转单向 package leetcode.链表;/*** author lin* creat 2022--12--12:50** https://leetcode.cn/problems/reverse-linked-list/*/ public class $_206反转链表 {public class ListNode {int val;ListNode next;L…

基于VHDL语言的汽车测速系统设计_kaic

摘 要 汽车是现代交通工具。车速是一项至关重要的指标。既影响着汽车运输的生产率,又关乎着汽车行驶有没有超速违章&#xff0c;还影响着汽车行驶时人们的人身安全。而伴随着我国国民的安全防范意识的逐步增强&#xff0c;人们也开始越来越关心因为汽车的超速而带来的极其严重…

一份sql笔试

1、 select substr(time,1,10),count(order_id),count(distinct passenger_id) from order where substr(time,1,7)2023-08 group by substr(time,1,10) order by substr(time,1,10);2、 select city_id from (select * from order where substr(time,1,7) 2022-08) t1 left j…

【新2023Q2押题JAVA】华为OD机试 - 打折买水果

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:打折买水果 题目 有 m m m…

Spring之属性填充

Spring给属性的方式一般有三种 1、通过在属性的添加Autowired注解 Component public class UserService {Autowiredprivate OrderService orderService;public void setOrderService(OrderService orderService) {this.orderService orderService;}public OrderService getO…
最新文章