黑馬程序員—其他類

---------------------- JavaEE+Android、Java培訓、期待與您交流! ----------------------


System類

System類是描述系統一些信息的類,不可以實例化,也無構造函數。

System類中的方法和屬性都是靜態的。

      in  :標準輸入流,默認是鍵盤。

      out:標準輸出流,默認是控制檯。

方法:

1、獲取系統的屬性信息: Properties getProperties();

說明:

1)此方法返回的雙列集合,即鍵值對;因爲Properties是Hahstable的子類,也就是Map集合的一個子類對象,那麼通過Map方法取出該集合中的元素。

 2)該集合存儲的都是字符串,沒有泛型定義

2、獲取指定屬性信息:

      String System.getProperty(String key);

3、在系統內定義特有信息:

      void System.setProperty(String key,String value);

4、如何在jvm啓動時,加載一些屬性信息:

      通過命令:java -D<name>=<value> 可以設置特有的系統屬性信息

	<span style="font-size:10px;">	......
		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);
		}
		......</span>


Runtime類

每個java應用程序都有一個Runtime類實例,使用應用程序能與其中運行的環境相連接,應用程序不能創建自己的Runtime類的實例,是由系統底層自己創建的。該類並未提供構造函數:說明不可以new對象,那麼會直接想到該類中的方法都是靜態的。查閱API文檔發現,該類中還有非靜態方法,說明該類中肯定會提供方法獲取該類對象,並且該方法是靜態的,且返回值類型是該類類型。可以看出該類使用了單例設計模式。

方法:

1、獲取本類對象:

       static Runtime getRuntime();

2、在單獨的進程中執行指定字符串命令:

      Process exec(String command);

3、在Process中有一個殺掉子進程的方法,可將exec方法開啓的進程殺掉

      void destroy();


		......
		Runtime r = Runtime.getRuntime();
		Process p = r.exec("winmine.exe");
		//System.out.println(r);
		Thread.sleep(6000);
		p.destroy();
		......


時間類

java中默認的格式如:Sun Jan 16 10:20:48 CST 2011

這樣的格式不一定滿足每個人的需求,那麼就需要自定義格式,需要格式化模式。具體步驟:

1)創建Date對象
2)將模式封裝到SimpleDateFormat對象中
3)調用format方法讓模式格式化指定Date對象

		......
		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);
		......

Calendar類

Calendar是一個抽象類,它爲特定瞬間與一組諸如YEAR、MONTH、DAY_OF_MONTH等日曆字段之間的轉換提供了一些方法。

Calendar可以對年月日等時間進行獲取。並提供了相應的子段值。

方法:

1、基本獲取時間:

1)獲取年份:Calendar.YEAR
2)獲取月份:Calendar.MONTH
3)獲取日期:Calendar.DAY_OF_MONTH
4)獲取星期:Calendar.DAY_OF_WEEK
5)獲取小時:Calendar.HOUR_OF_DAY
6)獲取分鐘:Calendar.MINUTE
7)獲取秒數:Calendar.SECOND

2、設置時間:

1)爲給定的日曆字段添加或減去指定的時間值: void add(int field,int amount);

2)獲取指定的日曆字段對應的時間值:int get(int field);

3)將給定日曆字段對應的時間值設置爲給定值:void set(int field,int value);

設置日曆字段 YEAR、MONTH和DAY_OF_MONTH的值: void set(int year,int month,int date);


練習

1、獲取任意年的二月有多少天:
2、獲取前一天的現在這個時刻
3、計算有效上課天數,每週六日不上課,計算任意年從九月到十月的有效上課天數

<span style="font-family:Arial;font-size:10px;">import java.util.*;

class CalendarTest 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		//測試1
		int n = getFEB(2012);
		sop("2012年2月的天數:" + n);
		//測試2
		String s = getTheTime();
		sop("昨天的現在這個時刻是:" + s);
		sop("-----------------");
		//測試3
		int m = getValDay(2013,1,3);
		sop("有效上課天數:" + m);

	}
	//測試1:創建獲取二月的方法
	public static int getFEB(int year)
	{
		Calendar c = Calendar.getInstance();
		//設置任意年的時間爲3月1號
		c.set(year,2,1);
		//獲取設置後的3月1日,並減去1天,即爲二月最後一天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//獲取最終設置的日期,即爲獲取到的二月的天數
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n;
	}

	//測試2:獲取前一天的現在這個時刻
	public static String getTheTime()
	{
		//獲取時間信息
		Calendar c = Calendar.getInstance();
		//將日期設置爲昨天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//獲取昨天的現在這個時刻
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
	}

	//測試3:計算有效上課天數
	public static int getValDay(int year,int startMON,int endMON)
	{
		//獲取時間信息
		Calendar c = Calendar.getInstance();
		//調用獲取天數函數
		int day = getDay(c,year,startMON,endMON);
		sop("總天數:" + day);//測試獲取的天數
		//初始化星期
		int week = 0;
		//定義計數器
		int count = 0;
		//遍歷每天一天,判斷是否爲週六日,f否的話計數器自增
		for(int i=0;i<day;i++)
		{
			//必須要先將天數加1再判斷,否則到week爲6的時候會一直continue,
			//而且此處也可以避免下面的week是以星期日爲第一天的問題
			c.add(Calendar.DAY_OF_MONTH,1);
			//獲取當前天數的星期
			week = c.get(Calendar.DAY_OF_WEEK);
			sop("星期:" + week);
			if (week==6 || week==7)
				continue;
			count++;
			sop("有效天數:" + count);
		}
		return count;
	}
	//獲取給定月份的天數
	public static int getDay(Calendar c,int year,int startMON,int endMON)
	{
		//定義天數和變量
		int sum = 0;
		//遍歷每個月的天數
		for(int i=0;i<=endMON-startMON;i++)
		{
			//設定第二個月的第一天,循環一次後設定下個月爲處世月,因爲0爲一月份所以startMON要加1
			c.set(year,startMON+i,1);
			//獲取前一個月的天數
			c.add(Calendar.DAY_OF_MONTH,-1);
			//將每個月的天數累加
			sum += c.get(Calendar.DAY_OF_MONTH);
			//循環後,要相應加上i個月
			c.add(Calendar.MONTH,i+1);
		}
		return sum;
	}
}
</span>


Math 類

Math類中全爲靜態方法,都是數學中的一些計算方法。

方法:

1、double ceil(double d)返回大於指定數據的最小整數

2、double floor(double d)  返回小於指定數據的最大整數

3、double pow(double a,double b)   返回a的b次方

4、double/float round(double/float m)  返回m四捨五入的值

5、double random()  返回正號的double值,是一個 0<=X<1.0 的隨機數X


Random類

這是一個java.util中的一個單獨的類,獲取隨機數。與Math中的random是一樣的,不過這個類有自身的方法,可以將相應的隨機數強轉爲指定基本數據類型。

<span style="font-size:10px;">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類測試
		sop("-----------Math類測試-------------");
		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類測試-------------");
		Random r = new Random();

		for(int i=0;i<5;i++)
		{
			n = r.nextInt(10);

			sop("Rondam():" + n);
		}
	}
}
</span>

練習

將某一小數保留爲指定位數的小數

class MathDemo
{
	public static void main(String[] args) 
	{
		double d = round(15.6745,1);
		System.out.println("d = " + d);
	}
	//保留指定位數爲n的小數
	public static double round(double d,int n)
	{
		//將給定數擴大n倍後四捨五入,再縮小相應的倍數
		return Math.round(d*(Math.pow(10,n)))/(Math.pow(10,n));	
	}
}





---------------------- JavaEE+Android、Java培訓、期待與您交流! ----------------------

詳細請查看: http://edu.csdn.net

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