1. 程式人生 > >Java第二十天學習筆記~其他物件API(System類、Runtime類、Math類、Date類、Calendar類)、IO流

Java第二十天學習筆記~其他物件API(System類、Runtime類、Math類、Date類、Calendar類)、IO流

System類

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

常見方法:Long currentTimeMillis( );獲取當前時間毫秒值

 Properties prop=System.getProperties( );獲取系統的屬性資訊,並存儲到Properties集合中

Runtime類

使應用程式與其執行的環境相連

應用程式不能建立自己的Runtime

Runtime:沒有構造方法摘要,說明該類不可建立物件

又發現還有非靜態方法,說明該類應該是提供靜態的返回該類物件的方法,而且只有一個,說明Runtime類使用了單例設計模式

Runtime getRuntime();
獲取Runtime類的物件

Process exec(String command);
執行命令 execute

destroy();
殺掉子程序

Math類

提供了運算元學運算的方法,都是靜態的

ceil();返回大於引數的最小整數

floor();返回小於引數的最大整數

round();返回四捨五入的整數

pow(a,b,);a的b次方

random();隨機數,大於0小於1

Random類是用於生成偽隨機數的

Date類

時間和日期的物件

日期物件和毫秒值之間的轉換
毫秒值->日期物件
1.通過Date物件的構造方法 new Date(Millis);
2.通過Date 中的setTime(Millis)方法設定

日期物件->毫秒值
getTime方法
因為可以通過具體的數值進行運算

對日期物件進行格式化

日期物件->日期物件的字串
使用的是DateFormate類中的formate方法
先獲取日期格式化物件,然後將date作為引數物件傳入formate函式,轉為日期物件的字串型別

DateFormate是抽象類不能建立子類,所以使用getInstance方法獲取物件

日期格式的字串->日期物件
使用的是DateFormate類中的parse方法

SimpleDateFormat類可以對日期時間物件自定義格式

Calendar類

c.add(Calendar.Year,2 );向右偏移2年 +2年 

package cn.itcast.p1.otherapi.test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//練習1:
//* "2012-3-17"到"2012-4-6"
//* 中間有多少天。
/*
* 1.首先把兩個時間字串轉為時間物件。
* 2.將時間物件轉為毫秒值。
* 3.兩個毫秒值進行相減,得到兩個毫秒值之差。
* 4.將毫秒值變為天數。
*
* */
public class DateTest {
	public static void main(String[] args){
	String str_date1 = "2012-3-17";
	String str_date2 = "2012-4-6";
	
	int day = getDay(str_date1,str_date2);
	System.out.println(day);
	
	
	}

	public static int getDay(String str_date1, String str_date2) {
	//1.將時間字串轉為時間物件。
	DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	try {
	  Date date1 = dateFormat.parse(str_date1);
	  Date date2 = dateFormat.parse(str_date2);
	  //將時間物件轉為毫秒值;
	  long time1 = date1.getTime();
	  long time2 = date2.getTime();
	  //得到毫秒值之差
	  long time = Math.abs(time2-time1);
	  //轉為天數。
	  int day = transferDay(time);
	
	  return day;
	} catch (ParseException e) {
	  e.printStackTrace();
	}
	
	return -1;
	}
	
	private static int transferDay(long time) {
	return (int)(time/1000/60/60/24);
	}
}

 

add(int field, int amount);
根據日曆的規則,為給定的日曆欄位新增或者減去指定的時間量

get(int field);
返回給定日曆的欄位值

set();
設定年月日時間等
它也是抽象類,要用getInstance方法獲取物件
package cn.itcast.p1.otherapi.test;

import java.util.Calendar;

/*
練習2;
得到每個月有多少天
*/
public class DateTest2 {
    public static void main(String[] agrs){
        //建立對欄位操作的物件
        Calendar cal = Calendar.getInstance();

        int day = getDayOfMonth(2013,1);
//        method(cal);
        System.out.println(day);


    }

//對時間欄位進行的操作,主要是輸出年月日和星期。
    private static void method(Calendar cal) {
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH)+1;
        int day = cal.get(Calendar.DAY_OF_MONTH);

        String week = getWeek(cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(year+"年"+month+"月"+day+"日"+week);

    }

    private static String getWeek(int i) {
        String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",};

        return weeks[i];
    }

//得到某一月的天數,
    public static int getDayOfMonth(int year,int month) {
        Calendar cal = Calendar.getInstance();

        cal.set(year,month,1);
        cal.add(Calendar.DAY_OF_MONTH,-1);
        method(cal);
        return cal.get(Calendar.DAY_OF_MONTH);

    }
}

 IO流

1.輸入輸出流,是相對於裝置而言的;簡寫模式為IO流

將外設中的資料讀入記憶體中:輸入,讀

將記憶體中的數學寫入外設中:輸出,寫

按操作的資料分為位元組流和字元流

位元組流的兩個頂層父類:InputStream,OutputStream

字元流的兩個頂層父類:Reader輸入,Writer輸出

這些體系的子類都以父類名作為字尾

字首名就是該物件的功能

2.字元流

其實就是:位元組流讀取文字位元組資料後,不直接操作而是先查指定的編碼表,獲取對應的文字。再對文字進行操作,簡單的來說就是:位元組流+編碼表=字元流。

package cn.itcast.p2.io.filewriter;

import java.io.FileWriter;
import java.io.IOException;

/*需求1:將一些文字儲存到硬碟的一個檔案中。
如果要操作文字資料,優先考慮字元流。
*/


public class FileWriterDemo {
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {
        //建立一個可以往檔案中寫入字元資料的輸出流物件。
        /*
        * 既然是往一個檔案中寫入文字資料,那麼在建立物件時,就必須明確該檔案(用於儲存資料的目的地).
        *
        * 如果檔案不存在則會自己建立,如果檔案存在則會覆蓋。
        *
        * 如果建構函式中加入true,可以實現對檔案的續寫。
        * */

        FileWriter fw = new FileWriter("demo.txt",true);

        /*
        * 呼叫Writer中的write(String)方法,寫入資料。
        *
        * 其實資料寫到了臨時儲存緩衝區中。
        *
        * */
        fw.write(LINE_SEPARATOR+"abcdef"+"ajksjaksaksa");
        /*
        * 進行重新整理,將資料直接寫到目的地。
        * */
//        fw.flush();
        /*
        * 關閉流,關閉資源。
        *在關閉前,會呼叫flush重新整理緩衝區的資料到目的地。
        * */

        fw.close();
//        fw.write("haha");//關閉流後不能寫入,否則丟擲java.io.IOException
    }
}