變量和常量
在程序中存在大量的數(shù)據(jù)來代表程序的狀態(tài),其中有些數(shù)據(jù)在程序的運(yùn)行過程中值會(huì)發(fā)生改變,有些數(shù)據(jù)在程序運(yùn)行過程中值不能發(fā)生改變,這些數(shù)據(jù)在程序中分別被叫做變量和常量。
在實(shí)際的程序中,可以根據(jù)數(shù)據(jù)在程序運(yùn)行中是否發(fā)生改變,來選擇應(yīng)該是使用變量代表還是常量代表。
變量
變量代表程序的狀態(tài)。程序通過改變變量的值來改變整個(gè)程序的狀態(tài),或者說得更大一些,也就是實(shí)現(xiàn)程序的功能邏輯。
為了方便的引用變量的值,在程序中需要為變量設(shè)定一個(gè)名稱,這就是變量名。例如在2D游戲程序中,需要代表人物的位置,則需要2個(gè)變量,一個(gè)是x坐標(biāo),一個(gè)是y坐標(biāo),在程序運(yùn)行過程中,這兩個(gè)變量的值會(huì)發(fā)生改變。
由于Java語言是一種強(qiáng)類型的語言,所以變量在使用以前必須首先聲明,在程序中聲明變量的語法格式如下:
數(shù)據(jù)類型 變量名稱;
例如:int x;
在該語法格式中,數(shù)據(jù)類型可以是Java語言中任意的類型,包括前面介紹到的基本數(shù)據(jù)類型以及后續(xù)將要介紹的復(fù)合數(shù)據(jù)類型。變量名稱是該變量的標(biāo)識(shí)符,需要符合標(biāo)識(shí)符的命名規(guī)則,在實(shí)際使用中,該名稱一般和變量的用途對(duì)應(yīng),這樣便于程序的閱讀。數(shù)據(jù)類型和變量名稱之間使用空格進(jìn)行間隔,空格的個(gè)數(shù)不限,但是至少需要1個(gè)。語句使用“;”作為結(jié)束。
也可以在聲明變量的同時(shí),設(shè)定該變量的值,語法格式如下:
數(shù)據(jù)類型 變量名稱 = 值;
例如:int x = 10;
在該語法格式中,前面的語法和上面介紹的內(nèi)容一致,后續(xù)的“=”代表賦值,其中的“值”代表具體的數(shù)據(jù),注意區(qū)別“==”代表為判斷是否相等。在該語法格式中,要求值的類型需要和聲明變量的數(shù)據(jù)類型一致。
在程序中,變量的值代表程序的狀態(tài),在程序中可以通過變量名稱來引用變量中存儲(chǔ)的值,也可以為變量重新賦值。例如:
int n = 5;
n = 10;
在實(shí)際開發(fā)過程中,需要聲明什么類型的變量,需要聲明多少個(gè)變量,需要為變量賦什么數(shù)值,都根據(jù)程序邏輯決定,這里列舉的只是表達(dá)的格式而已。
常量
常量代表程序運(yùn)行過程中不能改變的值。
常量在程序運(yùn)行過程中主要有2個(gè)作用:
1. 代表常數(shù),便于程序的修改(例如:圓周率的值)
2. 增強(qiáng)程序的可讀性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其數(shù)值分別是1、2、3和4)
常量的語法格式和變量類型,只需要在變量的語法格式前面添加關(guān)鍵字final即可。在Java編碼規(guī)范中,要求常量名必須大寫。
則常量的語法格式如下:
final 數(shù)據(jù)類型 常量名稱 = 值;
final 數(shù)據(jù)類型 常量名稱1 = 值1, 常量名稱2 = 值2,……常量名稱n = 值n;
例如:
final double PI = 3.14;
final char MALE=‘M’,F(xiàn)EMALE=‘F’;
在Java語法中,常量也可以首先聲明,然后再進(jìn)行賦值,但是只能賦值一次,示例代碼如下:
final int UP;
UP = 1;
關(guān)于final詳解
final 用于聲明屬性(常量),方法和類,分別表示屬性一旦被分配內(nèi)存空間就必須初始化(不會(huì)有默認(rèn)初始化,局部變量也是如此,默認(rèn)初始化只有普通的非final成員屬性,對(duì)于static(無final修飾)類變量,類連接時(shí)候有默認(rèn)初始化,對(duì)于像private int a;在類實(shí)例化時(shí),構(gòu)造函數(shù)默認(rèn)初始為0,總之,變量必須初始化后方可用,這是java的安全之一。 final這個(gè)關(guān)鍵字的含義是“這是無法改變的”或者“終態(tài)的”;
那么為什么要阻止改變呢?
java語言的發(fā)明者可能由于兩個(gè)目的而阻止改變:
1).效率問題:
jdk中的某些類的某些方法,是不允許被用戶覆蓋的,設(shè)計(jì)者可能認(rèn)為,所用方法已經(jīng)是最好的方法,用戶私自覆蓋,或是由于疏忽而覆蓋,就會(huì)影響JVM或是系統(tǒng)的系能;
2). 設(shè)計(jì)所需:
眾所周知,有些情況必須使用final關(guān)鍵字,比如方法中的匿名內(nèi)部類的參數(shù)傳遞
【修飾變量】:
final成員變量表示常量,只能被賦值一次,賦值后值不再改變。
【修飾方法】:
final方法不能被子類方法覆蓋,但可以被繼承。
【修飾類】:
final類不能被繼承,沒有子類,final類中所有方法都是final的。(如String類)
1.被final修飾而沒有被static修飾的類的屬性變量只能在兩種情況下初始化:(必須初始化)
a.在它被聲明的時(shí)候賦值
b.在構(gòu)造函數(shù)里初始化
解釋: 當(dāng)這個(gè)屬性被修飾為final,而非static的時(shí)候,它屬于類的實(shí)例對(duì)象的資源(實(shí)例常量),當(dāng)類被加載進(jìn)內(nèi)存的時(shí)候這個(gè)屬性并沒有給其分配內(nèi)存空間,而只是 定義了一個(gè)變量a,只有當(dāng)類被實(shí)例化的時(shí)候這個(gè)屬性才被分配內(nèi)存空間,而實(shí)例化的時(shí)候同時(shí)執(zhí)行了構(gòu)造函數(shù),所以屬性被初始化了,也就符合了當(dāng)它被分配內(nèi)存 空間的時(shí)候就需要初始化,以后不再改變的條件.
2.被static修飾而沒有被final修飾的類的屬性變量只能在兩種情況下初始化:(可以不初始化)
a.在它被聲明的時(shí)候賦值
b.在靜態(tài)或非靜態(tài)快里初始化
解釋:
當(dāng)類的屬性被同時(shí)被修飾為static時(shí)候,他屬于類的資源(類變量),在類加載后,進(jìn)行連接時(shí)候,分三步: 先驗(yàn)證;然后準(zhǔn)備,準(zhǔn)備時(shí),先分配內(nèi)存,接著默認(rèn)初始化;可以進(jìn)行解析。最后,進(jìn)行類初始化,類初始化前,必須保證它的父類已經(jīng)初始化了,所以最先初始化的是超類,對(duì)于接口,不必初始其父接口。類初始化時(shí),它把類變量初始化語句及靜態(tài)初始化語句放到類初始化方法中,所以,如果無此兩種語句,也就沒<clinit>類初始化方法,而構(gòu)造函數(shù)是在當(dāng)類 被實(shí)例化的時(shí)候才會(huì)執(zhí)行,所以用構(gòu)造函數(shù),這時(shí)候這個(gè)屬性沒有被初始化.程序就會(huì)報(bào)錯(cuò).而static塊是類被加載的時(shí)候執(zhí)行,且只執(zhí)行這一次,所以在 static塊中可以被初始化.
3.同時(shí)被final和static修飾的類的屬性變量只能在兩種情況下初始化:(必須初始化)
a.在它被定義的時(shí)候
b.在類的靜態(tài)塊里初始化
c.特別對(duì)于初始化時(shí)候調(diào)用拋出異常的構(gòu)造函數(shù),初始時(shí)候注意,特別是在實(shí)現(xiàn)單例模式時(shí)(只能這么初始化)
java中的關(guān)鍵字有以下部分
標(biāo)識(shí)符就是用于給 Java 程序中變量、類、方法等命名的符號(hào)。
package com.imooc;
public class Demo{} //com.imooc和Demo這兩個(gè)都是標(biāo)識(shí)符。
標(biāo)識(shí)符要遵守以下規(guī)則:
標(biāo)識(shí)符可以由字母、數(shù)字、下劃線(_)、美元符($)組成,但不能包含 @、%、空格等其它特殊字符,不能以數(shù)字開頭。譬如:123name 就是不合法滴;
標(biāo)識(shí)符不能是 Java 關(guān)鍵字和保留字( Java 預(yù)留的關(guān)鍵字,以后的升級(jí)版本中有可能作為關(guān)鍵字),但可以包含關(guān)鍵字和保留字。如:不可以使用 void 作為標(biāo)識(shí)符,但是 Myvoid 可以;
標(biāo)識(shí)符是嚴(yán)格區(qū)分大小寫的。 所以一定要分清楚 imooc 和 IMooc 是兩個(gè)不同的標(biāo)識(shí)符哦!
標(biāo)識(shí)符的命名最好能反映出其作用,做到見名知意。
在JAVA中我們通過三個(gè)元素來描述變量:變量類型,變量名以及變量值。
String love="imooc";
變量類型 變量名 值(其中String具有不可變性,重新賦值后會(huì)生成新的String對(duì)象,love變量名這實(shí)際是指向?qū)ο蟮刂返囊茫?quot;imooc"為具體的值)。
love="I love imooc"; 變量重新賦值,重新指向了一個(gè)新的對(duì)象,對(duì)象值為"i love imooc“。
Java 語言是一種強(qiáng)類型語言。通俗點(diǎn)說,在 Java 中存儲(chǔ)的數(shù)據(jù)都是有類型的,而且必須在編譯時(shí)就確定其類型。 Java 中有兩類數(shù)據(jù)類型:
在 Java 的領(lǐng)域里,基本數(shù)據(jù)類型變量存的是數(shù)據(jù)本身,而引用類型變量存的是保存數(shù)據(jù)的空間地址。說白了,基本數(shù)據(jù)類型變量里存儲(chǔ)的是直接放在抽屜里的東西,而引用數(shù)據(jù)類型變量里存儲(chǔ)的是這個(gè)抽屜的鑰匙,鑰匙和抽屜一一對(duì)應(yīng)。
常用的基本數(shù)據(jù)類型有:
注意:
String 是一種常見的引用數(shù)據(jù)類型,用來表示字符串。在程序開發(fā)中,很多操作都要使用字符串來完成,例如系統(tǒng)中的用戶名、密碼、電子郵箱等。
byte 127(2^7-1) -128(-2^7)
short 32767(2^15-1) -32768(-2^15)
int 2147483647(2^31-1) -2147483648(-2^31)
long 9223372036854775807(2^63-1) -9223372036854775808(2^63) 默認(rèn)值0L long a=100000L;
float 默認(rèn)值是0.0f float f1=253.4f;
double 默認(rèn)值是0.0d double d1=123.4;
boolean 默認(rèn)值是false;
1、Java 中的變量需要先聲明后使用
2、變量使用時(shí),可以聲明變量的同時(shí)進(jìn)行初始化,也可以先聲明后賦值
String love="imooc";或者String love;love="I love imooc";
3、變量中每次只能賦一個(gè)值,但可以修改多次
4、main 方法中定義的變量必須先賦值,然后才能輸出
5、雖然語法中沒有提示錯(cuò)誤,但在實(shí)際開發(fā)中,變量名不建議使用中文,容易產(chǎn)生安全隱患,譬如后期跨平臺(tái)操作時(shí)出現(xiàn)亂碼等等
int轉(zhuǎn)換double類型時(shí)可以直接轉(zhuǎn)換,這種叫做自動(dòng)類型轉(zhuǎn)換,當(dāng)然自動(dòng)類型轉(zhuǎn)換是需要滿足特定條件的:
目標(biāo)類型能與源類型兼容,如 double 型兼容 int 型;
目標(biāo)類型大于源類型,如 double 類型長度為 8 字節(jié), int 類型為 4 字節(jié),因此 double 類型的變量里直接可以存放 int 類型的數(shù)據(jù),但反過來就不可以了。
強(qiáng)制類型轉(zhuǎn)換容易造成數(shù)據(jù)丟失,所以在轉(zhuǎn)換時(shí)需要多加注意
強(qiáng)制類型轉(zhuǎn)換的語法是 (數(shù)據(jù)類型)數(shù)值
double avg1=75.8;
int avg2=(int)avg1;
所謂常量可以理解成一種特殊的變量,它的值被設(shè)定后,在程序運(yùn)行過程中不允許被改變。
final 常量名=值;
final double PI=3.14; final String LOVE="imooc";
常量名一般使用大寫字符。
程序中使用常量可以提高代碼的可維護(hù)性。例如,在項(xiàng)目開發(fā)時(shí),我們需要指定用戶的性別,此時(shí)可以定義一個(gè)常量 SEX,賦值為 "男",在需要指定用戶性別的地方直接調(diào)用此常量即可,避免了由于用戶的不規(guī)范賦值導(dǎo)致程序出錯(cuò)的情況。
一般來說,對(duì)于一份規(guī)范的程序源代碼而言,注釋應(yīng)該占到源代碼的 1/3 以上。因此,注釋是程序源代碼的重要組成部分,一定要加以重視。
Java 中注釋有三種類型:單行注釋、多行注釋、文檔注釋
我們可以通過 javadoc 命令從文檔注釋中提取內(nèi)容,生成程序的 API 幫助文檔。
使用文檔注釋時(shí)還可以使用 javadoc 標(biāo)記,生成更詳細(xì)的文檔信息:
@author 標(biāo)明開發(fā)該類模塊的作者
@version 標(biāo)明該類模塊的版本
@see 參考轉(zhuǎn)向,也就是相關(guān)主題
@param 對(duì)方法中某參數(shù)的說明
@return 對(duì)方法返回值的說明
@exception 對(duì)方法可能拋出的異常進(jìn)行說明
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇