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

news2024/11/30 6:40:10

目录

        前言:

        一、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);
    }
}

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

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

相关文章

The Sandbox Game Maker 全新版本即将推出,一览可用于娱乐、社交和音乐会的新功能!

0.8 版本的新功能将包括多人游戏功能、光影和视觉效果升级&#xff0c;以及音频和视频流&#xff0c;满足社区的更新需求。 简要概括 0.8 版本包括了 The Sandbox 社区的主要升级需求&#xff0c;具体有&#xff1a; 全新多人游戏功能 全新光影和视觉效果 视频和音频流 支援…

OKhttp-基本工作流程责任链模式原理

OKhttp工作的大致流程 整体流程 &#xff08;1&#xff09;、当我们通过OkhttpClient创立一个okHttpClient 、Request 、Call&#xff0c;并发起同步或者异步请求时&#xff1b; &#xff08;2&#xff09;、okhttp会通过Dispatcher对我们所有的Call&#xff08;RealCall实现…

微服务的版本号要怎么设计?

今天我们来聊一下微服务项目中的版本号要怎么设计。 小伙伴们平时看到的项目版本号&#xff0c;基本上都是分为了三部分 X.Y.Z&#xff0c;版本升级的时候版本号都会变&#xff0c;那么版本号怎么变&#xff0c;这可不是拍脑门决定的&#xff0c;今天我们就一起来探讨一下这个…

Live800:客户服务的三重境界,你做到了吗?

毋庸置疑&#xff0c;赢得客户的青睐是维系自身经济长青的基础。想要客户满意&#xff0c;得到最佳的客户评价&#xff0c;企业就需要为客户提供超出他们期望的服务。有人将客户服务分为三重境界:第一重境界&#xff0c;把分内的服务做精&#xff1b;第二重境界&#xff0c;把额…

libtorch c++复现cycle gan网络

目录 1. 原论文论文&#xff1a;https://arxiv.org/abs/1703.10593 2. 代码 2.1 下采样 2.2 残差块 2.3 上采样模块 2.4 生成器代码 3. 判别器 3.1 判别器组件 3. 2 判别器 4. 训练 4.1 输入数据 4.2 生成器loss函数结构图 4.3 判别器loss结构图 1. 原论文 论文&…

【java查漏补缺】网络编程

网络编程实际上就是通过套接字进行连接后进行通信&#xff0c;本质还是程序进行IO操作。 所谓套接字&#xff0c;实际上就是IP地址加上端口号的组合&#xff0c;通过套接字&#xff0c;可以连接到网络中某一台计算机的某一个进程。 下面就是客户端和服务器的简单例子&#xf…

vue3-ElmentPlus封装通用表格-含单元格操作-多选-分页器

Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 **&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;恭喜你&#xff0c;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求收藏&#xff0c;求评论&#xff0c;求一个大大…

【测试】测试分类

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录测试分类&#xff08;大框架&#xff09;一、按照测试对象划分一&#xff09;可靠性测试二&#xff09;容错性测试三&#xff09;安装卸载测试&#xff08;万能公式中可以加上&#xff09;四&#xff09;内存泄漏测试…

合芯科技携手新享科技联合打造国产化项目管理系统解决方案

北京新享科技有限公司 北京新享科技有限公司&#xff0c;是上海合见工业软件集团控股的子公司。上海合见工业软件集团有限公司是自主创新的高性能工业软件及解决方案提供商&#xff0c;以EDA&#xff08;电子设计自动化&#xff0c;Electronic Design Automation&#xff09;领…

【实际开发03】- dto + vo - 先处理 dto , 后处理 vo ( 通常少一注解 )

目录 0. 建议 : 多用组合 , 少用继承 1. EqualsAndHashCode(callSuper true) - 解决允许调用父类 2. 序列化 ID : private static final long serialVersionUID 1L; 1. serialVersionUID 作用 : 序列化时为了保持版本的兼容性 3. 数据概览 ( 统计 ) : XxxxProfileVO 1.…

CAD常用命令:对象选择过滤器(FILTER)

CAD软件中为了方便绘图&#xff0c;有效地提升绘图效率&#xff0c;提供了很多CAD命令快捷键&#xff0c;而CAD对象选择过滤器作为CAD常见命令之一&#xff0c;在日常的CAD绘图过程中经常能用到&#xff0c;你知道CAD对象选择过滤器怎么用吗&#xff1f;本文小编就来给大家分享…

Qt解析Json数据

目录前言1.下载 jsoncpp 源码2.编译3.JSON数据读写示例4.jsoncpp核心类详解前言 本文主要介绍了使用Qt框架编程时如何解析JSON数据的一种方法。JSON是英文JavaScript Object Notation 的缩写&#xff0c;它是一种轻量级的数据交换格式&#xff0c;具有方便阅读和编写的优点&am…

Jenkins 项目的 gpg: signing failed: Bad passphrase 错误

因为我们项目需要使用 Jenkins 对文件进行签名。但是我们遇到了gpg: signing failed: Bad passphrase错误。原因和解决通常这个问题的原因是 Key 已经配置成功并且已经被命令行找到了。主要原因是你的秘钥密码配置的问题。这个配置有 2 个地方&#xff0c;第一个地方是项目的 P…

2022年度牛奶乳品行业数据:十大热门品牌销量排行榜

当前&#xff0c;随着经济的发展及人民生活水平的提高&#xff0c;牛奶乳品已经日趋成为人们在日常饮食中不可缺少的食物之一&#xff0c;市面上的产品种类也越来越多。并且&#xff0c;随着人们消费习惯的转变&#xff0c;牛奶乳品的消费场景也日益多元化。未来&#xff0c;预…

jdk1.8之函数式接口

l[TOC] 函数式接口概述 jdk1.8 引入了一个核心概念&#xff1a;函数式接口&#xff08;Functional Interface&#xff09;。如果一个接口有且只有一个未实现的方法&#xff0c;那这个接口就称为函数式接口。并且引入了一个新的注解&#xff1a;FunctionalInterface &#xff0…

一、Gradle入门

文章目录一、Gradle入门1.1 Gradle 简介1.2 常见的项目构建工具1.3 Gradle 安装1.3.1 Gradle 安装说明1.3.2 安装 JDK1.3.3 下载并解压到指定目录1.3.4 配置环境变量1.3.5 检测是否安装成功1.4 Gradle 项目目录结构1.5 Gradle 创建第一个项目1.5.1 Gradle 中的常用命令1.5.2 修…

【MySQL进阶教程】视图/存储过程/触发器

前言 本文为 【MySQL进阶教程】视图/存储过程/触发器 相关知识&#xff0c;下边将对视图&#xff0c;存储过程&#xff0c;存储函数&#xff0c;触发器等进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &#x1f449;Java全栈学习路线可参考&#xff1a;【…

MySQL高级【存储函数触发器】

1&#xff1a;存储函数1.1&#xff1a;介绍存储函数是有返回值的存储过程&#xff0c;存储函数的参数只能是IN类型的。具体语法如下&#xff1a; CREATE FUNCTION 存储函数名称 ([ 参数列表 ]) RETURNS type [characteristic ...] BEGIN -- SQL语句 RETURN ...; END ;character…

如何管理存量用户?

存量市场的老客户对于企业来说如同一座金矿&#xff0c;好好运营老客户&#xff0c;可以给企业带来源源不断的新客户&#xff0c;企业所获得的收益远比拉新所获收益要高的多。 前言 存量客户是指某个时间段里原先已有的客户&#xff0c;与新增客户相对应&#xff0c;通俗点说&…

Python开发Web扫描器实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Python开发Web扫描器实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…