20155326劉美岑2016-2017-2《Java程序設計》第三週學習總結

20155326劉美岑2016-2017-2《Java程序設計》第三週學習總結

教材學習內容總結

基本類型和類類型

  • 基本類型:第三章中講述的那幾種,short、long、int、byte、double、char、boolean等這些。
  • 類類型:指class類型,把一些基本的類型和方法整合到一塊兒,體現出了類的封裝特性,便於實現模塊化。

對象和類

  • 使用Java撰寫程序幾乎都在使用對象,要產生對象必須先定義類,類是對象的設計圖,對象是類的實例。

定義類

  • 類定義時使用class關鍵詞,創建實例要使用new關鍵詞。引用書上例子:衣服的型號與顏色java

  • 代碼和運行結果以下:
  • 程序示例git

class Clothes 
        {
            String color;
            char size;
        }

        public class Field
        {
            public static void main(String[] args)
            {
            Clothes sun = new Clothes();
            Clothes spring = new Clothes();
            sun.color = "red";
            sun.size = 'S';
            spring.color = "green";
            spring.size = 'M';
            System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
            System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
            }
        }

-運行結果spring

使用class關鍵字定義類,在Field.java中定義了兩個類,一個是非公開的Clothes類,另外一個是公開(public)的Field類(文檔中的主文檔名必須與公開類名稱一致)。Clothes類中定義了colorsize兩個變量,叫做定義兩個值域成員或定義兩個數據對象成員。Clothes sun = new Clothes()爲將sun名稱參考至新建對象,其中Clothes sun叫做聲明參考名稱、參考變量或直接叫參考,=是指定,new關鍵字是創建對象實例。有幾個類就會產生幾個.class文檔。小程序

使用標準類:

  • 標準API能夠省去撰寫程序時從新打造基礎的需求,包名爲java開頭的類表示標準API提供的類。
  • java.util.Scanner取得用戶輸入
    (1)、使用java.util.Scanner,將字符轉化爲整數。
  • 代碼和運行結果以下:
//使用標準類
    package cc.openhome;
import java.util.Scanner;

public class Guess {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);//創建Scanner實例
        int number=(int)(Math.random()*10);
        int guess;

        do {
            System.out.print("猜數字(0~9):");
            guess = scanner.nextInt();//取得下一個整數
        }while(guess!=number);
        System.out.println("猜中了...XD");
    }
}

結果截圖:
數組

  • 在java中,當經過newScanner(System.in)建立一個Scanner,控制檯會一直等待輸入,直到敲回車鍵結束,把所輸入的內容傳給Scanner,做爲掃描對象。Scanner對每一個基本類型,都會有個對應的nextxxx()方法,若是直接取得上一個字符串(以空格或換行分隔),則使用next(),若是想取得用戶輸入的整行文字,則使用nextLine()(以換行分隔)
    (2)、使用java.math.BigDecimal,獲得更好的精確度。
  • 代碼和運行結果以下:

  • 建立BigDecimal的方法之一是使用字符串,BigDecimal在建立時會剖析傳入字符串,以默認精度進行接下來的運算。BigDecimal提供有plus()、subtract()、multiply()、divide()等方法,能夠進行加減乘除等運算,這些方法都會返回表明運算結果的BigDecimal。

對象指定與相等性

  • 當用於基本類型時,=是將值複製給變量,==是比較兩個變量存儲的值是否相同。
  • 當用於類類型時,=是用在指定參考名稱參考某個對象,==是用在比較兩個參考名稱是否參考同一對象。
  • 代碼和運行結果以下:
package cc.openhome;

import java.math.BigDecimal;

public class Compare {

    public static void main(String[] args) {

        BigDecimal a=new BigDecimal("0.1");

        BigDecimal b=new BigDecimal("0.1");

        BigDecimal c=a;

        System.out.println(a==b);

        System.out.println(a==c);

        System.out.println(a.equals(b));

    }

}

  • 程序中使用a==b,就是在問,a名牌綁的對象是否就是b名牌綁的對象?答案「不是」。程序中使用a.equals(b),就是在問,a名牌綁的對象與b名牌綁的對象,實際上內涵值是否相同,答案「是」。

基本類型打包

  • 基本類型打包器主要目的是將基本類型打包在對象之中,就像是將基本類型看成對象操做。
    基本類型打包器都是歸類於java.lang包中。
    Integer提供compareTo()方法,可與另外一個Integer對象進行比較,若是打包值相同就返回0,小於就返回-1,大於就返回1。
    可用Number類來自動裝箱。
    null表明一個特殊對象,任何類聲明的參考名稱均可以參考至null,表示該名稱沒有參考至任何對象實體。
  • 代碼和運行結果以下:
package cc.openhome;

public class IntegerDemo {
    public static void main(String[] args) {
        int data1=10;
        int data2=20;
        Integer wrapper1=new Integer(data1);
        Integer wrapper2=new Integer(data2);
        System.out.println(data1/3);
        System.out.println(wrapper1.doubleValue()/3);
        System.out.println(wrapper1.compareTo(wrapper2));
    }
}

數組

  • 數組打印:數組就像是一個有不少小隔間的容器,每一個小隔間能夠放入一個元素,例如在數組中存入六個數字,並打印出來app

  • 代碼和運行結果以下:dom

//不規則二維數組

package cc.openhome;

public class IrregularArray {

    public static void main(String[] args) {
        int[][] arr=new int[2][];//聲明arr參考的對象會有兩個索引
        arr[0]=new int[]{1,2,3,4,5};//arr[0]是長度爲5 的一維數組,想在new數組中一併指定初始值,沒必要指定數組長度。
        arr[1]=new int[]{1,2,3};//arr[1]是長度爲3的一維數組。
        for(int[] row:arr){
            for(int value:row){
                System.out.printf("%2d",value);
            }
            System.out.println();
        }
    }

}

  • 數組複製:System.arraycopy()的五個參數分別是來源數組、來源起始索引、目的數組、目的起始索引、複製長度。Arrays.copyOf()能夠創建新數組,第二個參數是指定創建的新數組長度。ide

  • 代碼和運行結果以下:模塊化

package cc.openhome;

import java.util.Arrays;

public class CopyArray {

    public static void main(String[] args) {
        int[] scores1={88,81,74,68,78,76,77,85,95,93};
        int[] scores2=Arrays.copyOf(scores1,scores1.length);
        for(int score:scores2){
            System.out.printf("%3d",score);
        }
        System.out.println();
        scores2[0]=99;//不影響score1參考的數組對象
        for(int score:scores1){
            System.out.printf("%3d",score);
        }
        System.out.println();
        for(int score:scores2){
            System.out.printf("%3d",score);
        }
    }
}

  • 淺層複製:僅將每一個索引處所參考的對象給複製的參考,並無複製出對象。
  • 深層複製:連同對象一同複製,必須自行操做。

字符串對象:

  • 由字符組成的文字符號稱爲字符串。因爲在java中是對象,因此可使用length()取得字符串長度,使用charAt()指定取得字符串中某個字符,索引從0開始,使用toUpperCase將本來小寫的字符串內容轉爲大寫的字符串內容。字符串的本質是打包字符數組的對象,是java.lang.String類的實例。length()是取得字符串長度,charAt()是取得字符串中某個字符,toUpperCase()是將本來小寫的字符串內容轉爲大寫的字符串內容。用 "" 寫下的字符串稱爲字符串常量,使用 + 鏈接字符串會產生新的String實例。以""包括的字符串,只要內容相同(序列、大小寫相同),不管在程序代碼中出現幾回,JVM都只會創建一個String實例,並在字符串池中維護。
    用""寫下的字符串稱爲字符串常量。函數

  • 代碼和運行結果以下:

package cc.openhome;

import java.util.Scanner;

public class Sum {
   
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        long sum=0;
        long number=0;
        do{
            System.out.print("輸入數字: ");
            number=Long.parseLong(scanner.nextLine());
            sum+=number;
        }while(number!=0);
        System.out.println("總和:"+sum);
    }
}

封裝

  • 封裝能夠理解爲把方法封在類中,用打時候能夠直接拿,就比如你要上學,類就是書包而方法就是書,要用方法打時候直接從書包中拿書就行。
  • 代碼和運行結果以下:
package cc.openhome;

class CashCard{
 
    String number;
    int balance;
    int bonus;
    CashCard(String number,int balance,int bonus){
        this.number=number;
        this.balance=balance;
        this.bonus=bonus;
    }
}

public class CardApp {
   
    public static void main(String[] args) {
        CashCard[] cards={
                new CashCard("A001",500,0),
                new CashCard("A002",300,0),
                new CashCard("A003",1000,1),
                new CashCard("A004",2000,2),
                new CashCard("A005",3000,3)

        };
        for(CashCard card:cards){
            System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
        }
    }
}

函數

  • 函數又稱方法,是定義在類中的具備特定功能的一段獨立的小程序。
  • 構造函數時若要將某參數的值指定給同名參數時,要使用this表示。
    代碼以下:
  • 格式:

    修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2,...)
      {
      執行語句;
      return 返回值;
      }
  • 返回值類型函數運行後結果的數據類型,return結束函數,返回值返回給調用處,形式參數變量,存儲調用函數時傳遞給函數的實際參數,實際參數傳遞給形式參數的具體數值。
  • 不用返回值的函數能夠用void聲明。
  • 程序示例

class Clothes2
        {
            String color;
            char size;
            Clothes2(String color, char size)
            {
                this.color=color;
                this.size=size;
            }
        }

        public class Field2
        {
            public static void main(String[] args)
            {
                Clothes2 sun = new Clothes2("red",'S');
                Clothes2 spring = new Clothes2("green",'M');
                System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
                System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
            }
        }

打包

  • 使用Long、Integer、Double、Float、Boolean、Byte等類來打包基本類型,將基本類型看成對象操做。J2SE5.0後能夠自動裝箱、拆箱。

    數組

  • 是同一類型數據的集合,是一個容器。它會自動從0開始編號。
  • 格式:
    元素類型[] 數組名=new 元素類型[元素個數或數組長度];
    元素類型[] 數組名=new 元素類型[]{元素,元素,...};
    元素類型[] 數組名={元素,元素,...};
  • 數組一被定義即有默認初始值。

    加強式for循環

for(int score:scores)
        {
        System.out.printf("學生分數:%d %n",scores);
        }

二維數組

public class XY
        {
             public static void main(String[] args)
             {
                  int[][] cords={
                                {1,2,3},
                                {4,5,6}
                                };
                 for(int[] row : cords)
                {
                    for(int value : row)
                    {
                        System.out.printf("%2d",value);
                    }
                    System.out.println();
                }

            }
         }

static類:

被聲明爲static的成員,不會讓個別對象擁有,而是屬於類,被聲明爲static的方法,是將類名稱做爲名稱空間,能夠經過類名稱和"."運算符來調用static。
因爲static成員是屬於類,而非個別對象,因此在static成員中使用this,會是一種語意上的錯誤。
靜態變量必須在初始化以前進行賦值,不然會報錯。靜態方法一般都是被常用的方法,不須要每次都從新實例化,提升工做效率。

  • 代碼和運行結果以下:
package cc.openhome;//static應用


import java.util.Scanner;

import static java.lang.System.in;

import static java.lang.System.out;

public class ImportStatic {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(in);
        out.print("請輸入姓名:");
        out.printf("%s 你好! %n",scanner.nextLine());
    }
}

不定長度自變量、內部類與傳值調用:

  • 類中定義類,稱爲內部類。能夠定義在類區塊中。
    要使用不定長度自變量,聲明參數列時要在類型關鍵字後加上...,方法上聲明的不定長度參數必須是參數列最後一個。
    Java中只有傳值調用。

代碼調試中的問題和解決過程

課本上的代碼敲上去以後在終端卻運行不了,出現了下圖中的錯誤。可是在IDEA中卻能夠運行。

代碼託管

  • 代碼提交過程截圖:

  • 代碼量截圖:

上週考試錯題總結

  • CH03 判斷: Java中, 數字235.00的類型是float. (X)
  • CH03 填空:~0b1011的十進制值是(-12)
    這道題老師在課後講了兩遍,涉及到負數的補碼反碼,聽了之後會作了。
  • CH03 判斷:System.out.printf("%b", 11)的輸出結果是0b1011 (X)
  • 這道題是由於沒有好好看書,%b輸出的只多是true或false。
  • CH03 填空 :0x10%9 的結果是( 7 )
  • CH03 填空 :0x10&9 的結果是(0)這兩道題是運算題,因爲以前沒仔細看書因此不知道怎麼作,在室友的友情教導下知道怎麼作了
  • CH03 填空:編譯p60 Comparison.java的命令爲(javc –d xxx Comparison.java )

    學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 20篇 400小時
第一週 20/20 1/1 20/20 安裝了各類程序
第二週 106/126 1/2 25/45 掌握了託管代碼
第三週 197/200 1/3 30/30 大致瞭解java的對象和對象封裝
相關文章
相關標籤/搜索