【深入了解Java常用类】

news2024/11/13 9:32:06

前言:Java中的常用类主要提供了广泛的工具和功能,用于简化开发任务,处理常见的编程需求。前面我们已经介绍过String类的一些基本使用方法,接下来我们再介绍一些其它常用类的使用,本文主要介绍以包装类Integer为例、Math类Random类。后续再介绍其它常用类。

包装类 

引入

【1】什么是包装类:
以前定义变量,经常使用基本数据类型,
对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器,将基本数据类型对应进行了一个封装,产生了一个新的类,---》包装类。
int,byte.....--->基本数据类型
包装类--->引用数据类型

【2】对应关系:
基本数据类型          对应的包装类                继承关系
byte                          Byte                           ---》Number---》Object
short                         Short                         ---》Number---》Object
int                             Integer                      ---》Number---》Object
long                          Long                          ---》Number---》Object
float                          Float                          ---》Number---》Object
double                      Double                      ---》Number---》Object
char                          Character                  Object
boolean                    Boolean                    Object

【3】已经有基本数据类型了,为什么要封装为包装类?
(1)java语言 面向对象的语言,最擅长的操作各种各样的类。
(2)以前学习装数据的---》数组,int[]  String[]  double[]   Student[]
         以后学习的装数据的---》集合,有一个特点,只能装引用数据类型的数据
【4】是不是有了包装类以后就不用基本数据类型了?
不是。 
对于集合来说要用包装类(引用数据类型)
对于一般的类Student等只需要用基本数据类型,更简洁方便。

以Integer为例

【1】直接使用,无需导包:

0065329d0c0647e3b310d7b82885660c.png

【2】类的继承关系:

be97120408504cec9c2620ffedc869a0.png
【3】实现接口:

3166bed753694688bbf0e82111b2ff29.png
【4】这个类被final修饰,那么这个类不能有子类,不能被继承:

f045acdf46064df8b88c11b40fc751f2.png
【5】包装类是对基本数据类型的封装: 对int类型封装产生了Integer

6666761d73bf4f6284581c4effe0a7e7.png
【6】类的历史:

2baa087f43874068b9086677352f7bbd.png

【7】属性: 

/**
 * @Auther: themyth
 */
public class Test01 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //属性:
        System.out.println(Integer.MAX_VALUE);//2147483647
        System.out.println(Integer.MIN_VALUE);//-2147483648
        //“物极必反”原理:
        System.out.println(Integer.MAX_VALUE+1);//-2147483648
        System.out.println(Integer.MIN_VALUE-1);//2147483647
    }
}

【8】构造器(发现没有空参构造器)

(1)int类型作为构造器的参数: 

/**
 * @Auther: themyth
 */
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        Integer integer = new Integer(12);
        System.out.println(integer.toString());//12
        System.out.println(new Integer(13));//13
    }
}

1b14dad644624ea0a9824786eec6dad3.png

(2)String类型作为构造器的参数: 

16ed5ffc028443c9a1a52f4d2e6a954b.png

c6887ad03d15428ab2b64b5f96bd5fd2.png

 

【9】包装类特有的机制:自动装箱 自动拆箱: 

/**
 * @Auther: themyth
 */
public class Test03 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //自动装箱:int---》Integer
        Integer i = 12;
        System.out.println(i);
        //自动拆箱:Integer---》int
        Integer i2 = new Integer(12);
        int num = i2;
        System.out.println(num);
    }
}

(1)自动装箱  自动拆箱 是从JDK1.5以后新出的特性
(2)自动装箱  自动拆箱 :将基本数据类型和包装类进行快速的类型转换。 

验证:  bde509e58b84485585f81337bf735242.png

可以自定打断点测试是否走入valueOf方法中:

b40f9311ef4745a9bc793de2465c5190.png

【10】常用方法: 

valueOf方法的底层:

f9d78bd03c8642c6b0ce66c0b9ad291c.png

import org.omg.CORBA.INTERNAL;
/**
 * @Auther: themyth
 */
public class Test04 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //compareTo:只返回三个值:0,-1,1
        Integer i1 =  new Integer(6);
        Integer i2 =  new Integer(12);
        System.out.println(i1.compareTo(i2));//return (x < y) ? -1 : ((x == y) ? 0 : 1);
        //equals:Integer对Object中的equals方法进行了重写,比较的是底层封装的那个value的值。
        //Integer对象是通过new关键字创建对象:
        Integer i3 = new Integer(12);
        Integer i4 = new Integer(12);
        System.out.println(i3 == i4);//false 因为比较的是两个对象的地址
        boolean flag = i3.equals(i4);
        System.out.println(flag);
        //Integer对象通过自动装箱来完成:
        Integer i5 = 12;
        Integer i6 = 12;
        System.out.println(i5.equals(i6));//true
        System.out.println(i5 == i6);//true
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7.equals(i8));//true
        System.out.println(i7 == i8);//false
        Integer i9 = -129;
        Integer i10 = -129;
        System.out.println(i9.equals(i10));//true
        System.out.println(i9 == i10);//false
        /**
         如果自动装箱在-128~127之间,那么比较的就是具体的数值
         否则比较的就是对象的地址
         */
        //intValue()的作用:将Integer--->int
        Integer i11 = 130;
        int i = i11.intValue();
        System.out.println(i);
        //parseInt(String s):String--->int
        int i12 = Integer.parseInt("12");
        System.out.println(i12);
        //toString:Integer--->String
        Integer i13 = 13;
        System.out.println(i13.toString());
    }
}

Math类

【1】直接使用,无需导包:

7fbb4885e8904025824d959621ce6323.png
【2】final修饰类,这个类不能被继承:

1687cc4dbf7e457ab066f79cd3efd384.png
【3】构造器私有化,不能创建Math类的对象:

38eed7303dfc483ba5313106bb1fb368.png

不能:

a07ab86dd6b349cd81baa00b53b5b9f3.png
【4】Math内部的所有的属性,方法都被static修饰:类名.直接调用,无需创建对象:

b4ad0f5447964538a6d56e0f063c9464.png

【5】常用方法:

/**
 * @Auther: themyth
 */
public class Test01 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //常用属性:
        System.out.println(Math.PI);
        //常用方法:
        System.out.println("随机数:"+Math.random());//[0.0,1.0)
        System.out.println("绝对值:"+Math.abs(-80));
        System.out.println("向上取值:"+Math.ceil(9.1));
        System.out.println("向下取值:"+Math.floor(9.9));
        System.out.println("四舍五入:"+Math.round(3.5));
        System.out.println("取大的那个值:"+Math.max(3, 6));
        System.out.println("取小的那个值:"+Math.min(3, 6));
    }
}

【6】静态导入: 

//静态导入:
import static java.lang.Math.*;
/**
 * @Auther: themyth
 */
public class Test01 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //常用属性:
        System.out.println(PI);
        //常用方法:
        System.out.println("随机数:"+random());//[0.0,1.0)
        System.out.println("绝对值:"+abs(-80));
        System.out.println("向上取值:"+ceil(9.1));//天花板
        System.out.println("向下取值:"+floor(9.9));//地板
        System.out.println("四舍五入:"+round(3.5));
        System.out.println("取大的那个值:"+max(3, 6));
        System.out.println("取小的那个值:"+min(3, 6));
    }
    //如果跟Math中方法重复了,那么会优先走本类中的方法(就近原则):
    public static int random(){
        return 100;
    }
}

随机数案例:

在java中依靠一个类:Math类帮助我们生成,这个类中有一个方法专门用来生成随机数:

92375220c46044e2a0ec950e9e5c78bb.png

Math.random() -------> [0.0,1.0)
Math.random()*6 ----->[0.0,6.0)
(int)(Math.random()*6)  ----->[0,5]
(int)(Math.random()*6) +1 ----->[1,6]
应用到程序中: 

int num = (int)(Math.random()*6) +1;

练习:
[32,98]  -----> [0,66]+32 ----> (int)(Math.random()*67)+32
[-100,200] -----> [0,300] +(-100) ----> (int)(Math.random()*301)-100 

Random类

/**
 * @Auther: themyth
 */
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //返回带正号的double值,该值大于等于0.0且小于1.0
        System.out.println("随机数:"+Math.random());
        //学习Random类
        //(1)利用带参数的构造器创建对象:
        Random r1 = new Random(System.currentTimeMillis());
        int i = r1.nextInt();
        System.out.println(i);
        //(2)利用空参构造器创建对象:
        Random r2 = new Random();//表面是在调用无参构造器,实际底层还是调用了有参构造器
        System.out.println(r2.nextInt(10));//返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
        System.out.println(r2.nextDouble());//返回一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
    }
}

b8659ab029c54d47b428979ac147baf5.png

Math.random()和Random类的区别

Math.random()Random类都是用于生成随机数的工具,但它们的使用方式和功能略有不同。以下是它们的主要区别:

Math.random()

  • 定义: Math.random() 是一个静态方法,属于 java.lang.Math 类。
  • 返回值: 生成一个在 [0.0, 1.0) 范围内的 double 型随机数,即大于等于 0.0 且小于 1.0。
  • 种子控制: 不能显式设置种子。它使用一个全局的种子,无法手动控制或重置,因此随机序列不可重复生成。
  • 常见用途: 简单的随机数生成需求,例如生成一个随机的小数或通过乘法生成指定范围内的整数。
  • 示例代码:
double randomValue = Math.random(); // 返回 0.0 到 1.0 之间的随机数
int randomInt = (int) (Math.random() * 10); // 返回 0 到 9 之间的随机整数

Random

  • 定义: Randomjava.util 包中的一个类,需要先创建 Random 类的实例。
  • 返回值: 可以生成不同类型的随机数,如 intlongfloatdoubleboolean 等,还可以生成指定范围内的随机数。
  • 种子控制: 可以在创建 Random 对象时指定种子值,这样每次使用相同的种子值时,生成的随机数序列都是相同的,便于测试和重现。
  • 多功能性: 提供更多功能,如生成高效的随机整数、长整型数字、布尔值等。可以生成指定范围内的随机数。
  • 示例代码:
    Random random = new Random();
    int randomInt = random.nextInt(); // 返回任意整数
    int randomIntWithinRange = random.nextInt(10); // 返回 0 到 9 之间的随机整数
    double randomDouble = random.nextDouble(); // 返回 0.0 到 1.0 之间的随机 double 数
    boolean randomBoolean = random.nextBoolean(); // 返回 true 或 false 的随机值
    

总结

  • Math.random(): 简单易用,适合快速生成 [0.0, 1.0) 范围内的随机 double 值。
  • Random: 更加灵活且功能丰富,适合需要生成不同类型或特定范围随机数的场景,并支持通过种子值生成可重复的随机序列。

 

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

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

相关文章

SQL语句--DML

DML:Data Manipulation Language(数据操作语言&#xff09;&#xff0c;对表的数据记录增删改查 添加数据 INSERT修改数据UPDATA删除数据 DELETE 给指定字段添加数据&#xff1a; INSERT INTO 表名&#xff08;字段名1&#xff0c;字段名2&#xff0c;...) VALUES(值1&#xf…

设计模式-原型适配器桥接外观

3.3原型模式&#xff08;代码见vs&#xff09; 原型模式就是自我复制。原型模式的核心是一个clone()方法&#xff0c; 对于C来说&#xff0c;其实就是拷贝构造函数&#xff0c;需要实现深拷贝。拷贝构造函数根据谁来拷贝才能实现自我复制呢&#xff1f;答案就是根据自己复制自己…

语言质量评估对欧洲游戏推广的重要性

语言质量评估在欧洲推广游戏中的重要性怎么强调都不为过。欧洲是一个文化和语言多样化的市场&#xff0c;整个大陆有200多种语言。因此&#xff0c;要提供一款与不同地区玩家产生共鸣的本地化游戏&#xff0c;不仅需要准确的翻译&#xff0c;还需要细致的语言质量评估。这一过程…

mysql高级sql

一&#xff0c;查询 1.按关键字排序 1.1用 **ORDER BY** 语句来实现排序&#xff1a; - ORDER BY 语句用于对查询结果进行排序。可以根据一个或多个字段的值进行升序&#xff08;ASC&#xff09;或降序&#xff08;DESC&#xff09;排序。1.2排序可针对一个或多个字段&#…

【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况(2)

本示例是通过prometheus的node exporter收集主机的信息&#xff0c;然后在grafana的dashborad进行展示。本示例使用到的组件均是最新的&#xff0c;下文中会有具体版本说明&#xff0c;linux环境是centos。本示例分为四个部分&#xff0c;即prometheus、grafana、node exporter…

W25Q32驱动 基于HAL库的SPI

环境 芯片:STM32F103ZET6 库&#xff1a;来自HAL的STM32F1XX.H 原理图 cubeMX配置 W25Q32.h // // Created by seven on 2024/9/2. //#ifndef SPI_W25Q32_H #define SPI_W25Q32_H #include "spi.h"/*** 初始化W25Q32闪存芯片*/ void W25Q32_Init(void);/*** 停止…

P7492 [传智杯 #3 决赛] 序列

*原题链接* 一道类似势能线段树的题&#xff0c;区间按位或上k&#xff0c;不满足区间可合并的性质&#xff0c;只能暴力的单点修改。 但是考虑按位或的性质&#xff0c;一个数或上另一个数&#xff0c;只会变大或不变&#xff0c;如果我们能找到一个方法&#xff0c;能够判定…

Gitlab-ce upgrade 16.0.1 to 17.3.1【Gitlab-ce 16.0.1 升级 17.3.1】

文章目录 背景gitlab-ce 16.0.1 升级 17.3.1 失败gitlab-ce 16.0.1 升级 16.11.8 失败gitlab-ce 16.0.1 升级 16.7.9 失败gitlab-ce 16.0.1 升级 16.3.8 成功gitlab-ce 16.3.8 升级 16.11.8 失败gitlab-ce 16.3.8 升级 16.7.9 成功gitlab-ce 16.7.8 升级 16.11.8 成功gitlab-ce…

牛客(数字统计)

[NOIP2010]数字统计 题目题解(77)讨论(41)排行面经 new 时间限制&#xff1a;1秒 空间限制&#xff1a;128M 知识点NOIP复赛字符串 校招时部分企业笔试将禁止编程题跳出页面&#xff0c;为提前适应&#xff0c;练习时请使用在线自测&#xff0c;而非本地IDE。 描述 请统计…

【Day08】

目录 MySQL-多表查询-概述 MySQL-多表查询-内连接 MySQL-多表查询-外连接 MySQL-多表查询-[标量、列]子查询 MySQL-多表查询-[行、表]子查询 MySQL-多表查询-案例 MySQL-事务-介绍与操作 MySQL-事务-四大特性 MySQL-索引-介绍 MySQL-索引-结构 MySQL-索引-操作语法 …

【Qt】消息对话框 QMessageBox

消息对话框 QMessageBox QMessageBox 用于显示一个消息给用户&#xff0c;&#xff0c;并且让用户进行一个简单的选择。 消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息&#xff0c;强制⽤⼾进⾏选择操作。 例子&#xff1a;创建一个消息对话…

【Datawhale X 李宏毅苹果书 AI夏令营】《深度学习详解》Task3 打卡

文章目录 前言学习目标一、优化策略二、模型偏差三、优化问题三、过拟合增加训练集给模型一些限制 四、交叉验证五、不匹配总结 前言 本文是【Datawhale X 李宏毅苹果书 AI夏令营】的Task3学习笔记打卡。 学习目标 李宏毅老师对应视频课程&#xff1a;https://www.bilibili.…

JMeter 安装使用

JMeter 安装使用 a.安装 下载链接:Apache JMeter - Download Apache JMeter 环境变量 打开 cmd 输入 jmeter&#xff0c;即可启动 b.使用 http请求接口 300 个线程设置 1 s 的预热时间 右键 start

B端:工作台页面放什么?不知道,这里告诉你10个常见内容。

工作台是B端系统的核心页面&#xff0c;也是最常用的页面&#xff0c;该页面的上通常放哪些内容了&#xff0c;是中说纷纭&#xff0c;本文把常放内容给大家列举下。 B端工作台页面是专门为企业用户设计的工作台&#xff0c;通常需要包含一些与企业工作相关的功能和信息。以下…

传知代码-让机器感受你的情绪!(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 让计算机理解你的情绪&#xff01; 随着近年来社交媒体的快速增长&#xff0c;社交媒体上的用户生成内容&#xff08;例如视频&#xff09;的量大幅增加。不同模态的自动情感分析有利于人机交互&#xff0c;并吸…

跟我一起学FPGA (二) 语法讲解

本章讲解 1 、Verilog 概述和基础知识&#xff1b; 2 、Verilog 程序框架和高级知识点&#xff1b; 3 、Verilog 编程规范。 1.Verilog 概述和基础知识 Verilog 是一种硬件描述语言&#xff0c;以文本形式来描述数字系统硬件的结构和行为的语言&#xff0c;用它可以表示逻辑电…

Vivado2018.3版本_将bit文件转化为bin文件

Vivado2018.3版本_将bit文件转化为bin文件 1、配置转换文件 2、下载到flash中

用 count(*)哪个存储引擎会更快?

InnoDB 引擎执行 count 函数的时候&#xff0c;需要通过遍历的方式来统计记录个数&#xff0c;而 MyISAM 引擎执行 count 函数只需要 0(1 )复杂度&#xff0c;这是因为每张 MyISAM 的数据表都有一个 meta 信息有存储了row_count值&#xff0c;由表级锁保证一致性&#xff0c;所…

[数据集][目标检测]鲜花检测数据集VOC+YOLO格式25215张106类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;25215 标注数量(xml文件个数)&#xff1a;25215 标注数量(txt文件个数)&#xff1a;25215 标…

给P人一点小小震撼!铁威马UI全新设计!更友好更美观~

开学了&#xff0c;小马居然发现有学校竟然玩起了新花样&#xff0c;通过MBTI来分宿舍&#xff0c;这脑洞大开的创意简直让人直呼内行&#xff01; 你是P人还是J人&#xff1f; 在MBTI人格分类中&#xff0c;J人喜欢条理清晰的计划&#xff0c;而P人则倾向于随性所欲。 想象…