2015年11月21日 星期六

Java 學習日誌 019:Intialized Variables


如果一個variable有被宣告(declare)它的特性,但是還沒被賦予價值,例如還沒在一個assignment statement式子中被賦予價值,那我們稱它為uninitialized(未初始化的)。所以,若一個variable要被使用的話,必須被 1. declare(宣告)特性 2. initialize(初始化)價值。

為了避免遺忘這兩個步驟其中之一,一個很好的方式是將這兩個步驟寫在一個式子中,例如:

int count = 0;
double speed = 65.5;
char grade = "A";
int initialCount = 50, finalCount;

由上述第四個例子中可以看出,在一個式子中可以initialze一些variable的同時,不initialize另一些variable。

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年11月17日 星期二

Java 學習日誌 018:Assignment Statement


改變variable的值最直接的方法在之前文章有稍微提過,就是利用assignment statement(指定敘述)。在Java中,等號(=)為一種assignment operator(指派運算子)。一段assignment statement中,會有一個variable在assignment operator(等號)的左手邊,一段敘述在assignment opertor的右手邊,並且也是以分號作為結尾。在assignment operator右手邊敘述的部分,有可能是一個variable、一個數字,或是一段由variable、數字、運算子以及還沒提到的method invocation(方法調用)組成的較複雜的敘述。

一段assignment statement的作用,是指示電腦去運算assignment operator右邊的敘述後,賦予assignmnet operator左邊的variable運算後的結果。以下為assignment statement的三種例子:

totalWeight = oneWeight * numberOfBeans;
temperature = 98.6;
count = count + 2;

第一個例子賦予totalWeight的值為oneWeight裡的數值乘以numberOfBeans裡的數值;第二個例子賦予temperature的值為98.6;第三個例子賦予新的count的值為舊的count的值加2(variable在等號的兩邊都可能出現)。

若一個assignment statement是用作賦予一個variable一個值(例如上述第二個例子),你可以連接數個variable在一個assignment statement中,例如:

number2 = ( number1 = 3);

由於一個assignment statement的運算是由右到左來看,因此也可直接將此式子看作:

number2 = number1 = 3;

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年10月27日 星期二

Java 學習日誌 017:Primitive type


之前我們提過primitive type,但是還沒解釋他的意思,primitive type也稱作type(基本形態),也就是Java用來賦予vabiable基本性質的東西,這些基本的性質有字母、各種範圍的整數、各種範圍的小數,以及是否是真或假的性質。下表為Java所有的primitive type以及他們所能賦予的性質。














習慣上在賦予variable整數的性質會用int小數的性質會用doublechar能賦予variable一個字母的性質;boolean則能賦予variable true(真)或false(假)的性質。

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年10月26日 星期一

Java 學習日誌 016:Variable


在之前的例子裡,我們提過variable(變數),由它的名稱我們可以知道它是還未被定義、非固定不變的,因此要在一個Java程式裡用variable之前,一定都要先宣告(declare)他的特性,簡單講就是要先定義它,以讓你的compiler,以及最終讓你的電腦知道這個variable所持有的特性。舉例來說,以下是在Java程式裡有可能會遇到的兩個對於variable的宣告。

int numberOfBeans;
double oneWeight, totalWeight;

第一個宣告是說numberOfBeans這個variable持有int的特性,也就是整數的特性。int是integer(整數)的縮寫,也是一個能針對後面的名詞賦予整數特性的一種type(primitive type)(基本形態)。而第二個宣告講的是,oneWeight以及totalWeight是擁有double特性的variable,也就是它們是帶有小數的數值。從第二個例子中可以看到,如果一個宣告內有兩個variable以上,這些variable需要用逗號去隔開。而在宣告時需要特別注意的是,他們一樣要用分號做結尾才跳下一行。

Variable在程式裡宣告的位置很彈性,只要是在使用前任何的位置都可以。不過當然,variable宣告的位置最好是在程式易於閱讀的範疇之下考慮,因此,習慣上我們在要使用variable的前一行定義它,或是在代碼塊(程式主體部分)最一開始的時候定義。

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年10月25日 星期日

Java 學習日誌 015:Keyword


有一種特殊的identifier叫做keyword或reserved word。是已經被定義過的名詞,這些名詞就無法再被用來作為variable、class、method等的名稱。以下列出的是Java裡所有的keyword。



























有些名詞,例如之前提過的System、println等,並不是keyword,不過也是已經被定義過的名詞,它們與keyword的不同點是它們可以在被重新定義。但是如果以不同的定義來用這些名詞,很容易造成混淆與錯誤,因此,最好還是把它們當做keyword來對待。

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年10月24日 星期六

Java 學習日誌 014:Identifier


之前我們提過variable(變數),不過還沒解釋如何命名一個variable。要命名一個variable首先要知道的是,variable的名稱是一種identifier(識別字),什麼是identifier呢?Identifier是在寫程式的過程中那些需要自行定義的名稱,所以除了variable之外,還有我們之前提到的class(類別)和method(方法)等,它們的名稱都是identifier。

Identifier基本上只會由三種東西組成,即字母、數字,以及底線符號(_)組成($是除了底線以外會用到的符號,不過只會在特殊情況下使用),並且不能以數字為開頭,舉例來說,以下這行列出的都是有效的identifier。

x   x1   x_1   _abc   ABC123z7   sum   RATE   count   data2   bigBonus

雖然以上列出的名稱都是能被compiler所接受的,但是前五個名稱對於identifier沒有提示或明確的描述,因此沒有後五個來的好。而以下列出的identifier則無法被compiler接納使用。

12   3X   %change   data-1   myfirst.java   PROG.CLASS

上列這串名稱中,前兩個由於以數字開頭所以不被接受,而後面四個則是由於包含了除了字母、數字,以及底線以外的符號,因此也無法用為identifier。

Java是一種能區別大小寫的語言,因此下列三種以相同字母但不同大小寫組成的identifier,可以分別用為三種不同variable的名稱。

rate   RATE   Rate

但是如果在一個程式內用這麼相近的名稱其實也會很容易混淆,而且Java在identifier的命名上有一個不成文的法則,即是第一個字母通常為小寫,並以一個大寫字母來區別一個名稱裡的不同單字,例如

topSpeed   bankRate1   bankRate2   timeOfArrival

在identifier的長度方面,則並沒有限制,compiler甚至能接受一些長的不合理的名稱。

參考資料:Walter Savitch. Absolute Java. 5th ed.

2015年10月23日 星期五

Java 學習日誌 013:程式中的錯誤


瞭解如何寫基本的程式以後,接下來要知道的是,在寫程式時,有時候不小心會出現錯誤,這種錯誤我們稱它為bug,因此除錯的動作也就稱為debugging。而最常見的三種錯誤,為syntax errors、run-time errors,以及logic errors。以下是這三種錯誤的解釋。

一個syntax error指的是句法(或語法、文法、句構)上的錯誤,也就是說在文字、符號的排列、規劃上出現了錯誤,例如說遺漏了一個必須的符號,那就是syntax error。而當犯了syntax error的時候,compiler可以自動偵測出來,並且會列出一條訊息告知你,甚至會跟你說它認為錯誤的地方在哪、出了什麼錯。如果compiler跟你說你犯了一個syntax error,那不用懷疑的一定是犯了這個錯誤,但它說的位置與犯的錯是什麼則不一定都是正確的。

如果一個錯誤是在運算的時候才被偵測出來,那就是run-time error。假如電腦偵測出一個run-time error,則會顯示出一個錯誤的訊息,這個錯誤訊息可能沒有那麼好被理解,但至少它讓你知道程式裡有錯誤。

一個錯誤發生在合理可運行的情況下,則稱為logic error。如果你的程式裡有logic error,他會被成功編譯、運算,並且不會出現任何錯誤的訊息。意思就是說你寫了一段有效的程式,只不過結果並不是你要的。舉例來說,做數學運算時,把加號不小心用成乘號,那就是一個logic error。Logic error是最難被找出來的,因為電腦並不會給你任何偵測到錯誤的訊息。

參考資料:Walter Savitch. Absolute Java. 5th ed.