《移動平臺開發實踐》第三週學習任務

20189230楊 2018-2019-2 《移動平臺開發實踐》第3周學習總結

學習《Java和Android開發學習指南(第二版)》第五、六、八、9章——

第5章核心類
5.1java.lang.Object
1.java.lang.Object類表示一個Java對象。實際上,全部的類都直接或間接地派生自這個類。
5.2java.lang.String
1.java.lang.String是最常使用的一個類,而且絕對也是最重要的類之一。一個String對象是常量,一旦建立了,不能修改其值。
2.一般將一個字符串字面值賦值給一個String引用變量,而非用關鍵字構建一個String引用變量。
5.2.1比較兩個字符串
1.使用==操做符比較兩個String對象s1和s2。若相同,(s1==s2)計算爲true;若不一樣,(s1==s2)計算爲false。
5.2.2字符串的字面值
1.可使用加號把兩個字符串字面值鏈接起來:「」+「」;也能夠將一個String和一個基本數據類型或其餘的對象鏈接起來:「」+3
5.2.6String類的方法
1.valueOf方法將一個基本類型、一個字符數組或Object的一個實例轉換爲一個字符串表示。例如,以下的代碼返回字符串「23」:String.valueOf(23)。
2.Format方法容許你傳遞任意數目的參數。要指定一個參數,使用%s表示法,表示數組中的下一個參數。例如,以下是對printf方法的一次方法調用:java

String firstName=「John」;
String Lastname=「Adams」;
System.out.format(「First name: %s. Last name: %s」,
firstName,lastName);

5.3 java.lang.StringBuffer和java.lang.StringBuilder
1.String對象是不可變的。最好使用java.lang.StringBuffer和java.lang.StringBuilder類。一旦完成了對字符串的操做,能夠將一個StringBuffer或StringBuilder對象轉換爲一個String對象。StringBuffer類是爲了可變的字符串而單獨使用的,方法同步,適合在多線程環境中使用。StringBuilder是StringBuffer的異步版本。
5.5java.lang.Class
1.代碼清單5.1 ClassDemo類android

package app05;
public class ClassDemo{
    public static void main(String[] args){
        String country="Fiji";
        Class myClass=country.getClass();
        System.out.println(myClass.getName());
        Class klass=null;
        try{
            klass=Class.forName("app05.Test");
        }catch(ClassNotFoundException e){
        }
        if(klass!=null){
            try{
                Test test=(Test) klass.newInstance();
                test.print();
            }catch (IllegalAccessException e){
            }catch (InstantiationException e){

            }
        }
    }
}

5.6 java.lang.System
1.System類的三個字段是out、in和err:
out字段表示標準的輸出流;
err字段也表示一個PrintStream對象,默認狀況下,輸出也會從當前調用Java程序的地方通向控制檯。其目的是顯示那些應該當即引發用戶注意的錯誤消息;
in字段表示輸入標準流。
2.代碼清單5.2 InputDemo類git

public class Employee{
  public int age;
  public double salary;
  public Employee(){
  }
    public Employee(int ageValue, double salaryValue){
      age=ageValue;
      salary=salaryValue;
    }
  }

5.7 java.util.Scanner
1.可使用Scanner來獲取鍵盤輸入,在實例上調用next方法。next方法會緩存用戶從鍵盤或其餘設備輸入的字符。
2.代碼清單5.3 使用Scanner來接受用戶輸入數據庫

package app05;
import java.util.Scanner;

public class ScannerDemo{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        while(true){
            System.out.print("What's your name?");
            String input=scanner.nextLine();
            if(input.isEmpty()){
            break;
            }
            System.out.println("Your name is"+input+".");
        }
        scanner.close();
        System.out.println("Good bye");
    }
}

第6章 數組
6.1 概覽
1.每次建立一個數組,在後臺,編譯器都要建立一個對象以容許:
(1)經過length字段來獲取數組中的元素的數目。
(2)經過指定一個索引來訪問每個元素。
一個數組是一個Java對象。
6.5 查找一個數組
1.代碼清單6.1 一個二分查找的示例vim

package app06;
import java.util.Arrays;

public class BinarySearchDemo{
    public static void main(String[] args){
        int[] primes={2,3,5,7,11,13,17,19};
        int index=Arrays.binarySearch(primes,13);
        System.out.println(index);
        index=Arrays.binarySearch(primes,4);
        System.out.println(index);
    }
}

代碼清單6.1中的BinarySearchDemo類使用了一個int類型的數組,它包含了前8個素數。傳入13做爲查找鍵,將會返回5,由於13是該數組中的第6個元素,其索引爲5.傳入4做爲查找鍵,將會找不到匹配,該方法返回-3.這是-2減去1的結果。若是要將該鍵插入到數組中的話,它本應該插入到索引2的位置。
6.6 給main方法傳入一個字符串數組
1.代碼清單6.2 訪問main方法的參數數組

package app06;
public class MainMethodTest{
    public static void main(String[] args){
        for (String arg:args){
        System.out.println(arg);
        }
    }
}

6.7 多維數組
1.代碼清單6.3 一個多維數組緩存

package app06;
import java.util.Arrays;

public class MultidimensionalDemo{
    public static void main(String[] args){
        int[][] matrix=new int[2][3];
        for(int i=0;i<2;i++){
            for(int j=0;j<3;j++){
                matrix[i][j]=j+i;
            }
        }
        for(int i=0;i<2;i++){
            System.out.println(Arrays.toString(matrix[i]));
            
        }
    }
}

第8章錯誤處理
8.1 捕獲異常
1.try一般和catch和finally使用。錯誤處理的步驟能夠歸納以下:
(1)將可能致使一個錯誤的代碼隔離到一個try語句塊中。
(2)對於每個單個的catch語句塊,編寫出若是try語句塊中發生特定類型的一個異常,將要執行的代碼。
(3)在finally語句塊中,編寫出不論是否發生錯誤都將運行的代碼。
2.代碼清單8.1 NumberDoubler類多線程

package app08;
import java.util.Scanner;

public class NumberDoubler{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        String input=scanner.next();
        try{
            double number=Double.parseDouble(input);
            System.out.printf("Result:%s",number);
        }catch(NumberFormatException e){
            System.out.println("Invalid input.");
        }
        scanner.close();
    }
}

[](https://img2018.cnblogs.com/blog/1607929/201903/1607929-20190316113255047-589450971.pngapp

第9章 操做數字
9.1 裝箱和拆箱
1.將一個基本類型轉換爲一個包裝類對象,稱爲裝箱(boxing);從一個包裝類對象轉換爲基本類型,稱爲拆箱(unboxing)。
裝箱——

Integer number=3;//assign an int to Integer

拆箱——

Integer number=new Integer(100);
int simpleNumber=number;

9.2 數字解析
1.數字解析的目的是將一個字符串轉換爲一個數字基本類型。若是解析失敗,例如,因爲字符串不是一個數字或者是一個超出了指定範圍的數字,程序將會拋出一個異常。
2.代碼清單9.1 解析數字(NumberTest.java)

package app09;
import java.util.Scanner;

public class NumberTest{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        String userInput=scanner.next();
        try{
           int i=Integer.parseInt(userInput);
           System.out.println("The number entered:"+i);
        }catch(NumberFormatException e){
        System.out.println("Invalid user input");
        }
    }
}

9.3 數字格式化
1.代碼清單9.2 NumberFormatTest類

package app09;
import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatTest{
    public static void main(String[] args){
        NumberFormat nf=NumberFormat.getInstance(Locale.US);
        System.out.println(nf.getClass().getName());
        System.out.println(nf.format(123445));
    }
}

9.6 計算貨幣
1.float和double都不適合於計算貨幣。
2.代碼清單9.3 使用BigDecimal

package app09;
import java.math.BigDecimal;

public class BigDecimalDemo{
    public static void main (String[] args){
        double balance=9.99;
        balance-=0.10F;
        System.out.println(balance);

        BigDecimal balance2=BigDecimal.valueOf(9.99);
        BigDecimal accountFee=BigDecimal.valueOf(.1);
        BigDecimal r=balance2.subtract(accountFee);
        System.out.println(r.doubleValue());
    }
}

9.7 生成隨機數
1.代碼清單9.4 隨機數生成器

package app09;
public class RandomNumberGenerator{
    public int generate(){
        double random=Math.random();
        return(int)(random*10);
    }
    public static void main(String[] args){
        RandomNumberGenerator generator=
            new RandomNumberGenerator();
        for(int i=0;i<10;i++){
            System.out.println(generator.generate());
        }
    }
}

教材學習中的問題和解決過程

  • 問題:對Java中錯誤和異常的部分知識掌握不清
  • 問題解決方案:在網上查找相關資料並學習總結:
    Java把異常看成對象來處理,並定義一個基類java.lang.Throwable做爲全部異常的超類。在Java API中已經定義了許多異常類,這些異常類分爲兩大類,錯誤Error和異常Exception。Java異常層次結構圖以下圖所示:

從圖中能夠看出全部異常類型都是內置類Throwable的子類,於是Throwable在異常類的層次結構的頂層。
接下來Throwable分紅了兩個不一樣的分支,一個分支是Error,它表示不但願被程序捕獲或者是程序沒法處理的錯誤。另外一個分支是Exception,它表示用戶程序可能捕捉的異常狀況或者說是程序能夠處理的異常。其中異常類Exception又分爲運行時異常(RuntimeException)和非運行時異常。
Java異常又能夠分爲不受檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。
Error:Error類對象由 Java 虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操做無關。例如,Java虛擬機運行錯誤(Virtual MachineError),當JVM再也不有繼續執行操做所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)通常會選擇線程終止;還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、連接錯誤(LinkageError)。這些錯誤是不可查的,由於它們在應用程序的控制和處理能力以外,並且絕大多數是程序運行時不容許出現的情況。對於設計合理的應用程序來講,即便確實發生了錯誤,本質上也不該該試圖去處理它所引發的異常情況。在Java中,錯誤一般是使用Error的子類描述。
Exception:在Exception分支中有一個重要的子類RuntimeException(運行時異常),該類型的異常自動爲你所編寫的程序定義ArrayIndexOutOfBoundsException(數組下標越界)、NullPointerException(空指針異常)、ArithmeticException(算術異常)、MissingResourceException(丟失資源)、ClassNotFoundException(找不到類)等異常,這些異常是不檢查異常,程序中能夠選擇捕獲處理,也能夠不處理。這些異常通常是由程序邏輯錯誤引發的,程序應該從邏輯角度儘量避免這類異常的發生;而RuntimeException以外的異常咱們統稱爲非運行時異常,類型上屬於Exception類及其子類,從程序語法角度講是必須進行處理的異常,若是不處理,程序就不能編譯經過。如IOException、SQLException等以及用戶自定義的Exception異常,通常狀況下不自定義檢查異常。

Error和Exception的區別:Error一般是災難性的致命的錯誤,是程序沒法控制和處理的,當出現這些異常時,Java虛擬機(JVM)通常會選擇終止線程;Exception一般狀況下是能夠被程序處理的,而且在程序中應該儘量的去處理這些異常。

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

  • 問題1:不會使用JDB調試Java程序
  • 問題1解決方案:
    Linux Bash下調試代碼:在相應文件夾下選擇在終端打開——用vim生成HelloJDB.java——直接javac -g -d HelloJDB.java——java HelloJDB
    調試基礎——
    方法斷點:stop in HelloJDB.main;stop at HelloJDB:12
    行斷點:stop in HelloJDB.main-run-locals-step(next)-locals-print i-print j-list
    條件斷點:
    臨時斷點:
    使用:jdb -classpath .:./bin HelloJDB 調試程序;JDB不支持條件斷點和臨時斷點
    實例:類的調試-遞歸學習

  • 問題2:不會鏈接數據庫
  • 問題2解決方案:(1)數據庫鏈接測試

(2)訪問數據庫表-封裝新增留言信息-測試:

[代碼託管]

https://gitee.com/EvelynYang/20189230/tree/master/src

statistics.sh腳本運行結果的截圖

上週考試錯題總結

  • 11.若是有如下程序片斷:
    public class Some{
    private Some some;
    private Some(){}
    public static Some create(){
    if(some=null){
    some = new Some():
    }
    return some;
    }
    }
    如下描述正確的是
    A .編譯失敗
    B .客戶端必須new Some()產生Some實例
    C .客戶端必須new Some.create()產生Some實例
    D .客戶端必須Some.create()產生Some實例
    正確答案: D 個人答案: A
  • 15.若是有如下程序片斷:
    public class Some{
    public int x;
    public Some(int x){
    this.x=x;
    }
    }
    如下描述正確的是
    A .new Some(10)建立對象後,對象成員x值爲10
    B .new Some(10)建立對象後,對象成員x值爲0
    C .Some s = new Some(10)後,可以使用s.x取值
    D .編譯失敗
    正確答案: A 個人答案: D

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 1/3 18/38
第三週 500/1000 1/4 38/76

參考資料

相關文章
相關標籤/搜索