核心类库
java.lang.Math
Math.E
public static final double E
double值比任何其他值更接近 e ,即自然对数的基数。
Math.PI
public static final double PI
double值比任何其他 pi更接近,圆的圆周与其直径的比率。
// abs求绝对值
System.out.println(Math.abs(-11.1));// 11.1
System.out.println(Math.abs(11.2));// 11.2
// ceil返回大于或等于参数且等于数学整数的最小值
System.out.println(Math.ceil(11.5));// 12.0
System.out.println(Math.ceil(-11.5));// -11.0
// floor返回小于或等于参数且等于数学整数的最大值
System.out.println(Math.floor(11.5));// 11.0
System.out.println(Math.floor(-11.5));// -12.0
// sqrt计算平方根
System.out.println(Math.sqrt(9));// 3.0
// cbrt计算立方根
System.out.println(Math.cbrt(8));// 2.0
// pow(a,b)计算a的b次方
System.out.println(Math.pow(2,3));// 8.0
// max(a,b)计算最大值
System.out.println(Math.max(1.1,1.2));// 1.2
// min(a,b)计算最小值
System.out.println(Math.min(2.2,2.1));// 2.1
// random返回带有正号的 double值,大于或等于0.0且小于1.0
System.out.println(Math.random());
// rint 四舍五入 返回与 double值最接近的 double值,该值等于数学整数
// 注意:当第一位小数是.5时返回的是偶数
System.out.println(Math.rint(1.5));// 2.0
System.out.println(Math.rint(2.5));// 2.0
System.out.println(Math.rint(2.7));// 3.0
System.out.println(Math.rint(-1.5));// -2.0
System.out.println(Math.rint(-2.5));// -2.0
System.out.println(Math.rint(-2.7));// -3.0
// round 四舍五入,float时返回int值,double时返回long值
// 0.01~0.49舍 0.51~0.99入
System.out.println(Math.round(1.49));// 1
System.out.println(Math.round(1.75));// 2
System.out.println(Math.round(2.50));// 3
System.out.println(Math.round(-1.50));// -1
System.out.println(Math.round(-1.75));// -2
System.out.println(Math.round(-2.55));// -3
java.lang.System
概述
System类包含几个有用的类字段和方法。 它无法实例化。
System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法
字段
变量和类型 | 字段 | 描述 |
---|---|---|
static PrintStream | err | “标准”错误输出流。 |
static InputStream | in | “标准”输入流。 |
static PrintStream | out | “标准”输出流。 |
System.arraycopy(a,b,c,d,e);
其中,a是被复制的数组,b是复制的起始位置,c是被复制的数组,d是复制到这个数组的起始位置,e是复制到这个数组的结束位置
System.currentTimeMillis();
返回毫秒数,这个就比较简单了,和Date类中的getTime方法一样。
getProperty获取系统属性
常用的有:
os.arch | 操作系统的架构 |
---|---|
os.version | 操作系统的版本 |
file.separator | 文件分隔符(在 UNIX 系统中是“/”) |
path.separator | 路径分隔符(在 UNIX 系统中是“:”) |
line.separator | 行分隔符(在 UNIX 系统中是“/n”) |
user.name | 用户的账户名称 |
user.home | 用户的主目录 |
user.dir | 用户的当前工作目录 |
gc
java垃圾回收器,这个方法不需要我们去调用,jvm发现系统有未使用的对象,会自己进行执行。通常会有两种情况下会调用gc:a、当jvm内存不足时会调用,b、当cpu空闲的时候调用。详细请看一下jvm的具体的垃圾回收机制
exit
退出虚拟机。exit(int)方法是终止当前正在运行的java虚拟机。参数是状态码。根据惯例,非0的状态码表示异常终止,0表是终止。而且,该方法永远不会正常返回
这是唯一一个能够退出程序并不执行finally的情况。说明:退出虚拟机会直接终止整个程序,这时的程序已经不是从代码的层面来终止程序,所以finally不会被执行
java.Math.BigDecimal
java.math.BigDecimal 类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作。
//BigDecimal
BigDecimal bd1 = new BigDecimal("3.5");
BigDecimal bd2 = new BigDecimal("4.55");
BigDecimal bd3 = new BigDecimal("-4.55");
// 指定精度
MathContext mc = new MathContext(2);
// 绝对值
//abs
System.out.println(bd3.abs());// 4.55
//abs(MathContext mc)
System.out.println(bd3.abs(mc));// 4.6
// 负值
System.out.println(bd1.negate());// -3.5
// 加法
System.out.println(bd1.add(bd2));// 8.05
// 减法
System.out.println(bd1.subtract(bd2));// -1.05
// 乘法
System.out.println(bd1.multiply(bd2));// 15.925
// 除法
System.out.println(bd1.divide(bd2,mc));// 0.77
// 四舍五入,根据MathContext设置精度
System.out.println(bd2.round(mc));// 4.6
java.util.Arrays
copyOf
使用指定数据类型复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度
源码:
例子:
copyOfRange
将指定数组的指定范围复制到新数组中
源码:
例子:
binarySerch
找到定位数组的下标
1、如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始(就和数组的排序计算一样,都是从零开始)
2、如果没有找到关键字,返回 (-(插入点) - 1),所谓插入点值就是第一个比关键字大的元素在数组中的位置索引
源码:
例子:
equals 与 deepEquals
deepEquals用于判定两个指定数组彼此是否深层相等,此方法适用于任意深度的嵌套数组
equals用于判定两个数组是否相等,如果两个数组以相同顺序包含相同元素,则返回true,否则返回false
如果要比较多为数组,则需要使用deepEquals方法
例子:
fill
将指定值分配给指定的数组的每个元素
源码:
例子:
sort 与 parallelSort
Arrays.sort()
方法对对象或原始数据类型的数组进行排序。此方法中使用的排序算法是 Dual-Pivot Quicksort。 换句话说,它是快速排序算法的自定义实现,以实现更好的性能
优点 | 缺点 |
---|---|
快速处理较小的数据集 | 大型数据集的性能下降 |
没有利用系统的多个核心 |
Arrays.parallelSort()
此方法对对象或原始数据类型的数组进行排序。与 sort() 使用单个线程对数据进行顺序排序不同,它使用并行排序-合并排序算法。它将数组分成子数组,这些子数组本身先进行排序然后合并
优点 | 缺点 |
---|---|
为大型数据集提供更好的性能 | 对于大小较小的数组,处理速度较慢 |
利用系统的多个核心 |
不同之处
当我们要排序的数据集很大时,parallelSort() 可能是更好的选择。但是,在数组较小的情况下,最好使用 sort(),因为它可以提供更好的性能
toString
返回指定数组内容的字符串表示形式
java.util.Date
after
测试此日期是否在指定日期之后
before
测试此日期是否在指定日期之前
clone
返回此对象的副本
compareTo
比较两个日期的订购
如果参数Date等于此Date,则为0; 如果此Date在Date参数之前,则小于0的值; 如果此Date位于Date参数之后,则值大于0。
equals
比较两个相等的日期
getTime
返回自此 Date
对象表示的1970年1月1日00:00:00 GMT以来的毫秒数
setTime
将此 Date
对象设置为表示格林尼治标准时间1970年1月1日00:00:00之后的 time
毫秒的时间点
java.text.DateFormat和SimpleDateFormat类
作用
把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
DateFormat是一个抽象类,一般使用SimpleDateFormat类。
字母 | 日期或时间元素 | 示例 |
---|---|---|
G | Era 标志符 | AD |
y | 年 | 1996; 96 |
M | 年中的月份 | July; Jul; 07 |
w | 年中的周数 | 27 |
W | 月份中的周数 | 2 |
D | 年中的天数 | 189 |
d | 月份中的天数 | 10 |
F | 月份中的星期 | 2 |
E | 星期中的天数 | Tuesday; Tue |
a | Am/pm 标记 | PM |
H | 一天中的小时数(0-23) | 0 |
k | 一天中的小时数(1-24) | 24 |
K | am/pm 中的小时数(0-11) | 0 |
h | am/pm 中的小时数(1-12) | 12 |
m | 小时中分钟数 | 30 |
s | 分钟中的秒数 | 55 |
S | 毫秒数 | 978 |
z | 时区 | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | -0800 |
日期和时间模式 | 结果 |
---|---|
“yyyy.MM.dd G ‘at’ HH:mm:ss z” | 2001.07.04 AD at 12:08:56 PDT |
“EEE,MMM d, ‘’ yy” | Wed, Jul 4, '01 |
“h:mm a” | 12:08 PM |
“hh ‘o’ ‘clock’ a, zzzz” | 12 o’clock PM, Pacific Daylight Time |
“K:mm a, z” | 0:08 PM, PDT |
“yyyyy.MMMMM.ss GGG hh:mm aaa” | 02001.July.04 AD 12:08 PM |
“EEE, d MMM yyyy HH:mm:ss Z” | Wed, 4 Jul 2001 12:08:56 -0700 |
“yyMMddHHmmssZ” | 010704120856-0700 |
“yyyy-MM-dd ‘T’ HH:mm:ss.SSSZ” | 2001-07-04 T 12:08:56.235-0700 |
format方法
//创建Date对象表示当前时间
Date date = new Date();
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY年MM月dd日 HH:mm:ss");
//调用format()方法,格式化时间,转换为指定格式的字符串
String today=simpleDateFormat.format(date);
System.out.println(today);
// 2021年01月19日 17:29:55
parse方法
String today="2018年01月29日 17:16:36";
//这里的格式需要与上面的字符串格式相同
SimpleDateFormat ff=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date=ff.parse(today);
System.out.println(date);
// Mon Jan 29 17:16:36 CST 2018
注意:
- 调用SimpleDateFormat对象的parse()方法时可能会出现转换异常,即ParseException,因此需要异常处理
- 使用Date类要导入java.util包,使用SimpleDateFormat要导入java.text包
java.util.Calendar
1. 概述
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR(例如Calendar.MONTH都是Calendar类中定义的静态常量)等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期是日期提供了一些方法,瞬间可用毫秒值表示)
2、创建Calendar对象
该类通过调用getInstance()静态方法获取一个Calendar对象,此对象已由当前日期时间初始化,即默认代表当前时间
Calendar c = Calendar.getInstance();
3、成员方法
public int get(int field)
返回给定日历字段的值。日历类中的每个日历字段都是静态成员变量,且都是int类型
public void add(int field int amount)
根据给定的日历字段和对应的时间,来对当前日历进行操作
public final void set(int year,int month,int date)
设置当前日历的年月日
public final Date getTime()
用来获取Date对象,完成Calendar和Date的转换
public long getTimeInMillis()
返回此Calendar的时间值,以毫秒为单位(和Date类的getTime方法类似)
java.util.Objects
equals
比较对象a和对象b,使用的是第一个参数的equals()方法,
如果两个参数中有一个是null,则返回false,
如果两个参数都是null,则返回true。
deepEquals
比较对象a和对象b是否深度相等,使用的其实是Arrays.deepEquals()方法
只有a和b对应位置的元素都相等时,才返回true,a和b都是null也返回true,否则返回false。
hashCode
得到一个对象的hash code,如果参数为null,返回0
hash
得到一列对象的hash code,
使用的其实是Arrays.hashCode(Object[]),Object[]数组元素就是hash方法传入的参数值
toString(Object o)
调用对象的toString()方法,如果参数是null,返回字符串"null"
toString(Object o,String nullDefault)
调用对象的toString()方法,如果参数是null,返回第二个参数表示的字符串
compare
比较对象a和对象b,如果a和b是相等的,返回0,如果不相等,调用c的compare方法。
注意:如果a或者b是null的情况下,调用c的compare方法时有可能报空指针异常,看c的compare方法怎么写了。
requireNonNull(T obj)
判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常。
requireNonNull(T obj,String message)
判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常,并把第二个参数message写在异常信息中
isNull
判空方法,如果参数为空则返回true
nonNull
判断非空方法,如果参数不为空则返回true。
java.util.String
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串
创建字符串
创建字符串最简单的方式如下:
String str = "Runoob";
在代码中遇到字符串常量时,这里的值是 “Runoob”",编译器会使用该值创建一个 String 对象
和其它对象一样,可以使用关键字和构造方法来创建 String 对象
用构造函数创建字符串:
String str2=new string("Runoob");
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类
charAt
返回指定索引处的char
值。 指数范围为0
至length() - 1
。 序列的第一个char
值位于索引0
,下一个位于索引1
,依此类推,就像数组索引一样。
compareTo 与 compareToIgnoreCase
compareTo
按字典顺序比较两个字符串,如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0;如果此字符串按字典顺序大于字符串参数,则值大于0
compareToIgnoreCase
按字典顺序比较两个字符串,忽略大小写差异
一个负整数,零或正整数,因为指定的String大于,等于或小于此String,忽略了大小写
concat
将指定的字符串连接到此字符串的末尾
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSlMrXwR-1624081999456)(C:\Users\10640\AppData\Roaming\Typora\typora-user-images\image-20210119202630844.png)]
contains
当且仅当此字符串包含指定的char值序列时,才返回true
indexOf
从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引,如果没有这种情况返回-1
isBlank
如果字符串为空或仅包含white space代码点,则返回 true
,否则 false
isEmpty
返回 true
,当且仅当, length()
是 0
length()
返回此字符串的长度
repeat(int count)
返回一个字符串,其值为字符串的串联重复count次
replace(char oldChar, char newChar)
返回从替换所有出现的导致一个字符串 oldChar
在此字符串 newChar
。
startsWith
测试此字符串是否以指定的前缀开头
strip
返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space
stripLeading()
返回一个字符串,其值为此字符串,并删除了所有前导 white space
stripLeading()
返回一个字符串,其值为此字符串,并删除了所有尾随 white space
substring
返回一个字符串,该字符串是此字符串的子字符串。 子字符串以指定索引处的字符开头,并延伸到此字符串的末尾
valueOf
返回声明数据类型参数的字符串表示形式。
Java StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
public class RunoobTest{
public static void main(String args[]){
StringBuilder sb = new StringBuilder(10);
sb.append("Runoob..");
System.out.println(sb);
sb.append("!");
System.out.println(sb);
sb.insert(8, "Java");
System.out.println(sb);
sb.delete(5,8);
System.out.println(sb);
}
}
以上实例编译运行结果如下:
Runoob..
Runoob..!
Runoob..Java!
RunooJava!
Buffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
```java
public class RunoobTest{
public static void main(String args[]){
StringBuilder sb = new StringBuilder(10);
sb.append("Runoob..");
System.out.println(sb);
sb.append("!");
System.out.println(sb);
sb.insert(8, "Java");
System.out.println(sb);
sb.delete(5,8);
System.out.println(sb);
}
}
[外链图片转存中…(img-LQSWHbhE-1624081999465)]
以上实例编译运行结果如下:
Runoob..
Runoob..!
Runoob..Java!
RunooJava!