目錄
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();
}
}