常用类目录
System
介绍
System 类包含一些有用的类字段和方法都是静态的。它不能被实例化
标准输出流 out
- PrintStream out 此流已打开并准备接受输出数据
- 使用方式 System.out.println(data)
标准输入流 in
- InputStream in 此流已打开并准备提供输入数据
当前时间
- long currentTimeMillis() 返回以毫秒为单位的当前时间
- 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差
获取系统属性信息
- 确定当前的系统属性
- 获取的属性都是固定的 链接: 参考文档.
- getProperties()存储的都是String类型的key和value
eg:
//Properties 是Map的子类,其值是key-value形式的
Properties p = System.getProperties();
for(Map.Entry<Object,Object> entry:p.entrySet()){
System.out.println("key:"+entry.getKey()+"value = " + entry.getValue());
}
Runtime 类
Runtime类介绍
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例,没有构造方法,构造函数被私有化了,这是单利模式的一种使用
eg:Runtime.getRuntime();
Runtime类的大部分方法都是非静态的
Runtime实例能做什么事情
- 启动一个本地的程序
- 例如下面一段代码可以在Windows系统下启动本地的记事本程序。如果找不到则会抛出 IOException 异常
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec("notepad");
//也可以通过指定绝对路径来启动一个程序
//runtime.exec("e:\\program\\test.exe");
//通过指定的程序解析指定的文件
//runtime.exec("notepad e:\\test.txt");
} catch (IOException e) {
e.printStackTrace();
}
Runtime.exec(String command)
- 是一个很有用的方法,他在单独的进程中执行指定的字符串命令(command - 一条指定的系统命令),一个新的 Process 对象,用于管理子进程
- Runtime.exec(String command) 返回的 Process 对象,可以对启动的进程进行管理 能管理自己启动的进程
Runtime.maxMemory()
返回 Java 虚拟机试图使用的最大内存量
Runtime.totalMemory()
返回 Java 虚拟机中的内存总量
Runtime.totalMemory()
返回 Java 虚拟机中的空闲内存量
Runtime.gc()
运行垃圾回收器
Math 类
Math 类包含用于执行基本数学运算的静态方法,如初等指数、对数、平方根和三角函数
Math.abs(x)
返回 x 值的绝对值
Math.ceil(double a)
返回大于等于参数的最小整数的double值
eg:
System.out.println("ceil 12.0004 = " + Math.ceil(12.0004));
结果为:ceil 12.0004 = 13.0
Math.floor(double a)
返回小于等于参数的最小整数的double值
eg:
System.out.println("floor 12.0004 = " + Math.floor(12.0004));
结果为:ceil 12.0004 = 12.0
Math.round(double a)
返回返回四舍五入的整数的double值
eg:
System.out.println("round 12.4994 = " + Math.round(12.4994));
System.out.println("round 12.511 = " + Math.round(12.511));
结果:
round 12.4994 = 12
round 12.511 = 13
Math.random()
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布,(伪随机数:看起来比较杂乱无章,但是只要次数足够多,就能找到其规律的随记数)
题外话:Java中有一个转门用于产生随机数的类:java.util.Random
Date类
Date 类介绍
java.util.Date 类表示特定的瞬间,精确到毫秒
从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃
在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
- 年份 y 由整数 y - 1900 表示。
- 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
- 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
- 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
- 分钟按通常方式由 0 至 59 的整数表示。
- 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定
Date 日期和毫秒的相互转换
- 毫秒转日期方式1:new Date(timeMilli) :
- 毫秒转日期方式2:new Date().setTime(timeMilli)
- 日期转毫秒 date.getTime()
Date 日期格式化字符串
Date类中的很多方法都已经过时,而格式化我们使用的是
DateFormat类
- 获取日期格式器:DateFormat dateFormat = DateFormat.getDateInstance();
- 格式化为字符串: String dateStr = dateFormat .format(date)
- 格式化(只有年月日的)eg:
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateInstance();
String dateStr = dateFormat.format(date);
System.out.println("dateStr = " + dateStr);
结果为:dateStr = 2021-1-14
这是默认的格式
- 格式化(只有年月日时分秒的)eg:
Date date = new Date();
//这里使用了getDateTimeInstance()方法
DateFormat dateFormat = DateFormat.getDateTimeInstance();
String dateStr = dateFormat.format(date);
System.out.println("dateStr = " + dateStr);
结果为:
dateStr = 2021-1-14 12:03:54
- 获取指定格式化风格的时间格式化器eg
{
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
String dateStr = dateFormat.format(date);
System.out.println("dateStr = " + dateStr);
}
{
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
String dateStr = dateFormat.format(date);
System.out.println("dateStr = " + dateStr);
}
结果:
dateStr = 2021年1月14日 星期四
dateStr = 2021年1月14日 星期四 下午12时14分21秒 CST
Date 日期自定义格式化 SimpleDateFormat()
- 字母对应的时间元素
标识 | 名称 | 表示 | 示例 |
---|---|---|---|
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | July; Jul; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -0800 |
- 自定义格式化eg:
DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println("dateFormat = " + dateFormat.format(new Date()));
结果:
dateFormat = 2021年01月14日 14时35分22秒
字符串转为 Date
- 将默认格式的日期字符串转成 Date 对象
DateFormat dateFormat = DateFormat.getDateInstance();
try {
Date date =dateFormat.parse("2021-11-22");
System.out.println("date = " + date);
} catch (ParseException e) {
e.printStackTrace();
}
结果:
date = Mon Nov 22 00:00:00 CST 2021
- 解析自定义格式的日期字符串
DateFormat dateFormat = new SimpleDateFormat("yyyy##MM##dd");
try {
Date date =dateFormat.parse("2021##11##22");
System.out.println("date = " + date);
} catch (ParseException e) {
e.printStackTrace();
}
结果:
date = Mon Nov 22 00:00:00 CST 2021
两个日期之间间隔多少天
- 通过毫秒差的绝对值来计算
DateFormat dateFormat = DateFormat.getDateInstance();
Date d1 = dateFormat.parse("2020-12-12");
Date d2 = dateFormat.parse("2020-11-11");
long subTime = Math.abs(d1.getTime()-d2.getTime());
long day = subTime/1000/60/60/24;
System.out.println("day = " + day);
结果:
day = 31
Calendar 类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法
时间偏移计算
- 可以使用三种方法更改日历字段: set()、 add() 和 roll()。