20155313 2016-2017-2 《Java程序設計》第三週學習總結

20155313 2016-2017-2 《Java程序設計》第三週學習總結

教材學習內容總結

4.1 類與對象

4.1.1 定義類

書本中使用了設計衣服來定義類,一件衣服的設計Clothes定義了color和size兩個變量,即java術語來講,叫做定義兩個值域成員,或叫做定義了兩個對象數據成員。在下面有具體實例運行。html

具體編寫步驟是:java

  1. 定義Clothes類
  2. 創建Clothes實例
  3. 爲個別對象的數據成員指定值
  4. 顯示個別對象的數據或成員值

與此同時書本還介紹了另一種定義構造函數。構造函數是與類名稱同名的方法。下面也有具體實例運行。git

具體編寫步驟是:數組

  1. 定義Clothes類
  2. 定義構造函數
  3. color參數的值制定給這個對象的color成員
  4. 使用指定構造函數創建對象
  5. 顯示個別對象的數據或成員值

以上的兩種Clothes定義類的區別主要是:第一種方法在賦值前先創建了空的Clothes實例,而後在主函數裏進行賦值操做;而第二種方法先在定義類的模塊構造了函數,而後在後面的賦值中直接將對象代入函數完成賦值。app

4.1.2 使用標準類

1.使用java.util.Scanner

在此小節中本書第一次出現了讓用戶進行輸入,以前在學習c語言時,每一個程序在運行時基本都須要用戶進行輸入,再根據程序內容計算而後反饋給用戶(除了一些顯示圖表的程序,例如:顯示楊輝三角、九九乘法表)。在這裏用戶能夠直接再ieda下方的程序框中輸入。下面有猜數字的具體實例。函數

這個java.util.Scanner是一個標準類,是組成Java SE提供的標準API的許多種類之一。因爲是系統自帶的內容,因此在程序中能夠直接使用,不須要像上一節的Clothes同樣去定義。學習

2.使用java.math.BigDecimal

第二種基本類型中使用1.0 - 0.8的結果不是2是由於Java遵照IEEE 754浮點數運算規範,使用分數與指數來表示浮點數,因此致使有無限循環,沒法精確表示,於是形成運算偏差。本節就使用了一個標準類java.math.BigDecimal來解決,以默認的精度進行運算。下面是1.0 - 0.8的實例運行。this

4.1.3 對象指定與相等性

Java並不是徹底的面向對象程序語言,在Java中有兩大類型系統,即基本類型與類類型,因此必須區分=與==運算用於基本類型與類類型的不一樣。.net

當=用於基本類型時,是將值賦值給變量,當==用於基本類型時,是比較兩個變量儲存的值是否相同。設計

int a = 28;
int b = 22;
int c = a;
System.out.println(a == b);    //判斷a與b是否相等,這裏顯示False
System.out.println(a == c);    //判斷a與c是否相等,這裏顯示True

當=用於對象時,是用在指定參考名稱參考某個對象,而==是用在比較兩個參考名稱是否參考同一對象。

BigDecimal a = new BigDecimal("0.1");    //給a賦值0.1,即把a標籤貼給"0.1"
BigDecimal b = new BigDecimal("0.2");    //給b賦值0.1,即把b標籤貼給"0.1",此"0.1"非彼"0.1"
System.out.println(a == b);    //判斷a與b是否綁在同一個對象上,結果是False
System.out.println(a.equal(b));    //判斷a與b的賦值是否相等,結果是True

PS:這裏其實仍是有一點搞不清楚,即兩個"0.1"爲何能區別是不一樣的對象,由於定義的順序不同嗎?

4.2 基本類型打包器

4.2.1 打包基本類型

Java中有兩個類型系統,即基本類型與類類型,使用基本類型目的在於效率,然而更多時候,會使用類創建實例,由於對象自己能夠攜帶更多信息。若是要讓基本類型像對象同樣操做,可使用Long、Integer、Double、Float、Boolean、Byte等類來打包(Wrap)基本類型。具體實例以下。

具體編寫步驟是:

  1. 打包基本類型
  2. 基本類型運算
  3. 操做打包器方法

這個程序中有兩個操做:doubleValue()將打包值以double類型返回,以及compareTo()與另一個對象進行對比。這些都是包含在Integer中的方法,在打包器中能夠直接使用。

4.2.2 自動裝箱、拆箱

J2SE 5.0之後Java提供了自動裝箱和自動拆箱功能。因此能夠這樣打包基本類型和取出打包器中的基本形態信息:

Integer wrapper = 10;    //自動裝箱
int foo = wrapper;    //自動拆箱

4.3 數組對象

4.3.1 數組基礎

數組在Java中就是對象,因此前面介紹過的對象基本性質,在操做數組時也要注意,如參考名稱聲明、=指定的做用、==與!=的比較等。在Java中若是想要一次取出數組中每一個值,方法之一是使用for循環。下面是具體實例。

一維數組使用一個索引存取數組元素,你也能夠聲明二維數組,二維數組使用兩個索引存取數組元素。下面是具體實例。

關於數組的表示,感受java語言和之前學的c語言有不少的共同之處,除了顯示主函數、打印的代碼不一樣以外,我的感受非常十分類似的。

4.3.2 操做數組對象

若是在創建數組前不知道元素值,只知道元素的個數,那可使用new關鍵詞指定長度來創建數組。例如,預先創建長度爲10的數組:

int[] scores = new int[10];

在Java中只要看到new,必定就是創建對象,這個語法表明了數組就是對象。使用new創建數組後,每一個索引元素會有默認值,以下表所示:

數組元素初始值
數據類型 初始值
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
char \u0000
boolean false
null

下面是使用java.util.Arrays(即一種標準類,以前在類的感念中有涉及)中的fill()的方法來設定新建數組的元素值。例如,將每一個學生的成績默認爲60分起:

若是想在new數組中一併指定初始值,能夠這樣撰寫:

int[] scores = new int[] {88, 81, 74, 68, 78, 76, 77, 85, 95, 93};

若是使用new配置二維數組後想要一併指定初始值,則能夠這樣撰寫:

int[][] cords new int[][] {
    {1, 2, 3},
    {4, 5, 6}
};

沒有人規定二維數組必定得是矩陣,也能夠按照下面的方法創建不規則數組:

以上都是示範基本類型創建的數組,接下來介紹類類型創建的數組。下面是使用new關鍵詞創建Integer數組:

Integer[] scores = new Integer[3];

4.3.3 數組複製

若是要進行數組的複製,按照學習c語言的思路,在java中也一樣適用。例如:

int[] score1 = {1, 2, 3, 4, 5};
int[] score2 = new int[score1.length];
for(int i = 0; i < score); i++) {
    score2[i] = score1[i];
}

可是java比c語言更高級的地方就是java內部有更多能夠直接使用的函數,好比這裏可使用的System.arraycopy()方法,這個方法會使用yuan原生方式複製每一個索引元素,比自行使用循環來得快:

int[] score1 = {1, 2, 3, 4, 5};
int[] score2 = new int[score1.length];
System.arraycopy(scores1, 0, scores2, 0, scores1.length);

同時書本還介紹了更方便得方法Arrays.copyOf()方法,能夠不用零星創建新數組,Arrays.copyOf()會幫你創建。

4.4 字符串對象

4.41 字符串基礎

在Java中,字符串是java.lang.String實例,用來打包字符數組。能夠用""包括一串字符來創建字符串:

String name = "justin";
System.out.println(name);    //顯示justin
System.out.println(name.length());    //顯示字符串長度爲6
System.out.println(name.charAt(0));    //顯示第一個字符j
System.out.println(name.toUpperCase());    //顯示JUSTIN

若是要將字符串轉換爲整數、浮點數等基本類型,可使用下面表中類提供的剖析方法。

將字符串剖析爲基本類型
方法 說明
Byte.parseByte(number) 將number剖析爲byte整數
Short.parseShort(number) 將number剖析爲Short整數
Integer.parseInteger(number) 將number剖析爲Inte整數
Long.parseLong(number) 將number剖析爲Long整數
Float.parseFloat(number) 將number剖析爲Float浮點數
Double.parseDouble(number) 將number剖析爲Double浮點數

下面這個實例可讓用戶輸入整數,輸入後會計算全部整數總和並顯示:

這個程序中使用了以前章節提到過的import java.util.Scanner,便可以輸入數據的標準類。

4.2.2 字符串特性

以Java的字符串來講,就有一些必須注意的特性:

  • 字符串常量與字符串池
  • 不可變更字符串
1.字符串常量與字符串池

若是像比較對象實質內容是否相同,不要使用==,要使用 equal()。一樣地,若是想要比較字符串實際字符內容知否相同,不要使用==,要使用 equal()。下面的程序片斷執行結果都是true:

String name1 = "Justin";
String name2 = "Justin";
String name3 = new String("Justin");
String name4 = new String("Justin");
System.out.println(name1.equals(name2));
System.out.println(name1.equals(name3));
System.out.println(name3.equals(name4));
2.不可變更字符串

在Java中,字符串對象一旦創建,就沒法更改對象中任何內容,對象上沒有任何方法能夠更改字符串內容。可是可使用+鏈接字符串。例如:

String name1 = "Java";
String name2 = name1 + "World";
System.out.println(name2);

運行的結果就會顯示JavaWorld。

對象封裝

public爲公開類,在構造函數上聲明public class{}表示其餘包中的類能夠調用這個構造函數,private定義私有數據類型。用在成員變量前private class{}。

構造函數:在定義類時,可使用構造函數定義對象創建的初始流程。構造函數是與類名稱同名,無需聲明返回類型的方法。示例:

class name{
    int a=0;
    String strs;
    name(int a,String strs){
        this.a=a;
        this.strs=strs;
    }
}

重載構造函數: 能夠定義多個構造函數,只要參數類型不一樣或者個數不一樣。

public class name {
    int a=1;
    String strs ="strs";
    public name(int a){
        if(a>0){
            this.a=a;
        }
    }
    public name(int a ,String strs ){
        if(a>0){
            this.a=a;
        }
        if(strs !=null){
            this.strs=java;
        }
    }
}

static類成員被聲明爲static的成員,不會讓個別對象擁有,而屬於類。在static方法或區塊中,不能出現this關鍵字。static方法中不能使用非static數據或方法成員。

不定長度自變量
int...聲明的變量實際上展開爲數組;在使用不定長度自變量時,必須是參數列中的最後一個,使用兩個以上不定長度自變量也是不合法的,使用對象的不定長度自變量不能和方法相同。

代碼託管

  • 代碼提交過程截圖:
    • 運行 git log --pretty=format:"%h - %an, %cd : %s" 並截圖
  • 代碼量截圖:
    • 運行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 並截圖

上週考試錯題總結

  • 填空:Linux Bash中,查找當前目錄中前天建立的Java文件的命令是(find . –name *.java -ctime 2)。
  • 判斷: Java中, 數字235 的類型是 int 。(OK)
  • 填空:~0b1011的十進制值是(-12)
  • 判斷:System.out.printf("%b", 11)的輸出結果是0b1011 (X)
  • 判斷:Java中,非零數字等價於true.(X)
  • 填空 :0x10%9 的結果是( 7 )
  • 填空 :0x10&9 的結果是( 0 )
  • 填空:運行p69 Odd.class的命令爲(java cc.openhome.Odd)。
  • 填空:編譯p60 Comparison.java的命令爲(javc –d xxx Comparison.java )
  • 判斷:P64 Shift.java中第三個printf的輸出結果是」2的2次方:4」。(X)

學習進度條

代碼行數(新增積) 博客量(新增積) 學習時間(新增積) 重要成長
目標 5000行 30篇 400小時
第三週 168/200 1/2 15/20
  • 計劃學習時間:20小時

  • 實際學習時間:15小時

參考資料

相關文章
相關標籤/搜索