20155324 2016-2017-2 《Java程序設計》第7周學習總結

20155324 2016-2017-2 《Java程序設計》第7周學習總結

教材學習內容總結

認識時間與日期

- 時間的度量

1.格林威治時間(GMT):經過觀察太陽而得,由於地球公轉軌道爲橢圓形且速度不一,自己自傳減速而形成偏差。html

2.世界時(UT):經過觀測遠方星體跨過子午線而得,受地球自轉速度影響有偏差。java

3.國際原子時(TAI):將秒的國際單位定義爲銫原子輻射振動9192631770周耗費的時間。git

4.世界協調時間(UTC):保持TAI和UT時間偏差不要過大采用了閏秒修正。api

5.Unix時間:Unix系統時間表示法,定義爲UTC時間1970年1月1日爲起點通過的秒數,不考慮閏秒修正。函數

6.epoch:某個特定時間開始,時間軸上的某一瞬間。學習

  • 年曆

1.儒略曆:現今公曆的前身,修正了羅馬歷隔三年設置一閏年的錯誤,改採四年一閏。this

2.格里高利曆:改革了儒略曆,將儒略曆1582年10月4號星期四的隔天,訂爲格里高利曆1582年10月15日星期五。.net

3.ISO 8601標準:統一時間日期的數據交換格式,例如:~yyyy-mm-ddTHHH:MM:SS.SSS~等。線程

- 時區

1.UTC偏移:精度每15度偏移1小時,一般表示Z符號。設計

2.日觀節約時間:夏、冬日照時間差別很大時實施。

認識Date與Calendar

- Date與DateFormat

1.Date:取得系統時間,方法之一就是使用System.currentTimeMillis()方法,返回long類型整數,表明1970年1月1日0時0分0秒0毫秒至今通過的毫秒數。Date有兩個構造函數可使用,一個可以使用epoch毫秒數構建,另外一個爲無自變量構造函數,內部亦是使用System.currentTimeMillis()取得毫秒數,調用getTime()可取得內部保存的epoch毫秒數值。

package cc.openhome;

import java.util.Arrays;

public class LambdaDemo {
    public static void main(String[] args) {
        String[] names = {"Justin", "caterpillar", "Bush"};
        Arrays.sort(names, (name1, name2) -> name1.length() - name2.length());
        System.out.println(Arrays.toString(names));
    }
}

2.DateFormat:DateFormat是個抽象類,其操做類是java.text.SimpleDateFormat,能夠處理字符串時間格式。能夠經過DateForm的各類靜態方法進行格式化,使用模式字符串自定義格式,使用parse()方法將指定的字符串剖析爲Date實例。

Calendar: 時間的運算

1.Calendar:想要取得某個時間日期信息,或者是對時間日期進行操做,可使用Calendar實例。Calendar是個抽象類,java.util.GregorianCalendar是其子類,操做了儒略曆與格里高利曆的混合歷。能夠設定時間日期等字段,使用add()方法改變Calendar的時間,使用roll()方法加減日期中某個字段,使用after()或before()方法比較兩個Calendar的時間日期前後。

2.TimeZone:Calendar時會使用默認時區,可使用java.util.TimeZone的getDefault()來取得默認時區信息。

JDK8新時間日期API

  • 機器時間 Instant

許多開發者並不知道過去有過日光節約時間,在取得Date實例後,被名稱Date誤導,認爲他們表明日期,真正可靠的信息只有內含epoch毫秒數。因此不該該使用Data實例來得知人類觀點的時間信息,可使用Instant的靜態方法now()取得表明Java epoch毫秒數的Instant實例。

  • 人類時間(ISO8601 標準)

1.LocalDateTime:包括日期與時間。

2.LocalDate:只有日期,設定不存在的日期時會拋出DateTimeException錯誤。

3.LocalTime:只有時間。

4.ZonedDateTime:當補上時區信息後組合起來的時間實際上不存在時,ZonedDateTime會自動更正。

5.OffsetdateTime:單純表明UTC偏移量,使用ISO 8601。

6.Year、YearMonth、Month、MonthDay:若是隻想要表示年或月,使用Year或Month;若是想要表示年月或月日,使用YearMonth或MonthDay。

package cc.openhome;

import static java.lang.System.out;
import java.util.Arrays;
import java.util.List;
import static java.util.stream.Collectors.toList;

public class PlayerDemo {
    public static void main(String[] args) {
        List<Player> players = Arrays.asList(
                new Player("Justin", 39),
                new Player("Monica", 36),
                new Player("Irene", 6)
        );
        players.stream()
                .filter(player -> player.getAge() > 15)
                .map(Player::getName)
                .map(String::toUpperCase)
                .collect(toList())
                .forEach(out::println);
    }
}

class Player {
    private String name;
    private Integer age;

    public Player(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }   
}
  • 對時間的運算

1.TemporalAmount:TemporalAmount的操做類是Period和Duration。ofPattern()是java.time.format.DateTimeFormatter的靜態方法,對於年、月、星期、日的日期差使用Period類定義,plus()方法能夠接受Duration實例來計算,對於時間計量,類Duration來定義。

2.TemporalUnit:plus()方法另外一重載版本接受java.time.temporal.TemporalUnit實例,java.time.temporal.ChronoUnit是TemporalUnit實做類,使用enum實做,定義了between()等方法。

3.Temporal:

plus(TemporalAmount amount)

plus(long amountToAdd,TemporalUnit unit)

minus(TemporalAmount amount)

minus(long amountToSubtract,TemporalUnit unit)

4.TemporalAccessor:定義了只讀的時間對象讀取操做,實際上Temporal是TemporalAccessor子接口,增長了對時間的處理操做,像是plus()、minus()、with()等方法。

代碼託管


這個代碼量由於我從新弄了一下代碼庫因此更新了兩次文件夾有重複。

上週考試錯題總結

  • 哪一行插入到第9行將致使輸出「abc"?

A .
for (Iterator o : list.iterator(); o.hasNext (); )

B .
for (Iterator o : list)

C .
for (Object o : list.iterator())

D .
for (Object o : list)

答案:D

  • 調用線程的interrupt()方法 ,會拋出()異常對象?

A .
IOException

B .
IllegalStateException

C .
RuntimeException

D .
InterruptedException

E .
SecurityException
答案:DE

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 基於評分標準,我給本博客打分:XX分。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

本週第一次實驗,將書本上的東西運用到了實驗中感受很開心。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 10/10 1/1 10/10
第二週 110/200 1/2 10/20
第三週 150/350 1/3 10/30
第四周 400/750 1/4 15/45
第五週 430/1200 1/5 20/65
第六週 700/2000 1/6 20/85
第七週 700/2700 3/9 30/115

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:XX小時

  • 實際學習時間:XX小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索