java.util.Object
java.lang.Math
java.util.Arrays
java.util.Date
java.math.BigDecimal
java.text.DateFormat
java.util.Calendar
java.lang.System
java.lang.String
一、java.util.Objects
类Object是类层次结构的根。 每个类都有Object作为超类。 所有对象(包括数组)都实现此类的方法。
构造方法:Object()
其中包含了很多static静态⽅法⽤于在操作前检查某些条件 这些⽅法⽤于不同场景的需求:
Objects.equals():判断某个其他对象是否“等于”此对象
Objects.isNull() :如果提供的参数是null,返回 true,否则返回 fals
Objects.nonNull() :如果提供的参数是非null,返回 true,否则返回 false
Objects.requireNonNull():检查指定的对象引用是否不是null
Objects.toString(Object o, String nullDefault):如果第一个参数不是 null ,则返回在第一个参数上调用 toString的结果,否则返回第二个参数。
Objects.hashCode(Object o):返回对象o的哈希码
适⽤于:⽅法需要外部传过来⼀个对象进⾏操作,为了限制传来的对象不为空,若为空则抛异常
二、java.lang.Math
类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数。
常用方法:
Math.abs() :返回对应参数的绝对值
Math.min() :返回两数中较小的一个
Math.max() :返回两数中较大的一个
Math.round() :返回参数的四舍五入数字
Math.floor() :返回小于或等于参数的最大整数
Math.ceil() :返回大于或等于参数的最小整数
三、java.util.Arrays
常用方法
Math.abs()对数组进⾏的⼀系列操作
Arrays.toString(数组)
⽤于输出,遍历输出数组内容
Arrays.sort(数组) 排序
Arrays.binarySearch(数组, 下标) ⼆分查找
Arrays.copyof(原数组,新⻓度) ⽤于进⾏数组动态扩容
四、java.util.Date
Date类表示特定的时刻,精度为毫秒。
注意:很多API都已过时,不适合国际化
从JDK1.1开始可以⽤Calendar在⽇期和时间字段之间进⾏转换
DateFormat代替Date进⾏格式化和解析⽇期字符串
范例代码
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//创建当前时间的data
Date date = new Date();
//打印当前⽇期(默认打印toString⽅法,Data类已经将toString⽅法进⾏了重写)
//打印格式 "EEE MMM dd HH:mm:ss zzz yyyy";
System.out.println(date.toString());
//根据当前时刻往前倒退⼀个⼩时
long time=date.getTime()-(1*60*60*1000);
Date date2 = new Date(time);
System.out.println(date);//当前时间
System.out.println(date2);//当前倒推⼀个⼩时
}
}
五、java.math.BigDecimal
java在float和double类型的运算时可能会有误差,为了实现==精准运算==,需要使用BigDecimal类。在控制台输出0.1+0.2会发现float和double的运算误差
构造方法
public BigDecimal(String val){ }
常⽤⽅法
这些运算⽅法不会影响参与运算的数据本身,运算的结果会被封装为⼀个新的BigDecimal对象,这个 对象会通过return返回出去)
public BigDecimal add(BigDecimal augend) //加法运算
public BigDecimal subtract(BigDecimal augend) //减法运算
public BigDecimal multiply(BigDecimal augend) //乘法运算
public BigDecimal divide(BigDecimal augend) //除法运算
六、java.text.DateFormat
⽤于格式化和解析⽇期字符串
范例代码
package test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
// DateFrormat
/**
* y:年
* M:月
* d:日
* H:时
* m:分
* s:秒
* 2020-07-26 12:08 47
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
String text = format.format(new Date());//将Date对象转换为格式化的字符串
System.out.println(text);
//parse:将字符串转换为日期对
Date mydate = format.parse("1998-02-14 06:00 00");
System.out.println("date");
//例如要计算一个人货了多少天,可以根据其生日创建一个时间戳,用当前时间减去它,将毫秒再做转换
System.out.println((new Date().getTime()-mydate.getTime())/1000/60/60/24);
}
}
七、java.util.Calendar
解决了Date不能国际化的问题
范例代码
package test;
import java.time.DayOfWeek;
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) {
//Calendar
//set get add比较常用
Calendar c1 = Calendar.getInstance();//不能直接new
c1.set(Calendar.YEAR,2021);//改变的是当前对象,不影响系统的日历
int year = c1.get(Calendar.YEAR);//获取日历里的年
System.out.println(year);
//注意日历月份是从0-11;国外从星期日开始算第一天,星期一是2而不是1
int dayOfWeek = c1.get(Calendar.DAY_OF_WEEK);
System.out.println(dayOfWeek);
//⼀些计算⽇历⽅法,通过操作常量来修改
c1.add(Calendar.YEAR,10);
System.out.println(c1.get(Calendar.YEAR));
///getTime 获取⽇历时间表示的Date对象,和Date的getTime()不同
Date d = c1.getTime();
//getActualMaxmun 快速获取各个字段最⼤的值
int m =c1.getActualMaximum(Calendar.MONTH);
System.out.println(m);
int day = c1.get(Calendar.DAY_OF_YEAR);//当前年最大天数
System.out.println(day);
}
}
八、java.lang.System
java.lang.System 提供很多类字段和类⽅法,它==⽆法实例化==。 包括标准输⼊,标准输出和错误输出流;
访问外部定义的属性和环境变量;
加载⽂件和库的⽅法;
以及⽤于快速复制阵列的⼀部分的实⽤⽅法。
since 1.0
public static void ==exit==(int status)
终⽌当前运⾏的Java虚拟机
此⽅法调⽤类```Runtime```的 exit ⽅法。
此⽅法永远不会正常返回。
呼叫 System.exit(n)实际上等同于呼叫: Runtime.getRuntime().exit
- 参数
status 退出状态。该参数⽤作状态代码;按照惯例,⾮零状态代码表示异常终⽌。
public static long currentTimeMillis()
以毫秒为单位返回当前时间。
请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更⼤。 例如,许多操作系统以⼏⼗毫秒为单位测量时间。
结果
当前时间与UTC时间1970年1⽉1⽇午夜之间的差异,以毫秒为单位。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置开始复制到⽬标数组的指定位置。复制的组件数等于length参数。
- 参数
- src源数组。
- srcPos源数组中的起始位置。
- dest⽬标数组。
- destPos⽬标数据中的起始位置。
- length要复制的数组元素的数量。
九、java.lang.String
public final class String
- String类表示字符串。 Java程序中的所有字符串⽂字(例如 "abc" )都实现为此类的实例。
- 字符串是不变的; 它们的==值在创建后⽆法更改==。
- 字符串缓冲区⽀持可变字符串。 因为String对象是不可变的,所以可以共享它们。
字符串常量池
方法区(Method Area) ,又称永久代(Permanent Gener ation),又称非堆区(Non-Heap space)
方法区,又称永久代(Permanent Generation) ,常称为PermGen,位于非堆空间,又称非堆区( Non-Heap space)。
方法区是被所有线程共享。
- 所有字段和方法字节码,以及-些特殊方法如构造函数,接口代码也在此定义。
- 简单说,所有定义的方法的信息都保存在该区域,此区属于共享区间。
- 这些区域存储的是:静态变量+ 常量+类信息(构造方法/接口定义) +运行时常量池。
但是,实例变量存在堆内存中,和方法区无关。
以上,只是逻辑上的定义。在HotSpot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也是就说,方式区
在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法区的实现。