当前位置: 首页 > news >正文

(十六)一篇文章学会Java的常用API

目录

        前言:

        一、Object:toString+equals

        二、StringBuilder

        三、Math

        四、System

        五、BigDecimal


前言:

        API的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。

        应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。

一、Object:toString+equals

①object常用的方法:

  • 1、public String toString() :返回当前对象在堆内存中的地址

  • 2、public Boolean equals(object o):与另一个对象比较,看两个对象是否相同,默认比较对象的地址!!

②toString存在的意义:

  • 父类toString()方法存在的意义就是为了被子类重写,一边返回对象的内容信息,而不是地址信息!!

  • equals是为了被子类重写,以便子类来制定比较规则

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

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

        让子类重写,以便返回子类对象的内容

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

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

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

⑤代码演示:

/**objects
 *1、与object是继承关系
 * 1、equals :objects的方法equals 比较结果是一样的,但更安全
 * (比较两个对象,底层会先进行非空判断,从尔避免空指针异常,再equals比较)
 * 2、isNull :判断变量是否为null,如果为null则返回true
 */
public class object {
    public static void main(String[] args) {
        String s1 = null;
        String s2 = new String("itheima");
     System.out.println(Objects.equals(s1,s2)); //更安全,结果更正确
    }
}

⑥案例:

                验证码比较

//String 类提供equals比较:只关心内容一样
/*
public boolean equals(Object anObject)    :将此类字符与指定对象进行比较,只关心字符内容是否一致
public boolean equalsIgnoreCase(String anotherString)     :将此类字符与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致
 */
public class StringEqalsDemo {
    public static void main(String[] args) {
        String okname = "itheima";
        String okpassword = "123456";
        //输入登录密码和名称
        Scanner sc = new Scanner(System.in);
        System.out.println("用户名:");
        String name = sc.next();
        System.out.println("用户密码:");
        String password = sc.next();
​
        //判断用户输入的名称和密码与正确的用户名和密码是否相等
        if(okname.equals(name) && okpassword.equals(password)){
            System.out.println("登陆成功!");
        }else{
            System.out.println("用户名或密码错误!");
        }
​
​
        //忽略大小写比较内容的API:一般用于验证验证码这样的业务逻辑
        String Syscode = "23AdFh";
        String code1 = "23aDfH";
        System.out.println(Syscode.equals(code1));//false
        System.out.println(Syscode.equalsIgnoreCase(code1));//true
    }
}

⑦objects

1.objects与object的关系。

        objects与object还是继承关系,objects类是从JDK1.7开始才有的。

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

2.equals :

        objects的方法equals 比较结果是一样的,但更安全(比较两个对象,底层会先进行非空判断,从尔避免空指针异常,再equals比较);

3.isNull :

        判断变量是否为null,如果为null则返回true。

二、StringBuilder

1.概述:

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

2.作用:

        提高字符串的操作效率,如拼接和修改等

3.StringBuilder构造器

4.StringBuilder常用方法

5.代码演示:

/**
 * StringBuilder
 * 是一个可变的字符串类,我们可以把它看成是一个对象容器
 * 作用:提高字符串的操作效率,如拼接和修改等
 */
public class Test {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
        sb.append("c");
        System.out.println(sb);
​
        //机制:链式编程
        StringBuilder sb1 = new StringBuilder();
        sb1.append("2").append("c").append("v");
        System.out.println(sb1);
​
        //反转
        sb1.reverse().append("110");
        System.out.println(sb1);
​
        System.out.println(sb1.length());
        //StringBuilder只是拼接字符串的手段,最终结果要恢复成String类型
​
        StringBuilder sb2 = new StringBuilder();
        sb2.append("3").append("5").append("7");
        //恢复成String类型
        String rs = sb2.toString();
        check(rs);
​
        //Test
        int[] arr1 = null;
        System.out.println(toString(arr1));
​
        int[] arr2 = {10,22,44,32};
        System.out.println(toString(arr2));
​
    }
​
    public static String toString(int[] arr) {
        if (arr != null) {
            StringBuilder sb3 = new StringBuilder("[");
            for (int i = 0; i < arr.length; i++) {
                sb3.append(arr[i]).append(i == arr.length-1 ? "" : ",");
            }
            sb3.append("]");
            return sb3.toString();
        }else {
            return null;
        }
    }
    public static void  check(String date) {
        System.out.println(date);
    }
​
}

6.总结:

①为什么拼接、反转字符串建议使用StringBuilder?

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

        StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。

        定义字符串使用String;

        拼接、反转字符串使用StringBuilder。

7.案例:打印整型数组内容

需求:

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

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

public class Test {
    public static void main(String[] args) {
​
        //Test
        int[] arr1 = null;
        System.out.println(toString(arr1));
​
        int[] arr2 = {11,22,33,44,55};
        System.out.println(toString(arr2));
​
    }
/**
1.定义方法接收任意整型数组,返回数组内容格式
*/
    public static String toString(int[] arr) {
        if (arr != null) {
            //开始拼接数组
            StringBuilder sb3 = new StringBuilder("[");
            for (int i = 0; i < arr.length; i++) {
                sb3.append(arr[i]).append(i == arr.length-1 ? "" : ",");
            }
            sb3.append("]");
            return sb3.toString();
        }else {
            return null;
        }
    }
}

三、Math

1.概述:

        包含执行基本数字运算的方法,Math类没有提供公开的构造器。

2.Math的常用方法

3.代码演示:

/**Math类常用方法
 * abs 获取参数绝对值
 * ceil 向上取整
 * floor 向下取整
 * round 四舍五入
 * max  获取两个int中的较大值
 * pow(a ,b) 获取a 的b次幂
 * random  返回随机值
 */
public class Math_Test {
    public static void main(String[] args) {
        //1.取绝对值:返回正数
        System.out.println(Math.abs(-10.4));
​
        //2.向上取整
        System.out.println(Math.ceil(4.0001));
​
        //3.向下取整
        System.out.println(Math.floor(4.9999));
​
        //4.指数次方
        System.out.println(Math.pow(2,3));
​
        //5.四舍五入
        System.out.println(Math.round(4.990099));
​
        //6.扩展 获取3~9之间的随机数 ==》 (0~6)+3
        int data = (int)(Math.random()*7)+3;
        System.out.println(data);
    }
}

四、System

1.概述:

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

2.System类的常用方法

3.代码演示: ​

import java.util.Arrays;
/**
 * System 功能是通用的,都是用类名调用即可,所以System不能被实例化
 * 常用方法:
 * exit  :终止当前运行的Java虚拟机
 * currentTimeMillis  返回系统时间毫秒形式
 * arraycopy  数组拷贝
 */
public class System_Test {
    public static void main(String[] args) {
        //1、
        System.out.println("程序开始");
        System.exit(0);
        System.out.println("程序结束");
​
        //2、计算机认为时间是有起源的  起始时间:1970年1月1日
        long time =System.currentTimeMillis();
        System.out.println(time);
​
        long startTime =System.currentTimeMillis();
        //进行时间计算,性能分析
        for (int i = 0; i < 100000; i++) {
            System.out.println("输出 :" +i);
        }
        long endTime =System.currentTimeMillis();
        System.out.println((endTime-startTime)/1000+"s");
​
        //3.数组拷贝
        /**
         * arraycopy(Object src,  int  srcPos,
         * Object dest, int destPos,
         * int length);
         * 参数一:被拷贝的数组
         * 参数二:从哪个索引开始拷贝
         * 参数三:复制的目标数组
         * 参数四:粘贴位置
         * 参数五:拷贝元素的个数
         */
        int[] arr1 = {10,20,30,40,50,60,70};
        int[] arr2 = new int[6];//{0,0,0,0,0,0}==>[0,0,40,50,60,0]
        System.arraycopy(arr1,3,arr2,2,3);
        System.out.println(Arrays.toString(arr2));
    }
}

五、BigDecimal

1.作用:

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

2.使用步骤:

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

3.BigDecimal常用API

4.代码演示:

import java.math.BigDecimal;
import java.math.RoundingMode;
​
/**BigDecimal
 * 作用:用于解决浮点型运算精度是真问题
 * add 加法
 * subtract 减法
 * multiply 乘法
 * divide 除法
 * 获取对象:BigDecimal b = BigDecimal.valueOf(0.2);
 */
public class Test {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;
        double c = a+b;
        System.out.println(c);
        System.out.println("-------------");
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b1 = BigDecimal.valueOf(10.0);
        BigDecimal c1 = a1.add(b1);
        System.out.println(c1);
        System.out.println("----------------");
        /**
         * 参数一:除数
         * 参数二:保留小数点的位数
         * 参数三: 舍入模式
         */
        BigDecimal c11 = a1.divide(b1,2, RoundingMode.HALF_UP);
        System.out.println(c11);
    }
}

相关文章:

  • 既然有MySQL了,为什么还要有MongoDB?
  • 拉格朗日定理
  • C进阶:通讯录(动态版本 + 文件操作)附源码
  • shell原理及Linux权限
  • 用Python找出了删除自己微信的所有人并将他们自动化删除了
  • Cesium:经纬度与米制单位之间的转换
  • C# 实现大写字母拆分单词算法
  • 【异常】记一次前端因资源无法加载导致白屏异常问题
  • 基于卷积神经网络的疲劳驾驶检测识别系统源码,含数据集和权重文件
  • springboot多项目结构
  • 对认定为奉贤区单项冠军企业的给予一次性30万奖励
  • 一辈子干好一件事,你就了不起
  • 前端基础(十)_Dom自定义属性(带案例)
  • CSDN编程竞赛 ——— 第二十一期
  • java笔记(十二)重新理解java基本特性
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 4个实用的微服务测试策略
  • Making An Indicator With Pure CSS
  • markdown编辑器简评
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 使用common-codec进行md5加密
  • C# - 为值类型重定义相等性
  • # 飞书APP集成平台-数字化落地
  • #vue3 实现前端下载excel文件模板功能
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三)终结任务
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原創) 未来三学期想要修的课 (日記)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET企业级应用架构设计系列之技术选型
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @Query中countQuery的介绍
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android]如何调试Native memory crash issue
  • [Bada开发]初步入口函数介绍
  • [C++]unordered系列关联式容器
  • [C++]类和对象(中)
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?
  • [linux学习]apt-get参数解析
  • [MSSQL]GROUPING SETS,ROLLUP,CUBE初体验
  • [MZ test.16]P1 评测
  • [Notes]python argparse模块
  • [one_demo_7]求走到第50个台阶的走法多少种
  • [Python] scikit-learn中数据集模块介绍和使用案例
  • [python]python监听、操作键盘鼠标库pynput详细教程
  • [RISCV] 为android14添加一个新的riscv device
  • [RQNOJ 696] 【树形DP】