目录
System类
一些跨平台问题就是这个类解决的。都是静态成员
字段
- in:标准输入流,默认对应设备键盘。
- out:标准输出流,默认对应设备显示器。
这两个流是随虚拟机程序启动而启动的,如果出现运行期间close()掉了,后面程序运行期间就再也拿不到了。
常见方法
- exit(int status):退出Java虚拟机,0代表退出,非0代表异常退出。用于退出程序。
- gc():手动【请求】启动垃圾回收器。
- long currentTimeMillis():获得当前系统时间毫秒值。
- load(String filename):加载C代码文件。
- loadLibrary(String libname):加载C代码库。
- Properties getProperties():获得系统属性集。Properties键值对存储。
- String getProperty(String key):指定获取某个系统属性。
获取系统属性集,并不完全显示完的键,还有更多属性。
获取全部系统属性集
-
package com.bin.demo;
-
-
import java.util.Properties;
-
import java.util.Set;
-
-
public
class Main {
-
-
public static void main(String[] args) {
-
-
Properties info = System.getProperties();
-
Set<String> setKey = info.stringPropertyNames();
-
-
for (String key : setKey) {
-
System.out.println(
"【" + key +
"】" +
" ————> " + info.getProperty(key));
-
}
-
-
}
-
-
}
输出:
-
【java.runtime.
name】 ————> Java(TM) SE Runtime Environment
-
【sun.boot.
library.path】 ————> C:\
Program Files\Java\jre1.
8.0_181\bin
-
【java.vm.version】 ————>
25.181-b13
-
【java.vm.vendor】 ————> Oracle Corporation
-
【java.vendor.url】 ————> http:
//java.oracle.com/
-
【path.separator】 ————> ;
-
【java.vm.
name】 ————> Java HotSpot(TM)
64-Bit Server VM
-
【
file.encoding.pkg】 ————> sun.io
-
【user.script】 ————>
-
【user.country】 ————> CN
-
【sun.java.launcher】 ————> SUN_STANDARD
-
【sun.os.patch.level】 ————>
-
【java.vm.specification.
name】 ————> Java
Virtual Machine Specification
-
【user.dir】 ————> D:\Android\AndroidItem\kzt
-
【java.runtime.version】 ————>
1.8.
0_181-b13
-
【java.awt.graphicsenv】 ————> sun.awt.Win32GraphicsEnvironment
-
【java.endorsed.dirs】 ————> C:\
Program Files\Java\jre1.
8.0_181\lib\endorsed
-
【os.arch】 ————> amd64
-
【java.io.tmpdir】 ————> C:\Users\BindeBug\AppData\
Local\Temp\
-
【line.separator】 ————>
-
-
【java.vm.specification.vendor】 ————> Oracle Corporation
-
【user.variant】 ————>
-
【os.
name】 ————> Windows
8.1
-
【sun.jnu.encoding】 ————> GBK
-
【java.
library.path】 ————> C:\
Program Files\Java\jre1.
8.0_181\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/
Program Files/Java/jre1.
8.0_181/bin/server;C:/
Program Files/Java/jre1.
8.0_181/bin;C:/
Program Files/Java/jre1.
8.0_181/lib/amd64;C:\
Program Files (x86)\Common Files\Oracle\Java\javapath;C:\
Program Files\Java\jdk1.
8.0_181\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.
0\;C:\
Program Files\Intel\WiFi\bin\;C:\
Program Files\Common Files\Intel\WirelessCommon\;D:\Android\android-sdk-windows\tools;D:\Android\android-sdk-windows\
platform-tools;D:\Git\cmd;C:\
Program Files\Intel\WiFi\bin\;C:\
Program Files\Common Files\Intel\WirelessCommon\;C:\Users\BindeBug\Desktop;;.
-
【java.specification.
name】 ————> Java
Platform API Specification
-
【java.
class.version】 ————>
52.0
-
【sun.management.compiler】 ————> HotSpot
64-Bit Tiered Compilers
-
【os.version】 ————>
6.3
-
【user.home】 ————> C:\Users\BindeBug
-
【user.timezone】 ————>
-
【java.awt.printerjob】 ————> sun.awt.windows.WPrinterJob
-
【
file.encoding】 ————> GBK
-
【java.specification.version】 ————>
1.8
-
【user.
name】 ————> BindeBug
-
【java.
class.path】 ————> D:\Android\AndroidItem\kzt\bin
-
【java.vm.specification.version】 ————>
1.8
-
【sun.arch.data.model】 ————>
64
-
【java.home】 ————> C:\
Program Files\Java\jre1.
8.0_181
-
【sun.java.command】 ————> com.bin.demo.Main
-
【java.specification.vendor】 ————> Oracle Corporation
-
【user.language】 ————> zh
-
【awt.toolkit】 ————> sun.awt.windows.WToolkit
-
【java.vm.info】 ————> mixed mode
-
【java.version】 ————>
1.8.
0_181
-
【java.ext.dirs】 ————> C:\
Program Files\Java\jre1.
8.0_181\lib\ext;C:\Windows\Sun\Java\lib\ext
-
【sun.boot.
class.path】 ————> C:\
Program Files\Java\jre1.
8.0_181\lib\resources.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\rt.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\sunrsasign.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\jsse.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\jce.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\charsets.jar;C:\
Program Files\Java\jre1.
8.0_181\lib\jfr.jar;C:\
Program Files\Java\jre1.
8.0_181\classes
-
【java.vendor】 ————> Oracle Corporation
-
【
file.separator】 ————> \
-
【java.vendor.url.bug】 ————> http:
//bugreport.sun.com/bugreport/
-
【sun.cpu.endian】 ————> little
-
【sun.io.unicode.encoding】 ————> UnicodeLittle
-
【sun.desktop】 ————> windows
-
【sun.cpu.isalist】 ————> amd64
【file.encoding】 ————> GBK:当前系统默认的字符编码表。
cruuentTimeMillis()获得当前时间的毫秒值
-
package com.bin.demo;
-
-
public
class
Main {
-
-
public static void main(String[] args) throws InterruptedException {
-
-
long startTime = System.currentTimeMillis();
-
-
Thread.sleep(
3000);
-
-
long useTime = System.currentTimeMillis() - startTime;
-
-
System.
out.println(useTime);
//记录住启动程序的时间,程序结束时间 - 程序启动时间 = 程序运行时间
-
-
//得到秒、分、时、天、等等值
-
System.
out.println(useTime /
1000);
-
System.
out.println(useTime / (
60 *
1000));
-
System.
out.println(useTime / (
60 *
1000 *
60));
-
System.
out.println(useTime / (
60 *
1000 *
60 *
24));
-
-
}
-
-
}
Runtime类
此类是单列模式,常见可用于程序运行时可见的程序虚拟机分配的内存信息,有时候可用于程序的测试。
同样有 exit(int status)、gc()、load(String filename)、loadLibrary(String libname)方法。System类就是回调了这些方法。
常见方法
- long maxMemory():返回 Java 虚拟机试图使用的最大内存量。(重要)
- long totalMemory():返回 Java 虚拟机中的内存总量。(重要)
- long freeMemory():返回 Java 虚拟机中的空闲内存量。调用
gc
方法可能导致freeMemory
返回值的增加。(重要) - Runtime getRuntime():返回Runtime。
- Process exec(String command):等等传递参数的方法,此方法能执行本地系统的命令,比如用DOS命令的方式启动程序。返回一个Process对象,可获取打开程序的输入流与输出流进行IO操作。
-
package com.bin.demo;
-
-
import java.io.IOException;
-
-
public
class Main {
-
-
public
static void main(
String[] args)
throws
InterruptedException,
IOException {
-
-
Runtime run =
Runtime.getRuntime();
-
-
long m =
1024 *
1024;
-
-
System.out.
println(
"试图使用最大内存 = " + run.maxMemory() / m +
"m");
-
System.out.
println(
"内存总量 = " + run.totalMemory() / m +
"m");
-
System.out.
println(
"空闲内存 = " + run.freeMemory() / m +
"m");
-
System.out.
println(
"已使用内存 = " + (run.totalMemory() - run.freeMemory()) / m +
"m");
-
-
run.exec(
"notepad.exe");
//打开记事本
-
run.exec(
"notepad.exe F:\\test.txt");
//用记事本打开指定文件。同样的一个.mp3、.mp4文件,本地程序有都可以直接打开。
-
}
-
-
}
Math类
Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
成员都是静态的,这里演示仅演示几个方法
-
package com.bin.demo;
-
-
public
class
Main {
-
-
public static void main(String[] args) {
-
-
System.
out.println(
"1,2 最小值 = " + Math.min(
1,
2));
//返回最小的数
-
System.
out.println(
"1,2 最大值 = " + Math.max(
1,
2));
//返回最大的数
-
System.
out.println(
"9.56 四舍五入 = " + Math.round(
9.56F));
//四舍五入方法
-
System.
out.println(
"15.78 最小大数 = " + Math.ceil(
15.78));
//返回比此数大的最小大数
-
System.
out.println(
"15.78 最大小数 = " + Math.floor(
15.78));
//返回比此数小的最大小数
-
-
//System.out.println(10 * 10 * 10); //等同
-
System.
out.println(
"10的3次方 = " + Math.pow(
10,
3));
//10的3次方
-
System.
out.println(
"10的3次方 = " + pow(
10,
3));
//自己实现的pow()方法
-
}
-
-
public static int pow(int a, int b) {
-
int result = a;
-
for (
int i =
1; i < b; i++) {
-
result *= a;
-
}
-
return result;
-
}
-
-
}
输出:
-
1,2 最小值 = 1
-
1,2 最大值 = 2
-
9.56 四舍五入 = 10
-
15.78 最小大数 = 16.0
-
15.78 最大小数 = 15.0
-
10的3次方 = 1000.0
-
10的3次方 = 1000
Random类
此类的实例用于生成伪随机数流。
在做随机数时,我们一般都会限制在一个指定范围内的随机数。
常用指定范围值的 nextInt(int n)方法
-
package com.bin.demo;
-
-
import java.util.Random;
-
-
public
class Main {
-
-
public static void main(String[] args) {
-
-
Random r =
new Random();
-
-
for (
int i =
0; i <
10; i++) {
-
/*
-
* 在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
-
* 适合在数组中随机下标。
-
*/
-
System.out.println(r.nextInt(
10) +
1);
//得到随机数,加1后:0(不包括),指定值(包括)
-
}
-
-
}
-
-
}
输出:
-
8
-
4
-
7
-
3
-
7
-
9
-
6
-
5
-
10
-
5
Date类
它允许把日期解释为年、月、日、小时、分钟和秒值。
这个对象的百分之90的方法已过时,此对象仅代表某一个当前时间日期(new Date())。
注意:
每 new Date() 一个对象仅仅代表从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始到(new Date())现在的毫秒数。在new Date()后,这个毫秒数是固定的。Date对象只能得到一个时间戳。可通过Date.setTime(long)设置新的时间戳。
已被DateFormat和Calendar取代大部分功能
DateFormat格式化日期Style
DateFormat是一个单列的工厂类,看名字就知道是格式化Date日期的。
常用风格字段
- FULL : 日期风格:2020年3月17日 星期二,时间风格:下午07时33分17秒 CST
- LONG : 日期风格:2020年3月17日,时间风格:下午07时33分17秒
- MEDIUM : 日期风格:2020-3-17,时间风格:19:33:17 //默认风格
- SHORT : 日期风格:20-3-17,时间风格:下午7:33
日期实例:getDateInstance(字段)仅日期的风格
日期加时间实例:getDateTimeInstance(字段A,字段B):A(日期)B(时间)的风格
常用方法
- getDateInstance( [int] ) :可格式化Date日期只有:年 / 月 / 日 / 星期
- getDateTimeInstance([int], [int]):可格式化日期:年 / 月 / 日 / 星期 / 时 / 分 / 秒
- String format(Date date):将Date日期对象进行格式化,并以字符串返回。(重要)
- Date parse(String date):将字符串格式的日期,解析成Date对象。(重要)
-
package com.bin.demo;
-
-
import java.text.DateFormat;
-
import java.util.Date;
-
-
public
class Main {
-
-
public
static void main(
String[] args) {
-
-
Date date = new
Date(1584444797446L);
//1584444797446L
-
System.out.
println(date);
//Tue Mar 17 19:33:17 CST 2020
-
System.out.
println(date);
//Tue Mar 17 19:33:17 CST 2020
-
//测试确认一个Date对象只能得到一个时间戳
-
-
/*
-
* DateFormat格式化日期
-
* 加入风格
-
*/
-
-
// DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
-
DateFormat df =
DateFormat.getDateTimeInstance(
DateFormat.
MEDIUM,
DateFormat.
MEDIUM);
-
/*
-
* FULL : 日期风格:2020年3月17日 星期二,时间风格:下午07时33分17秒 CST
-
* LONG : 日期风格:2020年3月17日,时间风格:下午07时33分17秒
-
* MEDIUM : 日期风格:2020-3-17,时间风格:19:33:17 //默认风格
-
* SHORT : 日期风格:20-3-17,时间风格:下午7:33
-
*/
-
System.out.
println(df.format(date));
//格式化日期date对象
-
}
-
-
}
SimpleDateFormat自定义格式化日期
SimpleDateFormat是DateFormat的子类。我们需要自定义格式化日期Date,就要参考一下文档:
-
package com.bin.demo;
-
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
-
public
class Main {
-
-
public static void main(String[] args) {
-
-
Date date =
new Date();
//1584444797446L
-
-
SimpleDateFormat sdf =
new SimpleDateFormat(
"yyyy年MM/dd日 k:m:s:S");
-
-
/*
-
* 可使用此方法更改风格
-
*/
-
sdf.applyPattern(
"yyyy年MM/dd日 k:m:s:S");
//将给定模式字符串应用于此日期格式。
-
-
System.out.println(sdf.format(date));
//2020年03/17日 19:33:17:446
-
-
}
-
-
}
DateFormat将日期格式字符串解析成日期Date对象
注意:解析2020/3/17这个【/】,是要设置style风格的(new SimpleDateFormat(yyyy / MM / dd)),默认风格是【-】
-
package com.bin.demo;
-
-
import java.text.DateFormat;
-
import java.text.ParseException;
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
-
public
class Main {
-
-
public
static void main(
String[] args)
throws
ParseException {
-
-
String str_date =
"2020-03-17";
-
// String str_date = "2020/03/17"; //报错,需要指定对应风格解析
-
// DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); //(/)
-
-
DateFormat df =
DateFormat.getDateInstance();
//默认风格MEDIUM(-)
-
-
Date date = df.parse(str_date);
-
-
System.out.
println(date.getTime() +
" ————> " + df.format(date));
//1584374400000 ————> 2020-3-17
-
-
}
-
-
}
时间戳和Date日期的转换
-
package com.bin.demo;
-
-
import java.text.DateFormat;
-
import java.text.ParseException;
-
import java.util.Date;
-
-
public
class Main {
-
-
public static void main(String[] args) throws ParseException {
-
-
/*
-
* 时间戳转Date。使用Date(long)构造就行
-
*/
-
//获得当前时间戳
-
long time = System.currentTimeMillis();
-
//利用时间戳构造成Date对象
-
Date date =
new Date(time);
-
System.out.println(DateFormat.getDateInstance().format(date));
//2020-3-17
-
-
/*
-
* Date转时间戳————>Date.getTime()获取时间戳
-
*/
-
long time2 = date.getTime();
-
System.out.println(time2);
//1584449851077
-
-
}
-
-
}
Calendar日历类
单利模式,同样获取实例时只有一个时间戳,没调用一次getInstance()方法就会更新一次时间戳。当然可以通过set()方法更新时间戳。
常用字段
- YEAR:年
- MONTH:月,月份的计算是从0开始的(0月==1月)。
- DAY_OF_MONTH:日
- WEEK_OF_MONTH:星期
- HOUR_OF_DAY:24小时制
- HOUR:12小时制
- MINUTE:分
- SECOND:秒
- MILLISECOND:微秒
常用方法
- set(。。。) :设置日历,年月日、时分秒
- get(字段):获得指定的字段的(年、月、日、时、分、秒、毫秒)
- add(字段,value):时间的便宜。注意:此方法便宜是会响应到(大的时间模块)比如(今天是2020.9.1,偏移日数-1,等于2020.8.31)
超级注意:此类月份的计算是从0开始的(0月==1月)。
示列一些方法:
-
package com.bin.demo;
-
-
import java.util.Calendar;
-
-
public
class Main {
-
-
public
static void main(
String[] args)
throws
InterruptedException {
-
-
Calendar
c =
Calendar.getInstance();
//获得日历对象
-
long time =
c.getTimeInMillis();
//时间戳
-
System.out.
println(time);
//1584535248070
-
/*
-
* 手动设置日历对象:日期(set(...)方法)
-
*/
-
c.
set(
Calendar.
YEAR,
2016);
-
c.
set(
2016,
12,
1);
-
c.
set(
2016,
12,
1,
18,
50,
50);
-
System.out.
println(showTime(
c));
//2017年1月1日星期1 18:50:50:635
-
-
/*
-
* 时间偏移(add(字段,便宜值)方法)注意:此方法便宜是会响应到(大的时间模块)比如(今天是2020.9.1,偏移日数-1,等于2020.8.31)
-
*
-
* 闰年可用这种方式计算:获取随便某一年的2月有多少天
-
*/
-
c.
set(
2020,
2,
1);
-
c.add(
Calendar.
DAY_OF_MONTH, -
1);
//正数代表加,负数就减
-
System.out.
println(showTime(
c));
//2020年2月29日星期5 18:50:50:686
-
-
}
-
-
public
static
String showTime(
Calendar
c) {
-
StringBuilder sb = new
StringBuilder();
-
/*
-
* 日历常用字段
-
*/
-
sb.append(
c.
get(
Calendar.
YEAR) +
"年");
-
sb.append(
c.
get(
Calendar.
MONTH) +
1 +
"月");
//月份的计算是从0开始的(0月==1月),所以返回月份后+1
-
sb.append(
c.
get(
Calendar.
DAY_OF_MONTH) +
"日");
-
sb.append(
"星期" +
c.
get(
Calendar.
WEEK_OF_MONTH) +
" ");
-
-
sb.append(
c.
get(
Calendar.
HOUR_OF_DAY) +
":");
// HOUR(12小时),HOUR_OF_DAY(24小时)
-
sb.append(
c.
get(
Calendar.
MINUTE) +
":");
-
sb.append(
c.
get(
Calendar.
SECOND) +
":");
-
sb.append(
c.
get(
Calendar.
MILLISECOND));
//微秒
-
-
return sb.
toString();
-
}
-
-
}
转载:https://blog.csdn.net/qq_42470947/article/details/104904152