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~
时间真的过得很快,眨眼就从校园刚出来的帅气小伙变成了油腻大叔,给各位刚入道的测试朋友一点小建议,希望你们直通罗马吧! 如何选择自己合适的方向 关于选择测试管理: 第一,你一定不会是一个喜欢技术&…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...