一皿哨、System 類
1浅侨、概述:
1、System類是描述系統(tǒng)一些信息的類证膨,不可以實(shí)例化如输,也無(wú)構(gòu)造函數(shù)。
2央勒、System類中的方法和屬性都是靜態(tài)的酱吝。
in :標(biāo)準(zhǔn)輸入流,默認(rèn)是鍵盤(pán)召边。
out:標(biāo)準(zhǔn)輸出流娱俺,默認(rèn)是控制臺(tái)。
2井濒、方法:
1灶似、獲取系統(tǒng)的屬性信息:
Properties getProperties();
說(shuō)明:
1)此方法返回的雙列集合,即鍵值對(duì)瑞你;因?yàn)镻roperties是Hahstable的子類酪惭,也就是Map集合的一個(gè)子類對(duì)象,那么通過(guò)Map方法取出該集合中的元素者甲。
2)該集合存儲(chǔ)的都是字符串春感,沒(méi)有泛型定義
2、獲取指定屬性信息:
String System.getProperty(String key);
3过牙、在系統(tǒng)內(nèi)定義特有信息:
void System.setProperty(String key,String value);
4甥厦、如何在jvm啟動(dòng)時(shí),加載一些屬性信息:
通過(guò)命令:java -D<name>=<value> 可以設(shè)置特有的系統(tǒng)屬性信息
示例:
......
String s = getProperty("os.name");
System.out.println("os.name|:" + s);
System.setProperty("name----:","xixi");
System.out.println("-------------------------");
String v = System.getProperty("myName");
System.out.println("v = " + v);
Properties pop = System.getProperties();
for(Object obj : pop.keySet())
{
String value = (String)pop.get(obj);
out.println(obj + ":" + value);
}
......
二寇钉、Runtime 類
1刀疙、概述:
1、每個(gè)java應(yīng)用程序都有一個(gè)Runtime類實(shí)例扫倡,使用應(yīng)用程序能與其中運(yùn)行的環(huán)境相連接谦秧,應(yīng)用程序不能創(chuàng)建自己的Runtime類的實(shí)例,是由系統(tǒng)底層自己創(chuàng)建的撵溃。
2疚鲤、該類并未提供構(gòu)造函數(shù):說(shuō)明不可以new對(duì)象,那么會(huì)直接想到該類中的方法都是靜態(tài)的缘挑。查閱API文檔發(fā)現(xiàn)集歇,該類中還有非靜態(tài)方法,說(shuō)明該類中肯定會(huì)提供方法獲取該類對(duì)象语淘,并且該方法是靜態(tài)的诲宇,且返回值類型是該類類型际歼。
3、由這個(gè)特點(diǎn)可以看出該類使用了單例設(shè)計(jì)模式姑蓝。
2鹅心、方法:
1、獲取本類對(duì)象:
static Runtime getRuntime();
2纺荧、在單獨(dú)的進(jìn)程中執(zhí)行指定字符串命令:
Process exec(String command);
3旭愧、在Process中有一個(gè)殺掉子進(jìn)程的方法,可將exec方法開(kāi)啟的進(jìn)程殺掉
void destroy();
示例:
......
Runtime r = Runtime.getRuntime();
Process p = r.exec("winmine.exe");
//System.out.println(r);
Thread.sleep(6000);
p.destroy();
......
三宙暇、時(shí)間類
1输枯、Date類
1、概述:
java中默認(rèn)的格式如:Sun Jan 16 10:20:48 CST 2011
這樣的格式不一定滿足每個(gè)人的需求客给,那么就需要自定義格式用押,需要格式化模式肢簿。
具體步驟:
1)創(chuàng)建Date對(duì)象
2)將模式封裝到SimpleDateFormat對(duì)象中
3)調(diào)用format方法讓模式格式化指定Date對(duì)象
示例:
......
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
String time = sdf.format(d);
System.out.println("Time =" + time);
......
2靶剑、Calendar類
1、概述:
1)Calendar是一個(gè)抽象類池充,它為特定瞬間與一組諸如YEAR桩引、MONTH、DAY_OF_MONTH等日歷字段之間的轉(zhuǎn)換提供了一些方法收夸。
2)Calendar可以對(duì)年月日等時(shí)間進(jìn)行獲取坑匠。并提供了相應(yīng)的子段值∥韵В可參閱API文檔厘灼。
2、方法:
2.1咽瓷、基本獲取時(shí)間
1)獲取年份:Calendar.YEAR
2)獲取月份:Calendar.MONTH
3)獲取日期:Calendar.DAY_OF_MONTH
4)獲取星期:Calendar.DAY_OF_WEEK
5)獲取小時(shí):Calendar.HOUR_OF_DAY
6)獲取分鐘:Calendar.MINUTE
7)獲取秒數(shù):Calendar.SECOND
2.2设凹、設(shè)置時(shí)間:
1)為給定的日歷字段添加或減去指定的時(shí)間值: ---> void add(int field,int amount);
2)獲取指定的日歷字段對(duì)應(yīng)的時(shí)間值: ---> int get(int field);
3)將給定日歷字段對(duì)應(yīng)的時(shí)間值設(shè)置為給定值: ---> void set(int field,int value);
設(shè)置日歷字段 YEAR、MONTH和DAY_OF_MONTH的值: ---> void set(int year,int month,int date);
3茅姜、關(guān)于Calendar中的常量值理解:
當(dāng)我在獲取時(shí)間的時(shí)候闪朱,會(huì)少寫(xiě)get方法,而直接寫(xiě)的是Calendar.DAY_OF_MONTH钻洒,結(jié)果發(fā)現(xiàn)不是自己想要的值奋姿,而是一個(gè)固定為5的值,為什么呢素标?
今天我翻閱了api文檔称诗,查看了一下關(guān)于Calendar中的DAY_OF_MONTH字段數(shù)字,沒(méi)錯(cuò)头遭,它被稱為get 和 set 的字段數(shù)字寓免,而且你細(xì)心一點(diǎn)就會(huì)發(fā)現(xiàn)退腥,它是這樣被定義的:
public static finalint DAY_OF_MONTH
發(fā)現(xiàn)這些字段數(shù)字都是靜態(tài)的常量值,那為什么還能對(duì)其修改呢再榄?還可以使用add,set等方法對(duì)其設(shè)置呢困鸥?我對(duì)這個(gè)問(wèn)題開(kāi)始也很迷惑嗅蔬,百度了之后,才大概有些明白澜术,我的理解是這樣的:
你可以把這個(gè)Calendar中的YEAR的常量值理解為它的小名,打個(gè)比方說(shuō)猬腰,一個(gè)人大名叫張三鸟废,你可以叫他的小名為小張,這個(gè)張三就相當(dāng)于YEAR姑荷,而這個(gè)小張就是YEAR的常量值盒延,為什么要這么設(shè)置呢?
這就要和字段值相聯(lián)系了鼠冕。其實(shí)添寺,這些設(shè)置的操作是對(duì)具體時(shí)間的修改,而不是對(duì)這些字段值的修改懈费,獲取的也是修改后的時(shí)間值计露。之所以稱之為字段值,就是應(yīng)為方便設(shè)置:簡(jiǎn)單地說(shuō)就是將日期分為幾段憎乙,如圖所示:
YEAR | MONTH | DAY_OF_MONTH | ... |
---|---|---|---|
1 | 2 | 5 | ... |
(相應(yīng)的字段值請(qǐng)看Calendar的常量值)
那么要是對(duì)某一部分進(jìn)行修改的話票罐,如設(shè)置年份為2013年,則為set(1泞边,2013)
set(int code,int value){
switch(code){
case 1:
修改年代
}
}
其中的code就相當(dāng)于字段值该押,而value就是所要設(shè)置的時(shí)間值,那么字段值是常量就不會(huì)改變的繁堡。而是將字段值(鍵)這個(gè)常量所對(duì)應(yīng)的要修改的時(shí)間值(值)進(jìn)行修改沈善。所以并沒(méi)有改變這個(gè)常量,為何還要寫(xiě)成YEAR這樣的單詞呢椭蹄,而不是用1表示呢闻牡?當(dāng)然,這就是靜態(tài)常量的好處了绳矩,設(shè)為靜態(tài)static就是為了加載Calendar這個(gè)類的時(shí)候就存在了罩润,直接可以用了;而設(shè)為常量final就是為了方便識(shí)別翼馆,用起來(lái)方便割以,名字好記金度,而不用記那么多數(shù)字。(其實(shí)就可以理解為相應(yīng)的數(shù)字代表相應(yīng)的時(shí)間名稱)严沥。
簡(jiǎn)單地說(shuō)猜极,就是你修改的是Calenda中某個(gè)字段值的屬性,改變的是它的狀態(tài)消玄,而不是它的時(shí)間這個(gè)名字跟伏。如,不是將YEAR的字段值1改變?yōu)?013翩瓜,而是將這個(gè)字段值為1的YEAR所對(duì)應(yīng)的時(shí)間值2012年改為2013這個(gè)數(shù)值受扳。一個(gè)是數(shù)字(字段值),一個(gè)是數(shù)值(時(shí)間值或稱為時(shí)間信息)兔跌。
示例:
......
String[] mons = {"一月","二月","三月",
"四月","五月","六月","七月",
"八月","九月","十月","十一月","十二月"};
int m = c.get(Calendar.MONTH);
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int w = c.get(Calendar.DAY_OF_WEEK);
sop(c.get(Calendar.YEAR) + "年");
sop(mons[m]);
sop(c.get(Calendar.DAY_OF_MONTH) + "日");
sop(weeks[w]);
......
c.add(Calendar.YEAR,5);//當(dāng)前年份加上5年
c.add(Calendar.DAY_OF_MONTH,32);//時(shí)間是連續(xù)的勘高,滿當(dāng)前月則前進(jìn)或后退相應(yīng)的天數(shù)
......
練習(xí):
1、獲取任意年的二月有多少天:
2坟桅、獲取前一天的現(xiàn)在這個(gè)時(shí)刻
3华望、計(jì)算有效上課天數(shù),每周六日不上課桦卒,計(jì)算任意年從九月到十月的有效上課天數(shù)
import java.util.*;
class CalendarTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
//測(cè)試1
int n = getFEB(2012);
sop("2012年2月的天數(shù):" + n);
//測(cè)試2
String s = getTheTime();
sop("昨天的現(xiàn)在這個(gè)時(shí)刻是:" + s);
sop("-----------------");
//測(cè)試3
int m = getValDay(2013,1,3);
sop("有效上課天數(shù):" + m);
}
//測(cè)試1:創(chuàng)建獲取二月的方法
public static int getFEB(int year)
{
Calendar c = Calendar.getInstance();
//設(shè)置任意年的時(shí)間為3月1號(hào)
c.set(year,2,1);
//獲取設(shè)置后的3月1日立美,并減去1天,即為二月最后一天
c.add(Calendar.DAY_OF_MONTH,-1);
//獲取最終設(shè)置的日期方灾,即為獲取到的二月的天數(shù)
int n = c.get(Calendar.DAY_OF_MONTH);
return n;
}
//測(cè)試2:獲取前一天的現(xiàn)在這個(gè)時(shí)刻
public static String getTheTime()
{
//獲取時(shí)間信息
Calendar c = Calendar.getInstance();
//將日期設(shè)置為昨天
c.add(Calendar.DAY_OF_MONTH,-1);
//獲取昨天的現(xiàn)在這個(gè)時(shí)刻
int n = c.get(Calendar.DAY_OF_MONTH);
return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
}
//測(cè)試3:計(jì)算有效上課天數(shù)
public static int getValDay(int year,int startMON,int endMON)
{
//獲取時(shí)間信息
Calendar c = Calendar.getInstance();
//調(diào)用獲取天數(shù)函數(shù)
int day = getDay(c,year,startMON,endMON);
sop("總天數(shù):" + day);//測(cè)試獲取的天數(shù)
//初始化星期
int week = 0;
//定義計(jì)數(shù)器
int count = 0;
//遍歷每天一天,判斷是否為周六日碌更,f否的話計(jì)數(shù)器自增
for(int i=0;i<day;i++)
{
//必須要先將天數(shù)加1再判斷裕偿,否則到week為6的時(shí)候會(huì)一直continue,
//而且此處也可以避免下面的week是以星期日為第一天的問(wèn)題
c.add(Calendar.DAY_OF_MONTH,1);
//獲取當(dāng)前天數(shù)的星期
week = c.get(Calendar.DAY_OF_WEEK);
sop("星期:" + week);
if (week==6 || week==7)
continue;
count++;
sop("有效天數(shù):" + count);
}
return count;
}
//獲取給定月份的天數(shù)
public static int getDay(Calendar c,int year,int startMON,int endMON)
{
//定義天數(shù)和變量
int sum = 0;
//遍歷每個(gè)月的天數(shù)
for(int i=0;i<=endMON-startMON;i++)
{
//設(shè)定第二個(gè)月的第一天痛单,循環(huán)一次后設(shè)定下個(gè)月為處世月嘿棘,因?yàn)?為一月份所以startMON要加1
c.set(year,startMON+i,1);
//獲取前一個(gè)月的天數(shù)
c.add(Calendar.DAY_OF_MONTH,-1);
//將每個(gè)月的天數(shù)累加
sum += c.get(Calendar.DAY_OF_MONTH);
//循環(huán)后,要相應(yīng)加上i個(gè)月
c.add(Calendar.MONTH,i+1);
}
return sum;
}
}
四旭绒、Math 類
1鸟妙、概述:
Math類中全為靜態(tài)方法,都是數(shù)學(xué)中的一些計(jì)算方法挥吵。
2重父、方法:
1、double ceil(double d)
---> 返回大于指定數(shù)據(jù)的最小整數(shù)
2忽匈、double floor(double d)
---> 返回小于指定數(shù)據(jù)的最大整數(shù)
3房午、double pow(double a,double b)
---> 返回a的b次方
4、double/float round(double/float m)
---> 返回m四舍五入的值
5丹允、double random()
---> 返回正號(hào)的double值郭厌,是一個(gè) 0<=X<1.0 的隨機(jī)數(shù)X
3袋倔、Random類
這是一個(gè)java.util中的一個(gè)單獨(dú)的類,獲取隨機(jī)數(shù)折柠。與Math中的random是一樣的宾娜,不過(guò)這個(gè)類有自身的方法,可以將相應(yīng)的隨機(jī)數(shù)強(qiáng)轉(zhuǎn)為指定基本數(shù)據(jù)類型扇售。
如:
int nextInt(int n)
示例:
import java.util.*;
class MathDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
double d = 0;
int n = 0;
//Math類測(cè)試
sop("-----------Math類測(cè)試-------------");
d = Math.ceil(15.66);
sop("ceil(15.66):" + d);
d = Math.floor(15.66);
sop("floor(15.66):" + d);
d = Math.pow(2,3);
sop("pow(2,3):2e3 = " + d);
d = Math.round(15.66);
sop("round(15.66):" + d);
d = Math.round(15.43);
sop("round(15.43):" + d);
for(int i=0;i<5;i++)
{
d = Math.random();
n = (int)(Math.random()*10+1);
sop("rondam():" + d + ",(int):" + n);
}
sop("-----------Random類測(cè)試-------------");
Random r = new Random();
for(int i=0;i<5;i++)
{
n = r.nextInt(10);
sop("Rondam():" + n);
}
}
}
練習(xí):將某一小數(shù)保留為指定位數(shù)的小數(shù)
class MathDemo
{
public static void main(String[] args)
{
double d = round(15.6745,1);
System.out.println("d = " + d);
}
//保留指定位數(shù)為n的小數(shù)
public static double round(double d,int n)
{
//將給定數(shù)擴(kuò)大n倍后四舍五入碳默,再縮小相應(yīng)的倍數(shù)
return Math.round(d*(Math.pow(10,n)))/(Math.pow(10,n));
}
}