【Java】System系統信息、Runtime運行時信息、Math計算、Random隨機、Date日期

目錄

 

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):指定獲取某個系統屬性。

 

獲取系統屬性集,並不完全顯示完的鍵,還有更多屬性。

獲取全部系統屬性集

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(Linux命令)命令的方式啓動程序。返回一個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();
	}
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章