官术网_书友最值得收藏!

2.2 Java基本數據

在Java中,數據包括數字、字符,以及布爾值true或false。除直接在程序中使用這些數據外,我們經常用變量來代表數據。這些數據稱為基本數據,代表這些數據的變量稱為基本數據類型變量,或簡稱基本變量。常量是變量的特殊形式。本節將討論Java提供的8種基本變量和常量的定義、賦值以及應用。Java還提供了多種類庫進行數據的各種運算和操作,例如包裝類(Wrapper class)、數學類(Math class)和BigDecimal類。后續章節將詳細討論有關數據運算和操作的類及其所提供的各種方法。

2.2.1 8種基本數據類型

用來儲存基本數據的變量稱作基本變量。表2.4列出了Java的8種基本數據類型及其取值范圍。

表2.4 Java的8種基本數據類型

整型變量,如byte、short、int和long,只能存儲整數。單精度浮點型變量float簡稱單精度型變量,可具有7位有效數值(不包括小數點);而雙精度浮點型變量double簡稱雙精度型變量,則可具有16位有效數值。Java對較大或較小的單精度或雙精度數值,用科學記數法E表示。如28600000.0,則表示為2.86E7;而.000123為1.23E-4。

在字符變量char中,Java使用Unicode作為其字符代碼,而Unicode要求每個字符占用兩個字節。這樣做的目的是可以將Java支持的字符擴展到65 536個,而傳統的ASCII代碼只有256個。為了兼容和轉換方便,Unicode中的前256個代碼與ASCII相同,所不同的是Unicode的每個字符要求兩個字節。

布爾型在Java語言中成為正式的數據類型,而在C/C++中只能用0或1來模擬。注意,它的值true(真)或false(假)必須是小寫字母。

字符串類型不屬于基本數據類型。在Java語言中,字符串類型被定義為類。從它的關鍵字String可以看出,它是以大寫字母開始的。回顧一下Java命名規范,類都以大寫字母開頭。由于字符串是常用的數據類型,為了使用方便,Java對字符串應用提供了特殊操作,即直接引用。例如:

     String str = "This is a string"; //referencing

就是直接引用,或簡稱引用的例子。字符串直接引用和定義基本數據類型似乎相同,但有本質的區別。我們將在以后章節詳細討論字符串概念和各種操作。從實際應用角度,我們通常把字符串引用也稱為定義字符串變量,并在本章進行討論。

2.2.2 如何定義變量

在下面的例子中將定義了一個名為num的雙精度型變量:

     double num;         //定義一個名為num的雙精度型變量

顧名思義,變量不但可以儲存某個數據的值,還可以修改這個值。因為Java提供了8種不同類型的數據,所以可以定義8種不同的變量。定義一個變量的語法格式為:

datatype variableName

dataType為8種數據類型之一,variableName必須是合法標識符,并要求遵守命名規范。例如:

也可以同時定義多個相同類型的變量,每個變量名之間用逗號分開,如:

因為白色空格(包括空格、Tab鍵,以及回車鍵)在編譯時都被忽略,所以,如下對變量的定義和上面的例子完全等同:

綜上所述,定義變量的廣義語法格式為:

datatype varName1[, varName2…]

其中,方括號中的內容為選擇項。如果省略,則成為定義一個變量的形式;如果有多個變量,每個變量間用逗號分隔,但最后一個變量以分號結束。

更多信息 定義變量時要遵守Java所命名規范,即使用一目了然、清楚表達變量含義的標識符作為變量名。變量名首字母為小寫。

2.2.3 什么是變量初始化

變量初始化是指一個變量定義后第一次賦予的值,即初始值。常見的變量初始化是由賦值語句完成的,例如:

它們完全等同于:

注意,一個數值型變量的初始值不一定是0;一個字符型變量的初始值不一定是' ',即空字符;一個布爾型變量的初始值不一定是true,可以是任何合法值。

也可以同時定義多個同一類型的變量,并賦予初始值,例如:

因為在Unicode中,字母'A'的代碼為65,所以first_letter和letter_A具有相同的值'A'。表2.5列出了更多定義變量和初始化的例子。

3W 變量名實際上代表存儲器的地址,可以儲存變化的數據。變量初始化就是第一次賦予變量數據。

表2.5 定義變量和變量初始化例子

2.2.4 變量與存儲器有什么關系

變量和存儲器有直接關系。定義一個變量就是要求編譯器分配所要求的內存空間。編譯器在分配存儲空間時,必須知道空間的大小,如多少字節。這個信息是通過我們所定義的變量類型來確定的。例如:

     double price = 25.08;

根據這個語句,編譯器知道我們需要8個字節的內存空間來存儲一個名為price的雙精度變量。并把數值25.08存入這個空間。那么,變量名和內存又有什么關系呢?

變量名實際上代表所分配存儲空間的地址。每個字節的存儲空間都有地址,而變量名代表其開始地址。這樣CPU才可以訪問該存儲空間。但是用存儲器的地址來代表變量,很不方便,這又回到機器編碼時代了。用變量名代表存儲器的地址是高級編程語言的特點。

變量和存儲器的這種關系可以用圖2.1表示。

圖2.1 變量和存儲器的關系

從圖2.1可以看出,變量名price代表一個雙精度數值25.08的存儲地址。更確切地說,它代表8個字節存儲器的開始地址,即89200。

在編譯時對變量進行存儲空間的分配稱為靜態綁定(static binding)。與之相對應的是動態綁定(dynamic binding),即在程序運行時才進行內存空間的分配操作。后續章節將專門討論靜態綁定和動態綁定問題。

3W 變量,包括常量,代表向編譯器請求的存儲空間。Java提供對存儲空間或者存儲器進行自動管理的功能,因而更可靠。

2.2.5 常量必須初始化

顧名思義,常量就是不變的量。常量也需要編譯器分配存儲空間,不過在這個存儲器中的數據,一旦被存入,就不能再改變了。在Java中,用關鍵字final來表示所定義的是常量。常量在定義時必須同時賦予值,或者對其初始化。這也是Java的規定,否則便是語法錯誤。命名規范中要求常量用大寫字母表示。下面是定義常量的典型例子:

常量定義的語法格式為:

final dataType CONSTANT_NAME = value

3W 常量是不可變的量。即常量一旦賦值,就不可再變更,否則將產生編譯錯誤。常量是變量的特殊情況。

主站蜘蛛池模板: 贵南县| 天柱县| 乐平市| 通辽市| 连江县| 周口市| 普陀区| 南投市| 石渠县| 鲜城| 澜沧| 昌图县| 阿坝| 汉寿县| 盖州市| 多伦县| 牟定县| 郸城县| 丰都县| 六安市| 辛集市| 台东县| 台湾省| 冷水江市| 绥滨县| 昭觉县| 定西市| 宁河县| 丰镇市| 邳州市| 大丰市| 孝感市| 昂仁县| 怀柔区| 贵州省| 什邡市| 耒阳市| 丹江口市| 庆城县| 隆子县| 丁青县|