Java學習之路03—標識符、關鍵字、變數概念


架構圖

前言

Java程式是一系列對象的集合,而對象之間透過彼此之間調用方法來達到開發目的,因此在認識Java程式前需要特別注意幾個專有名詞:

  1. 類(class): 一個抽象的模板,例如人,他有身高、體重等屬性,有說話、跳舞等動作
  2. 對象(object): 一個類的實例,例如美國人、歐洲人等
  3. 方法(method): 包在類當中的函數,可以代表該類的行為,例如人會說話。一個類可以擁有多個方法
  4. 實例變數(Instance variables): 每個類都有專屬的變數,並且可以擁有多種不同變數

接著來看看一個簡單的java程式,其中標識符是對所有需要名字的組成部分的通稱,關鍵字是java為了特殊目的保留的字段,不開放給開發者使用,變數是一個用來儲存變動數值的內存記憶體名稱

如果有學過其他程式語言的朋友應該可以看到幾分相似之處:


標識符

Java標識符是package,class,interface,method或變數名的總稱。而好的命名必須要能明確反映出作用。不過在在正確命名前我們需要了解那些命名是合法的哪些又是非法的

合法命名

例如以下的例子,可以使用英文大小寫(大小寫有別)、數字、下滑線、美元符等特殊字元

  • Hello
  • hello
  • hello123
  • _hello_
  • haha\$\$\$haha
  • Public(首字母大寫)
  • Void

非法命名

但是但是,知道可以用英文字母、數字、特殊字元來表示並不代表沒有限制,例如不能以數字開頭、避免使用關鍵字予保留字、名稱之間不能有空白等

  • class
  • void
  • 1hello
  • abc 123

關鍵字

關鍵字是對編譯器有特殊用意的詞,這些關鍵字代表的意思會在後面介紹,我們先熟悉幾個常見的就可以
例如

  • package
  • public
  • class
  • static
  • void

保留字是雖然現在沒有作為關鍵字,但是在以後版本說不定會進行更新,例如等

  • goto(危險的傢伙)
  • const

不管是關鍵字還是保留字,在做標識符命名時應該避免使用

下面的表格是常見的關鍵字表,不用特別去背,用到的時候自然會記得,或者看編輯器是否有highlight就知道了

abstractbooleanbreakbytecasecatch
charclasscontinuedefaultdodouble
elseextendsfalsefinalfinallyfloat
forifimplementsimportnativeint
interfacelonginstanceofnewnullpackage
privateprotectedpublicreturnshortstatic
superswitchsynchronizedthisthrowthrows
transienttruetryvoidvolatilewhile

變數

變數是用來儲存不斷改變數值的一小塊記憶體區塊的總稱,我們在編寫java程式時需要注意三個重點,分別是

int i=10;
  • 變數類型(int)
  • 變數名(i)
  • 變數值(10)

因為變數也是標識符的一種,因此他的命名也具有相同的規範性,同時變數的命名有專屬於它的一套特別規則

駝峰命名法
假如變數只有單一一個詞,那麼變數名必須要全部小寫
例如: age

若該變數名是由兩個單詞組成那麼第一個單詞小寫,第二個單詞首字母大寫
例如: lastDay

好的單詞需要簡短有力,讓其他開發者一看就知道它代表的意思,並且可以清楚區分他是類、方法或是變數

class命名規則

Pascal命名法
Pascal命名法是針對類的命名法,他要求首字母必須大寫
例如:

package com.imooc;

public class Hello{

    public static void main(String[] args) {
        int a = 10;
        System.out.println(a);
    }
}

基本變數類型

java主要的變數類型大概可以用下圖來表示,本篇將會大致介紹基本變數類型的基礎,詳細變數的操作會在後篇提及

基本變數類型的學習重點在於變數存儲範圍以及變數存儲代表的含意,學習使用不同變數類型目的在於依照場合使用最適合變數

變數在使用前一定要進行初始化

下表示java不同變數類型的範圍以及含意:

變數類型意思佔用位元組
byte字節型1
short短整數型2
int整數型4
long長整數型8
float單經度浮點數4
double雙精度符點數8
char字元型2
boolean布林型1

可以將儲存範圍小的變數賦值給儲存範圍大的變數,反過來則不行,學過相關程式語言的朋友應該也理解這個概念

float f=123.23f;
double d;
d=f;

整數

整數的範圍
整數類型依照儲存大小從小到大分別為,儲存範圍如下表:

類型最小值最大值
byte-128127
short-3276832767
int-2,147,483,6482,147,483,647
long-9,223,372,036,854,775,8089,223,372,036,854,775,807

整數的表達方式
在java程式中可以用簡單的8, 10, 16進位來表達整數值

  • 8進制: 0開頭
    • 012
    • 079
    • 067
  • 10進制
    • 123
    • 78
  • 16進制: 0x開頭
    • 0x3c
    • 0xabc
    • 0xabcL/0xabcl(long類型限定後綴)
byte
  • 變數長度為1個byte
  • 主要用來代替整,節約空間用
  • 有符號
byte b1 = 127;
byte b2 = -128;
short
  • 變數長度為2個bytes
  • short類型也可以用來代替整數,節約空間
  • 有符號
short s1 = 123;
short s2 = -321;
int
  • 變數長度為4個bytes
  • 一般整型常數預設為int類型
  • 最常見的整數類型
  • 有符號
int i = 2147483647;
int i = 0;
long
  • 變數長度為8個bytes
  • 通常用來儲存非常長的整數(大型系統)
  • 需要在變數後面加上後綴
  • 有符號
long i = 2147483648; // 沒有後綴的情況下,預設是int類型,編譯會出錯
long l = 123456L; // 後綴L或l可以代表long類型,不過通常會寫大寫以免l與1混淆

byte與short不用加上後綴
在java中常數預設是int類型,也就是說整數範圍在-2,147,483,648~2,147,483,647
如果使用long賦值時整數值超出,就要告訴編譯器這個常數是long型。相反的byteshort的範圍均在int之內,所以不需要增加後綴來增加常數表達長度,不過要注意賦值時不要超過宣告的變數範圍,不然就要使用轉型

浮點數

具有小數點的變數類型,常用於高精度計算,如果沒有特定後綴,預設會將浮點數類型宣告成double,這點要特別注意

float f1 = 123.456; // 錯誤,應該改成
float f2 = 123.456f;
double d1 = 123.456d // 大小寫沒有限制
double d2 = 123.456D;

儲存範圍如下表:

類型最小數最小精度最大正整數
float-3.40E+381.4E-453.40E+38
double-1.79E+3084.9e-3241.79E+308

科學記號表示法
我們可以使用科學記號來表示浮點數

double d1 = 1.3e10;
double d2 = 1.3E10;

特殊表達方法

char c=.5; // c=0.5
float
  • 單精度的32位元浮點數
  • 要注意浮點數不能用來表示精準的值
  • 可以用float類型來節省double類型記憶體空間
float f1 = 0.239f;
float f2;
f2 = 0.239F;
double
  • 雙精度64位元浮點數
  • 同樣不能用來表達精確值
  • double類型是表達範圍最廣的變數類型
double d1 = 9453.9453d;
double d2;
d2 = 5942.5942D;
浮點數最精確值與最小值混淆點

有些書上會把最小值最精確值搞混,將float最小值寫成1.4E-45,不過既然是有符號類型,那最小值一定是負數,這不就矛盾了嗎

於是打開Float.class看看裡面的定義,果然找到一個常數MIN_VALUE,看了一下註解對它的解釋該常數表示的最小正浮點數,也可以解釋成float可以多精準。右側的註解又提到大小為1.4e-45f跟書中最小值定義一樣,還好有看註解,不然真的會被搞懵

由此可知真正的最小值應該是最大值取負,最大值在Float.class也可以找到MAX_VALUE這個值,大小是3.40E+38double的話就去參考Double.class就可以了

浮點的二進位表示方法可以參考之前寫的文章

最後把這些常數定義打印出來,double check跟所學的沒問題

字元類型

char類型是16bits無符號變數類型,它表示Unicode字元,其範圍為0~65535

類型最小值最大值
char065535

在使用char類型數據賦值時應注意需使用’ ‘單引號,但不能使用" “雙引號

char c="h"; // c: Am I a joke to you?
char c='h' // 正確

整數表示

char c1='A'; // 可以用以下方法表示
char c2=0101; // 8進位
char c3=65; // 10進位
char c4=0x41; // 16進位

Unicode編碼方法
根據Unicode Table的對應數做字面量的賦值

char a='\u0041' // 'A'

超出範圍需要casting

char a = 65535; // 正常範圍
char b = (char)65536 // 超出範圍,需要進行casting

跳脫字元
字元中有代表特殊含意的跳脫字元,當跳脫字元放在字元陣列時,它會對後續的字元做特殊操作。常見的跳脫字元如下表

跳脫字元含意
\’單引號字元
\反斜線字元
\ttab空行
\rEnter
\n換行字元
\bBackspace
\0null

字串類型

字串類型的變數,可以用來直接接收字串,注意字串類型要用兩個雙引號包起來

String s1 = "I Like Java!";

另外字串類型變數也可以用Unicode編碼方式給值,例如我們可以將

String s1 = "ABC";

替換成

String s1="\u0041\u0042\u0043";

另外宣告字串類型後,要對它進行初始化操作,就算是是空字串,也要執行初始化

String s1=""; // 宣告時即初始化
String s2;
s2 = ""; // 宣告後再進行賦值

布林類型

java相對於C/C++不同,布林類型變數值只能是truefalse,不能是0或1。布林變數類型常用來做條件判斷用

boolean b=true;
if(b) {
    System.out.print("boolean="+b);
}

有一則關於 Java學習之路03—標識符、關鍵字、變數概念 的留言

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: