Java 常用 API
文章目录
- 一、Math
- 二、System
- 三、Object
- 1. toString() 方法
- 2. equals() 方法
- 四、Arrays
- 1. 冒泡排序
- 2. Arrays 常用方法
- 五、基本类型包装类
- 1. Integer
- 2. int 和 String 相互转换
- 3. 字符串中数据排序
- 4. 自动装箱和拆箱
- 六、日期类
- 1. Date
- 2. SimpleDateFormat
- 3. Calendar
- 4. 二月天
一、Math
Math 包含执行基本数字运算的方法。
Math 没有构造方法,那么如何使用类中的成员呢?
通过查看帮助文档,看类的成员是否都是静态的,如果是,那我们可以通过类名直接调用。
如果 API 在 java.lang 包下,则使用的时候是不需要导包的!
Math 类的常用方法:

//Test.javapackage com.an;public class Test {public static void main(String[] args) {System.out.println(Math.max(12, 23)); //23System.out.println(Math.ceil(12.55)); //13.0System.out.println(Math.round(12.37)); //12System.out.println(Math.abs(-1)); //1}
}
//随机生成0到100之间的整数,包括0,不包括100
(int)(Math.random() * 100)
二、System
System 包含几个有用的类字段和方法,它不能被实例化,因为它的成员都是被静态修饰的,那我们可以通过类名来访问。
System 类的常用方法:

//终止Java虚拟机
System.exit(0);
//当前时间与1970年之间所隔的年数
System.currentTimeMillis() * 1.0 / 1000 / 60 / 60 / 24 / 365
//计算for循环耗时多久
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗时:" + (end - start) + "毫秒!");
三、Object
类 Object 是类层次结构的根。每个类都有 Object 作为超类,所有对象(包括数组)都直接或间接地继承自该类。
回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
因为它们的顶级父类只有无参构造方法。
想要查看方法的源码,选中方法,按下 Ctrl + B!
1. toString() 方法
toString() 方法返回对象的字符串表示形式。
Student s = new Student();
s.setName("刘德华");
s.setAge(30);
System.out.println(s);
如上代码,程序的输出结果其实是 s 的地址,为什么不是 s 对象的内容呢?
这是因为,直接输出 s 其实默认调用的是 Object 中的 toString() 方法,而 toString 方法中定义的就是对象的地址。
如何输出对象内容呢?
在 Student 类中重写 toString() 方法即可。这里重写方法不需要你去自己写,我们还是按下 Alt + Insert,找到 toString(),将成员变量全部选中,最后回车键就可以了。
2. equals() 方法
equals() 方法用于比较两个对象是否相等。
//比较s1和s2的内容是否相同Student s1 = new Student();
s1.setName("刘德华");
s1.setAge(30);Student s2 = new Student();
s2.setName("刘德华");
s2.setAge(30);System.out.println(s1.equals(s2));
这里千万不要犯 s1 == s2 这样的低级错误,学生对象是引用类型,直接比较的话,比较的其实它们的是地址,不是内容,答案显然是 false。
但是当我们写成 s1.equals(s2) 的时候,结果仍然是 false,WHY?
因为 equals() 方法默认比较的原则依然是比较地址。同样,需要在 Student 类中重写 equals() 方法,Alt + Insert,找到 equals() and hashCode(),它会帮我们重写两个方法,一会把后面那个删掉即可,点进去 Template 下,我们选 IntelliJ Default 模板,一直 Next,Finish。
四、Arrays
1. 冒泡排序
定义:冒泡排序是一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据都按要求完成排序。
① 如果有 n 个数据进行排序,总共需要比较 n - 1 次;
② 每一次比较完毕,下一次的比较就会少一个数据参与。
//Test.javapackage com.an;public class Test {public static void main(String[] args) {int[] arr = {12, 3, 69, 42, 7, 25};//数组从小到大冒泡排序for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}String result = arrayToString(arr);System.out.println(result);}//把数组中的元素按照指定的规则组成一个字符串public static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");String s = sb.toString();return s;}
}
2. Arrays 常用方法
如上是冒泡排序的代码,看起来非常繁琐。现在我们学习 Arrays 的两个常用方法,不需要自己写代码,直接调用方法实现冒泡排序功能。

//Test.javapackage com.an;import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr = {12, 3, 69, 42, 7, 25};Arrays.sort(arr);String s = Arrays.toString(arr);System.out.println(s);}
}
工具类的设计思想:
① 构造方法用 private 修饰,为防止外界创建对象;
② 成员用 public static 修饰,让外界可以使用类名直接访问成员方法。
五、基本类型包装类
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
常用的操作之一:用于基本数据类型与字符串之间的转换。

//判断一个数据是否在int范围内
int number;
if (number >= Integer.MIN_VALUE && number <= Integer.MAX_VALUE) {System.out.println("true");
}
1. Integer
Integer 包装一个对象中的原始类型 int 的值。

//返回表示指定的int值的Integer实例
Integer i = Integer.valueOf(100);
System.out.println(i);
2. int 和 String 相互转换
① int 类型转换为 String 类型
int number = 100;
//方式一
String s1 = "" + number;
//方式二
String s2 = String.valueOf(number);
② String 类型转换为 int 类型
String s = "100";
//方式一
Integer i = Integer.valueOf(s);
int x = i.intValue();
//方式二
int y = Integer.parseInt(s);
3. 字符串中数据排序
需求:有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果:“27 38 46 50 91”。
思路:
① 给数据排序,我们首先想到的就是数组的排序方法,Arrays.sort(arr);
② 现在题目给出的是一个字符串,并非数组,而我们需要将字符串中用空格隔开的这些数据都一一对应地复制到一个数组中,进行排序;
③ 字符串中的每个数据都要搬运到一个新的数组中,一定是要用到 for 循环进行遍历,数组遍历的前提得有终止条件,也就是需要知道数组长度,而这个数组的长度正是我们字符串中数据的个数;
④ 问题就转移到了如何获取到数据的个数,不要忘了我们的字符串也是有数组的,题目给出的是字符串,接下来我们需要将字符串的数据放到字符串数组中;
⑤ 创建一个字符串数组,这里给我们提供了一个方法 split(),字符分隔符,它可以将字符串中的每一个数据通过空格分隔开,如 String[] str = s.split(" ");
⑥ 创建一个 int 数组,用于后续排序,int 数组的长度即字符串数组的长度,通过 str.length 获取;
⑦ 现在数组的长度知道了,我们就可以利用 for 循环为数组添加数据,自然是将字符串数组的每个数据依次赋值给 int 数组,赋值过程我们可以发现这两个数组中的数据根本不是同一种数据类型,所以不可能直接赋值,这里通过上面讲到的 String 类型转换为 int 类型方法对其进行转换,然后循环赋值;
⑧ 得到数组之后,我们对该数组进行排序,Arrays.sort(arr);
⑨ 排序之后还没结束,因为我们最终要的结果并非一个数组,它还是要输出一个字符串,且以空格分隔,采用拼接字符串的方式实现,之前我们学到过一个 StringBuilder,利用它的 append() 方法将字符串拼接成我们想要的格式,对于数组中的数据,依然采用 for 循环进行遍历,将遍历到的结果添加至字符串尾,输出结果。
//Test.javapackage com.an;import java.util.Arrays;public class Test {public static void main(String[] args) {String s = "91 27 46 38 50";String[] str = s.split(" ");int[] arr = new int[str.length];for (int i = 0; i < arr.length; i++) {int k = Integer.parseInt(str[i]);arr[i] = k;}Arrays.sort(arr);StringBuilder sb = new StringBuilder();for (int i = 0; i < arr.length; i++) {if (i == args.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(" ");}}String result = sb.toString();System.out.println(result);}
}

4. 自动装箱和拆箱
装箱:把基本数据类型转换为对应的包装类类型。
拆箱:把包装类类型转换为对应的基本数据类型。
//普通装箱
Integer i = Integer.valueOf(100);
//自动装箱
Integer ii = 100;
//普通拆箱
ii = ii.intValue() + 200;
//自动拆箱
ii += 200;
//一般我们都会先判断一下它是否为空,再进行下一步操作
Integer k = null;
if (k != null) {k += 300;
}
六、日期类
1. Date
Date 代表了一个特定的时间,精确到毫秒。

好多包下都有 Date 类,我们用 util 包下的 Date。
//得到当前日期信息
Date d = new Date();
System.out.println(d);

Date 类常用方法:

//Test.javapackage com.an;import java.util.Date;public class Test {public static void main(String[] args) {Date d = new Date();long time = 10000*60*60;System.out.println(d.getTime());d.setTime(time);System.out.println(d);}
}
直接输出 d 得到的是当前时间,设置了 time 之后得到的 d 是 1970 年又过了 time 毫秒后的时间!
2. SimpleDateFormat
SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期,它允许格式化,解析和规范化。
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从 ‘A’ 到 ‘Z’ 以及从 ‘a’ 到 ‘z’ 引号的字母被解释为表示日期或时间字符串的组件的模式字母。
常用的模式字母及对应关系如下:

SimpleDateFormat 的构造方法如下:

① 格式化(从 Date 到 String)
format(Date date):将日期格式化成日期 / 时间字符串。
② 解析(从 String 到 Date)
parse(String source):从给定字符串的开始解析文本以生成日期。
//格式化package com.zxe;import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) {Date d = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String s = sdf.format(d);System.out.println(s);}
}

//解析package com.zxe;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {String s = "2033-2-14 20:10:13";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d = sdf.parse(s);System.out.println(d);}
}

3. Calendar
Calendar 为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
Calendar 提供了一个类方法 getInstance 用于获取 Calendar 对象,其日历字段已使用当前日期和时间初始化.
//获取对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
Calendar 的常用方法:

//年份减3,三年前的今天
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, -3);
int year = c.get(Calendar.YEAR);
System.out.println(year);//设置年月日
Calendar cc = Calendar.getInstance();
cc.set(2024, 2, 28);
int year = cc.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
4. 二月天
需求:获取任意一年的二月有多少天。
思路:
① 键盘录入任意年份;
② 设置日历对象的年月日,年来自于键盘录入,这里的月份是从 0 开始的,所以设置为 2,日设置为 1 日;
③ 3 月 1 日往前推一天,就是 2 月的最后一天;
④ 获取到这一天,然后输出即可。
//Test.javapackage com.zxe;import java.util.Calendar;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int year = sc.nextInt();Calendar c = Calendar.getInstance();c.set(year, 2, 1);c.add(Calendar.DATE, -1);int date = c.get(Calendar.DATE);System.out.println(year + "年的2月份有" + date + "天!");}
}

相关文章:
Java 常用 API
文章目录一、Math二、System三、Object1. toString() 方法2. equals() 方法四、Arrays1. 冒泡排序2. Arrays 常用方法五、基本类型包装类1. Integer2. int 和 String 相互转换3. 字符串中数据排序4. 自动装箱和拆箱六、日期类1. Date2. SimpleDateFormat3. Calendar4. 二月天一…...
记一次分布式环境下TOKEN实现用户登录
背景: 以前的单体项目,使用的是session来保存用户登录状态,控制用户的登录过期时间等信息,但是这个session是只保存在该服务器的这个系统内存中。系统只有一个服务就没关系,但是如果是分布式的服务,每个…...
用cpolar发布本地的论坛网站 1
网页论坛向来是个很神奇的地方,曾经的天涯论坛和各种BBS,大家聚在在一起讨论某个问题,也能通过论坛发布想法,各种思维碰撞在一起,发生很多有趣的故事,也产生了很多流传一时的流行语录。当然,如果…...
CSS的4种引入方式
CSS的4种引入方式 目录CSS的4种引入方式一、内嵌式:CSS写在style标签中二、外联式:CSS写在一个单独的.css文件中三、行内式:CSS写在标签的style属性中四、导入外部样式五、css引用的优先级六、link和import的区别一、内嵌式:CSS写…...
Shell高级——Linux中的文件描述符(本质是数组的下标)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 前言 Linux中一切接文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上…...
Nvidia jetson nano硬件架构
资料来源 官方文档中心 https://developer.nvidia.com/embedded/downloads -> 选jetson -> Jetson Nano Product Design Guide //产品设计指导(入口) //-> 1.1 References 列出了相关的文档 -> Jetson Nano Developer Kit Carrier Board Specification //板子标注…...
ffmpeg多路同时推流
一、ffmpeg常见使用方法1.1利用FFMPEG命令进行文件分割1.2转换格式1.3推流配置方法一:ngnix(不推荐,推流不好使)方法二:srs(强烈推荐)1.4查看nginx启动是否成功二、ffmpeg推流——>ngnix单路…...
一次性搞定 `SHOW SLAVE STATUS` 的解读
一次性搞定 SHOW SLAVE STATUS 的解读 解析日志文件的位置 诚然, GTID(全局事务标识符)已经在 MySQL 5.6中得到支持, 此外,还可以通过 Tungsten replicator 软件来实现(2009年以后一直有谷歌在维护,不是吗?)。 但有一部分人还在使用MySQL 5.5的标准副本方式, 那么这些二进制日…...
【代码随想录训练营】【Day25】第七章|回溯算法 |216.组合总和III|17.电话号码的字母组合
组合总和III 题目详细:LeetCode.216 做过上一题组合后,再来写这道题就显得得心应手了,通过理解回溯算法的模版,也总结出了算法中的一些特点: 回溯算法与递归算法类似,同样需要参数、结束条件和主体逻辑回…...
docker使用
https://blog.csdn.net/u012563853/article/details/125295985http://www.ppmy.cn/news/11249.html启动 docker服务并设置开机自动启动dockersudo systemctl start docker sudo systemctl enable dockerdocker 常见启动失败问题:https://blog.csdn.net/zhulianseu/article/deta…...
手把手docker registry配置登录名/密码
我们的Docker私有仓库Registry服务只有加了认证机制之后我们的Registry服务才会更加的安全可靠。赶快跟随以下步骤来增加认证机制吧。 创建docker registry工作目录 mkdir -p /data/docker.registry 创建将保存凭据的文件夹 mkdir -p /data/docker.registry/etc/registry/auth…...
一步打通多渠道服务场景 中电金信源启移动开发平台MADP功能“上新”
日前,中电金信源启移动开发平台MADP功能迭代升级,“上新”源启小程序开发平台。定位“为金融业定制”的移动PaaS平台,源启小程序开发平台为银行、互联网金融、保险、证券客户提供一站式小程序的开发、运营、营销全生命周期管理技术支撑&#…...
Kubernetes06:Controller (Deployment无状态应用)
Kubernetes06:Controller 1、什么是controller 管理和运行容器的对象,是一个物理概念 在集群上管理和运行容器的对象 2、Pod和Controller之间的关系 Pod是通过controller来实现应用的运维 比如伸缩、滚动升级等等操作Pod和Controller之间通过 label 标签建立关系…...
低代码开发平台选型必看指南
低代码开发是近年来逐渐兴起的一种新型软件开发方式。它通过封装常见的软件开发流程和代码,使得非专业的开发者也能够轻松创建复杂的应用程序。这种开发方式已经受到了许多企业的青睐,成为提高生产效率、降低开发成本的一种有效途径。 低代码开发的核心…...
OVN:ovn20.03.1/ovs2.13.0编译rpm过程
操作系统openeuler22.0,x86架构分别下载ovn和ovs的源码https://github.com/openvswitch/ovs/tree/v2.13.0https://github.com/ovn-org/ovn/tree/v20.03.1安装必要工具:yum install -y unzip tar make autoconf automake libtool rpm-build gcc libuuid-d…...
Shell管道
一、管道是什么 英文是pipe。 把一个命令的标准输出作为下一个命令的标准输入,以这种方式连接的两个或者多个命令就形成了管道 使用竖线|连接多个命令,称为管道符。 语法格式如下: command1 | command2 [ | commandN... ] command1的标准…...
Zynq UltraScale系列使用MIPI CSI-2 RX Subsystem 解码MIPI视频PD输出 提供2套工程源码和技术支持
目录1、前言2、设计思路和架构3、vivado工程详解4、上板调试验证5、福利:工程代码的获取1、前言 本设计采用OV5640摄像头MIPI模式作为输入,分辨率为1280x72060Hz,MIPI解码方案采用Xilinx官方提供的MIPI CSI-2 RX Subsystem IP解码MIPI视频&a…...
C++:详解C++11 线程休眠函数
休眠函数简介1: 让线程休眠一段时间1.1:std::chrono 的时钟 clock简介 C11 之前并未提供专门的休眠函数,C语言的 sleep、usleep函数其实是系统提供的函数,不同的系统函数的功能还要些差异。 在Windows系统中,sleep的参数是毫秒 …...
TryHackMe-The Great Escape(Docker)
The Great Escape 我们的开发人员创建了一个很棒的新网站。你能冲出沙盒吗? 端口扫描 循例 nmap Web信息收集 robots.txt: /exif-util是文件上传点,但是绕过之后貌似没啥用 在robots.txt当中披露了可能存在.bak.txt,现在我们已知的文件就是…...
这么强才给我28k,我头都不回,转身拿下40k~
时间真的过得很快,眨眼就从校园刚出来的帅气小伙变成了油腻大叔,给各位刚入道的测试朋友一点小建议,希望你们直通罗马吧! 如何选择自己合适的方向 关于选择测试管理: 第一,你一定不会是一个喜欢技术&…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
