Java學(xué)習(xí)之java中的其他對(duì)象

一皿哨、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));   
    }  
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缘眶,隨后出現(xiàn)的幾起案子嘱根,更是在濱河造成了極大的恐慌,老刑警劉巖巷懈,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件该抒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡顶燕,警方通過(guò)查閱死者的電腦和手機(jī)凑保,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涌攻,“玉大人欧引,你說(shuō)我怎么就攤上這事】一眩” “怎么了芝此?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)因痛。 經(jīng)常有香客問(wèn)我婚苹,道長(zhǎng),這世上最難降的妖魔是什么鸵膏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任膊升,我火速辦了婚禮,結(jié)果婚禮上谭企,老公的妹妹穿的比我還像新娘廓译。我一直安慰自己,他們只是感情好债查,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布非区。 她就那樣靜靜地躺著,像睡著了一般攀操。 火紅的嫁衣襯著肌膚如雪院仿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音歹垫,去河邊找鬼剥汤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛排惨,可吹牛的內(nèi)容都是我干的吭敢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暮芭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹿驼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起辕宏,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畜晰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瑞筐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凄鼻,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年聚假,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块蚌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膘格,死狀恐怖峭范,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘪贱,我是刑警寧澤纱控,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站政敢,受9級(jí)特大地震影響其徙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喷户,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望访锻。 院中可真熱鬧褪尝,春花似錦、人聲如沸期犬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)龟虎。三九已至璃谨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佳吞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工拱雏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人底扳。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓铸抑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衷模。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹊汛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法阱冶,內(nèi)部類的語(yǔ)法刁憋,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法木蹬,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,660評(píng)論 18 399
  • 自從JDK 1.0開(kāi)始至耻,Java就提供了Date來(lái)處理時(shí)間和日期,作為老古董自然有很多東西是過(guò)時(shí)的届囚。然后出現(xiàn)了Ca...
    湫水長(zhǎng)天閱讀 2,090評(píng)論 0 16
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 11,003評(píng)論 6 13
  • 最近項(xiàng)目中用到自定義日歷組件有梆,找來(lái)找去,最后發(fā)現(xiàn)GitHub的material-calendarview這個(gè)項(xiàng)目最...
    colin2017閱讀 1,528評(píng)論 0 0
  • 好意系,謝謝泥耀,感謝各位熱情的掌聲,請(qǐng)坐蛔添,謝謝你們痰催。Ok?那么吼一聲迎瞧,在座的非晨淙埽快樂(lè)的,非常有能力的伙伴們凶硅,大家下午好缝裁,...
    檸檬桃子biubiubiu閱讀 347評(píng)論 0 1