Java 基础进阶篇(八)—— 常用 API

news2024/10/5 21:15:10

文章目录

  • 一、Object 类
  • 二、Objects 工具类
  • 三、Math 类
  • 四、System 类
  • 五、BigDecimal 类


一、Object 类

一个类要么默认继承了 Object 类,要么间接继承了 Object 类,Object 类是 java 中的祖宗类。Object 类的方法是一切子类都可以直接使用的。

在这里插入图片描述
因此,子类可以重写 Object 类的 toString() 与 equals(obj) 的方法。
子类重写 toString() 方法,是以便返回子类对象的内容。
子类重写 equals() 方法,是以便比较对象的内容是否相同

Idea 快捷键 Alt + Enter 键生成官方提供的方法,方法如下:

public class Student {
    private String name;
    private char sex;
    private int age;
    
	// set 和 get 方法省略
	
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", 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);
    }
}

官方提供的 equals 方法:首先判断是否为同一个对象,然后再判断对象是否为空或是否为学生类,最后判断学生类中的成员变量的值。
但也存在问题,如果一个空的学生类对象调用equals方法,则会报错,因此建议用 Objects 类进行比较。


二、Objects 工具类

Objects 是一个工具类,其与 Object 是继承关系,常用 API 如下:
在这里插入图片描述

equals() 方法源码:Objects多了一层判断 a 对象是否为空,因此会比较安全

在这里插入图片描述

注: 如果 a 对象不为空,a.equals(b)方法还是会调用 Object 的 equals(obj) 方法,所以不论使用哪种比较方法,都需要重写 equals(obj) 方法,以防比较地址。

举例:假设 Student 类重写了 equals 方法。

public class Test {
    public static void main(String[] args) {
        Student s1 = null;
        Student s2 = new Student("张三", '男', 19);

        System.out.println(Objects.equals(s1, s2)); // false
        System.out.println(s1.equals(s2)); // 报错,空指针异常
    }
}

三、Math 类

Math 类包含执行基本数字运算的方法,Math类没有提供公开的构造器。
看类的成员是否都是静态的,如果是,通过类名就可以直接调用。

Math 类常用方法如下:
在这里插入图片描述
n - m 之间的随机数:(int)(Math.random() * (m-n+1)) + n
如:3 - 9 之间的随机数:(int)(Math.random()*7) + 3; // 原理:(0 - 6) + 3


四、System 类

System 的功能是通用的,都是直接用类名调用即可。由于私有构造器,所以System不能被实例化。

在这里插入图片描述

时间毫秒值起始时间:1970 年 1 月 1 日 00:00:00

currentTimeMills() 常用语进行时间的计算。


五、BigDecimal 类

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

使用: 创建对象 BigDecimal 封装浮点型数据,但最好的方式是调用 valueOf 方法。

说明: BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimalg = new BigDecimal(0.1F),实际的存储值为:0.100000001490116119384765625。

BigDecimal 类常用方法如下:
在这里插入图片描述

举例:

public class Demo {
    public static void main(String[] args) {
        // 注意事项:BigDecimal是一定要精度运算的
        BigDecimal a11 = BigDecimal.valueOf(10.0);
        BigDecimal b11 = BigDecimal.valueOf(3.0);
        // System.out.println(a11.divide(b11)); // 报错
        /**
         参数一:除数 参数二:保留小数位数  参数三:舍入模式
         */
        BigDecimal c11 = a11.divide(b11, 2, RoundingMode.HALF_UP); // 3.33 四舍五入
        BigDecimal c12 = a11.divide(b11, 2, RoundingMode.CEILING); // 3.34 向上取整

        System.out.println(c11);
        System.out.println(c12);

        // BigDecimal 是手段,最后还需转换成double
        double dd = c11.doubleValue();
        System.out.println(dd); // 3.33
    }
}

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

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

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

相关文章

7.4 电子信息系统预处理中所用放大电路

在电子信息系统中,通过传感器或其它途径所采集的信号往往很小,不能直接进行运算、滤波等处理,必须进行放大。 一、仪表放大器 集成仪表放大器,也称为精密放大器,用于弱信号放大。 1、仪表放大器的特点 在测量系统中…

Binder“一次拷贝“你真懂吗?

前言 谈到到Binder相对于其他传统进程间通信方式的优点的时候,我们总会说Binder只需要做“一次拷贝”就行了,而其他传统方式需要“两次拷贝”。这确实是Binder的优点,但再进一步思考就会碰到两个问题: 这所谓的“一次拷贝”到底…

回溯算法简单介绍

目录 1.回溯算法简单介绍 2.回溯算法框架: 我们用一道题来详细讲解回溯算法的过程 3.全排列问题 1.回溯算法简单介绍 解决一个回溯问题,其实就是一个决策树的遍历过程,我们只需要思考三个问题: 1.路径:就是已经做出…

一起Talk Android吧(第五百四十二回:无进度值ProgressBar)

文章目录 概念介绍使用资源文件实现使用默认设置修改风格使用动画资源 使用代码实现经验总结 各位看官们大家好,上一回中咱们说的例子是"ProgressBar总结",本章回中介绍的例子是" 无进度值ProgressBar"。闲话休提,言归正转&#xf…

linux相关操作

1 系统调用 通过strace直接看程序运行过程中的系统调用情况 其中每一行为一个systemcall ,调用write系统调用将内容最终输出。 无论什么编程语言都必须通过系统调用向内核发起请求。 sar查看进程分别在用户模式和内核模式下的运行时间占比情况, ALL显…

MySQL的where表达式中的各种运算符的用法和细节

MySQL的where表达式中的各种运算符的用法和细节 小故事mysql运算符分类where表达式中的运算符between and 和 and运算符的区别in运算符需要注意的点 小故事 今天在研究mysql的where表达式中的运算符的时候,遇到一个有意思的问题。 问题是:以id为主键&am…

玩机搞机----修改手机各项参数工具解析 过验证 变新机

任何的芯片原则上都可以修改当前机型的任何参数。包括但不限于高通 MTk 展讯..... 等其他芯片。众所周知,有的机型 有的版本可以直接修改,有的不行。至于具体原因可以参考我以往的帖子 安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数…

三、c++学习(指针引用详解)

上一次直播好像过去很久了,中间有加班,有5 1假期等,现在5 1放假完了,所以继续卷。 C学习,b站直播视频 3.1 指针 这个指针,考虑了很久,一直不知道在哪个地方介绍,为啥纠结&#xf…

Solr(2):Solr的安装

1 安装前的概述 (1)solr是基于lucene而lucene是java写的,所以solr需要jdk----当前安装的solr-7.5需要jdk-1.8及以上版本,下载安装jdk并设置JAVA_HOME即可。 (2)下载solr,然后解压即可&#xf…

Map对象的用法(JS)

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 MapkeyMap常用语法Map其他语法创建map的其他方式 Map Map是一个键值对形式…

FPGA设计之控制集优化详解

目录 一、前言 二、Control Set控制集 三、Control Set控制集优化 四、优劣 一、前言 在工程设计优化中,综合阶段优化中有一项常见的优化,控制集(control set)优化,在vivado的Synthesis中有对该配置项的解释&#x…

Android Jetpack组件化之ORM 数据库访问框架详解

一、对象关系映射 - ORM / Object Relational Mapping Android 系统中使用的数据库是 SQLite 关系型数据库 , 使用 Android 提供的 api 访问 SQLite 数据库非常繁琐 , 由此出现了很多 ORM 框架 ; ORM 英文全称 Object Relational Mapping , 对象关系映射 ; 对象关系映射 ORM …

“智能指针:C++中优雅的内存管理解决方案“

前言 欢迎来到💖小K💖的💞C专栏💞,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,这是C和C程序员的噩梦之一。本节将为大家带来解决办法—>智能指针 文章目录 前言1、简介2、为什么…

【移动端网页布局】flex 弹性布局 ⑤ ( 设置侧轴单行子元素排列方式 | align-items 样式说明 | 代码示例 )

文章目录 一、设置子元素是否换行 : align-items 样式说明1、 align-items 样式引入2、 align-items 样式属性值 二、代码示例1、 代码示例 - 默认样式2、 代码示例 - 设置主轴水平居中3、 代码示例 - 设置侧轴垂直居中4、 代码示例 - 设置侧轴从下到上排列5、 代码示例 - 设置…

C++之类和对象(二)

目录 前言 类的6个默认成员函数 1.构造函数 1.1 概念 1.2 特性 2. 析构函数 2.1 概念 2.2 特性 3. 拷贝构造函数 3.1 概念 3.2 特征 4.赋值运算符重载 4.1 运算符重载 4.2.赋值运算符重载 4.3 前置和后置重载 5. .const成员 6.取地址及const取地址操作符重载 前…

【二叉搜索树】

1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树 ,或者是具有以下性质的二叉树 : 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左…

Android“真正的”模块化

作者:bytebeats 模块化背后的原则概述 “如果说SOLID原则告诉我们如何将砖块排列成墙和房间, 那么组件原则则告诉我们如何将房间排列成建筑.” ~ Robert C. Martin, Clean Architecture 你应该分层打包还是分特性打包?还有其他方法吗? 如何提高项目的编译时间? 你…

将Python环境迁移到另一台设备上

本方法可以将一台电脑上的python环境迁移到另一台电脑上,可以省去一个一个包pip的麻烦。本文以pytorch的迁移为例。 一、从源环境备份安装包 在原来的电脑的Conda控制台中使用语句 pip freeze > c:\myrequirement.txt 后面跟的参数是文件的路径和文件名&#x…

Spring MVC自定义拦截器--Spring MVC异常处理

目录 自定义拦截器 什么是拦截器 ● 说明 自定义拦截器执行流程分析图 ● 自定义拦截器执行流程说明 自定义拦截器应用实例 ● 应用实例需求 创建MyInterceptor01 创建FurnHandler类 在 springDispatcherServlet-servlet.xml 配置拦截器 第一种配置方式 第二种配置方…

linux 互斥量pthread_mutex

专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 概述 原理 初始化 进程和线程使用的不同点 死锁 接口 基本API 属性设置 …