飞道的博客

【Java】System系统信息、Runtime运行时信息、Math计算、Random随机、Date日期

507人阅读  评论(0)

目录

 

System类

字段

常见方法

获取全部系统属性集

cruuentTimeMillis()获得当前时间的毫秒值

Runtime类

常见方法

Math类

Random类

Date类

注意:

DateFormat格式化日期Style

常用风格字段

常用方法

SimpleDateFormat自定义格式化日期

DateFormat将日期格式字符串解析成日期Date对象

时间戳和Date日期的转换

Calendar日历类

常用字段

常用方法


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):指定获取某个系统属性。

 

获取系统属性集,并不完全显示完的键,还有更多属性。

获取全部系统属性集


  
  1. package com.bin.demo;
  2. import java.util.Properties;
  3. import java.util.Set;
  4. public class Main {
  5. public static void main(String[] args) {
  6. Properties info = System.getProperties();
  7. Set<String> setKey = info.stringPropertyNames();
  8. for (String key : setKey) {
  9. System.out.println( "【" + key + "】" + " ————> " + info.getProperty(key));
  10. }
  11. }
  12. }

输出:


  
  1. 【java.runtime. name】 ————> Java(TM) SE Runtime Environment
  2. 【sun.boot. library.path】 ————> C:\ Program Files\Java\jre1. 8.0_181\bin
  3. 【java.vm.version】 ————> 25.181-b13
  4. 【java.vm.vendor】 ————> Oracle Corporation
  5. 【java.vendor.url】 ————> http: //java.oracle.com/
  6. 【path.separator】 ————> ;
  7. 【java.vm. name】 ————> Java HotSpot(TM) 64-Bit Server VM
  8. file.encoding.pkg】 ————> sun.io
  9. 【user.script】 ————>
  10. 【user.country】 ————> CN
  11. 【sun.java.launcher】 ————> SUN_STANDARD
  12. 【sun.os.patch.level】 ————>
  13. 【java.vm.specification. name】 ————> Java Virtual Machine Specification
  14. 【user.dir】 ————> D:\Android\AndroidItem\kzt
  15. 【java.runtime.version】 ————> 1.8. 0_181-b13
  16. 【java.awt.graphicsenv】 ————> sun.awt.Win32GraphicsEnvironment
  17. 【java.endorsed.dirs】 ————> C:\ Program Files\Java\jre1. 8.0_181\lib\endorsed
  18. 【os.arch】 ————> amd64
  19. 【java.io.tmpdir】 ————> C:\Users\BindeBug\AppData\ Local\Temp\
  20. 【line.separator】 ————>
  21. 【java.vm.specification.vendor】 ————> Oracle Corporation
  22. 【user.variant】 ————>
  23. 【os. name】 ————> Windows 8.1
  24. 【sun.jnu.encoding】 ————> GBK
  25. 【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;;.
  26. 【java.specification. name】 ————> Java Platform API Specification
  27. 【java. class.version】 ————> 52.0
  28. 【sun.management.compiler】 ————> HotSpot 64-Bit Tiered Compilers
  29. 【os.version】 ————> 6.3
  30. 【user.home】 ————> C:\Users\BindeBug
  31. 【user.timezone】 ————>
  32. 【java.awt.printerjob】 ————> sun.awt.windows.WPrinterJob
  33. file.encoding】 ————> GBK
  34. 【java.specification.version】 ————> 1.8
  35. 【user. name】 ————> BindeBug
  36. 【java. class.path】 ————> D:\Android\AndroidItem\kzt\bin
  37. 【java.vm.specification.version】 ————> 1.8
  38. 【sun.arch.data.model】 ————> 64
  39. 【java.home】 ————> C:\ Program Files\Java\jre1. 8.0_181
  40. 【sun.java.command】 ————> com.bin.demo.Main
  41. 【java.specification.vendor】 ————> Oracle Corporation
  42. 【user.language】 ————> zh
  43. 【awt.toolkit】 ————> sun.awt.windows.WToolkit
  44. 【java.vm.info】 ————> mixed mode
  45. 【java.version】 ————> 1.8. 0_181
  46. 【java.ext.dirs】 ————> C:\ Program Files\Java\jre1. 8.0_181\lib\ext;C:\Windows\Sun\Java\lib\ext
  47. 【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
  48. 【java.vendor】 ————> Oracle Corporation
  49. file.separator】 ————> \
  50. 【java.vendor.url.bug】 ————> http: //bugreport.sun.com/bugreport/
  51. 【sun.cpu.endian】 ————> little
  52. 【sun.io.unicode.encoding】 ————> UnicodeLittle
  53. 【sun.desktop】 ————> windows
  54. 【sun.cpu.isalist】 ————> amd64

【file.encoding】 ————> GBK:当前系统默认的字符编码表。

cruuentTimeMillis()获得当前时间的毫秒值


  
  1. package com.bin.demo;
  2. public class Main {
  3. public static void main(String[] args) throws InterruptedException {
  4. long startTime = System.currentTimeMillis();
  5. Thread.sleep( 3000);
  6. long useTime = System.currentTimeMillis() - startTime;
  7. System. out.println(useTime); //记录住启动程序的时间,程序结束时间 - 程序启动时间 = 程序运行时间
  8. //得到秒、分、时、天、等等值
  9. System. out.println(useTime / 1000);
  10. System. out.println(useTime / ( 60 * 1000));
  11. System. out.println(useTime / ( 60 * 1000 * 60));
  12. System. out.println(useTime / ( 60 * 1000 * 60 * 24));
  13. }
  14. }

 

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操作。

  
  1. package com.bin.demo;
  2. import java.io.IOException;
  3. public class Main {
  4. public static void main( String[] args) throws InterruptedException, IOException {
  5. Runtime run = Runtime.getRuntime();
  6. long m = 1024 * 1024;
  7. System.out. println( "试图使用最大内存 = " + run.maxMemory() / m + "m");
  8. System.out. println( "内存总量 = " + run.totalMemory() / m + "m");
  9. System.out. println( "空闲内存 = " + run.freeMemory() / m + "m");
  10. System.out. println( "已使用内存 = " + (run.totalMemory() - run.freeMemory()) / m + "m");
  11. run.exec( "notepad.exe"); //打开记事本
  12. run.exec( "notepad.exe F:\\test.txt"); //用记事本打开指定文件。同样的一个.mp3、.mp4文件,本地程序有都可以直接打开。
  13. }
  14. }

 

Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

成员都是静态的,这里演示仅演示几个方法


  
  1. package com.bin.demo;
  2. public class Main {
  3. public static void main(String[] args) {
  4. System. out.println( "1,2 最小值 = " + Math.min( 1, 2)); //返回最小的数
  5. System. out.println( "1,2 最大值 = " + Math.max( 1, 2)); //返回最大的数
  6. System. out.println( "9.56 四舍五入 = " + Math.round( 9.56F)); //四舍五入方法
  7. System. out.println( "15.78 最小大数 = " + Math.ceil( 15.78)); //返回比此数大的最小大数
  8. System. out.println( "15.78 最大小数 = " + Math.floor( 15.78)); //返回比此数小的最大小数
  9. //System.out.println(10 * 10 * 10); //等同
  10. System. out.println( "10的3次方 = " + Math.pow( 10, 3)); //10的3次方
  11. System. out.println( "10的3次方 = " + pow( 10, 3)); //自己实现的pow()方法
  12. }
  13. public static int pow(int a, int b) {
  14. int result = a;
  15. for ( int i = 1; i < b; i++) {
  16. result *= a;
  17. }
  18. return result;
  19. }
  20. }

输出:


  
  1. 1,2 最小值 = 1
  2. 1,2 最大值 = 2
  3. 9.56 四舍五入 = 10
  4. 15.78 最小大数 = 16.0
  5. 15.78 最大小数 = 15.0
  6. 10的3次方 = 1000.0
  7. 10的3次方 = 1000

 

Random类

此类的实例用于生成伪随机数流。

在做随机数时,我们一般都会限制在一个指定范围内的随机数。

 常用指定范围值的 nextInt(int n)方法


  
  1. package com.bin.demo;
  2. import java.util.Random;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Random r = new Random();
  6. for ( int i = 0; i < 10; i++) {
  7. /*
  8. * 在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
  9. * 适合在数组中随机下标。
  10. */
  11. System.out.println(r.nextInt( 10) + 1); //得到随机数,加1后:0(不包括),指定值(包括)
  12. }
  13. }
  14. }

输出:


  
  1. 8
  2. 4
  3. 7
  4. 3
  5. 7
  6. 9
  7. 6
  8. 5
  9. 10
  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对象。(重要)

  
  1. package com.bin.demo;
  2. import java.text.DateFormat;
  3. import java.util.Date;
  4. public class Main {
  5. public static void main( String[] args) {
  6. Date date = new Date(1584444797446L); //1584444797446L
  7. System.out. println(date); //Tue Mar 17 19:33:17 CST 2020
  8. System.out. println(date); //Tue Mar 17 19:33:17 CST 2020
  9. //测试确认一个Date对象只能得到一个时间戳
  10. /*
  11. * DateFormat格式化日期
  12. * 加入风格
  13. */
  14. // DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
  15. DateFormat df = DateFormat.getDateTimeInstance( DateFormat. MEDIUM, DateFormat. MEDIUM);
  16. /*
  17. * FULL : 日期风格:2020年3月17日 星期二,时间风格:下午07时33分17秒 CST
  18. * LONG : 日期风格:2020年3月17日,时间风格:下午07时33分17秒
  19. * MEDIUM : 日期风格:2020-3-17,时间风格:19:33:17 //默认风格
  20. * SHORT : 日期风格:20-3-17,时间风格:下午7:33
  21. */
  22. System.out. println(df.format(date)); //格式化日期date对象
  23. }
  24. }

 

SimpleDateFormat自定义格式化日期

SimpleDateFormat是DateFormat的子类。我们需要自定义格式化日期Date,就要参考一下文档:


  
  1. package com.bin.demo;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. public class Main {
  5. public static void main(String[] args) {
  6. Date date = new Date(); //1584444797446L
  7. SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM/dd日 k:m:s:S");
  8. /*
  9. * 可使用此方法更改风格
  10. */
  11. sdf.applyPattern( "yyyy年MM/dd日 k:m:s:S"); //将给定模式字符串应用于此日期格式。
  12. System.out.println(sdf.format(date)); //2020年03/17日 19:33:17:446
  13. }
  14. }

 

DateFormat将日期格式字符串解析成日期Date对象

注意:解析2020/3/17这个【/】,是要设置style风格的(new SimpleDateFormat(yyyy / MM / dd)),默认风格是【-】


  
  1. package com.bin.demo;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. public class Main {
  7. public static void main( String[] args) throws ParseException {
  8. String str_date = "2020-03-17";
  9. // String str_date = "2020/03/17"; //报错,需要指定对应风格解析
  10. // DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); //(/)
  11. DateFormat df = DateFormat.getDateInstance(); //默认风格MEDIUM(-)
  12. Date date = df.parse(str_date);
  13. System.out. println(date.getTime() + " ————> " + df.format(date)); //1584374400000 ————> 2020-3-17
  14. }
  15. }

 

时间戳和Date日期的转换


  
  1. package com.bin.demo;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.util.Date;
  5. public class Main {
  6. public static void main(String[] args) throws ParseException {
  7. /*
  8. * 时间戳转Date。使用Date(long)构造就行
  9. */
  10. //获得当前时间戳
  11. long time = System.currentTimeMillis();
  12. //利用时间戳构造成Date对象
  13. Date date = new Date(time);
  14. System.out.println(DateFormat.getDateInstance().format(date)); //2020-3-17
  15. /*
  16. * Date转时间戳————>Date.getTime()获取时间戳
  17. */
  18. long time2 = date.getTime();
  19. System.out.println(time2); //1584449851077
  20. }
  21. }

 

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月)。

示列一些方法:


  
  1. package com.bin.demo;
  2. import java.util.Calendar;
  3. public class Main {
  4. public static void main( String[] args) throws InterruptedException {
  5. Calendar c = Calendar.getInstance(); //获得日历对象
  6. long time = c.getTimeInMillis(); //时间戳
  7. System.out. println(time); //1584535248070
  8. /*
  9. * 手动设置日历对象:日期(set(...)方法)
  10. */
  11. c. set( Calendar. YEAR, 2016);
  12. c. set( 2016, 12, 1);
  13. c. set( 2016, 12, 1, 18, 50, 50);
  14. System.out. println(showTime( c)); //2017年1月1日星期1 18:50:50:635
  15. /*
  16. * 时间偏移(add(字段,便宜值)方法)注意:此方法便宜是会响应到(大的时间模块)比如(今天是2020.9.1,偏移日数-1,等于2020.8.31)
  17. *
  18. * 闰年可用这种方式计算:获取随便某一年的2月有多少天
  19. */
  20. c. set( 2020, 2, 1);
  21. c.add( Calendar. DAY_OF_MONTH, - 1); //正数代表加,负数就减
  22. System.out. println(showTime( c)); //2020年2月29日星期5 18:50:50:686
  23. }
  24. public static String showTime( Calendar c) {
  25. StringBuilder sb = new StringBuilder();
  26. /*
  27. * 日历常用字段
  28. */
  29. sb.append( c. get( Calendar. YEAR) + "年");
  30. sb.append( c. get( Calendar. MONTH) + 1 + "月"); //月份的计算是从0开始的(0月==1月),所以返回月份后+1
  31. sb.append( c. get( Calendar. DAY_OF_MONTH) + "日");
  32. sb.append( "星期" + c. get( Calendar. WEEK_OF_MONTH) + " ");
  33. sb.append( c. get( Calendar. HOUR_OF_DAY) + ":"); // HOUR(12小时),HOUR_OF_DAY(24小时)
  34. sb.append( c. get( Calendar. MINUTE) + ":");
  35. sb.append( c. get( Calendar. SECOND) + ":");
  36. sb.append( c. get( Calendar. MILLISECOND)); //微秒
  37. return sb. toString();
  38. }
  39. }

 


转载:https://blog.csdn.net/qq_42470947/article/details/104904152
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场