常量和變量
常量:程序中固定不變化的值。
變量的定義:表示存儲(chǔ)空間,可用來(lái)存放某一類型的常量碎浇,沒有固定值赊淑,并可以重復(fù)使用诫欠,也可以用來(lái)存儲(chǔ)某種類型的未知數(shù)據(jù)死相。
常量分類:
字面值常量:直接給出的一個(gè)值,比如:整數(shù)常量1忿项,2哼转,3窃这,小數(shù)常量3.14瞳别,布爾常量false,true等杭攻。
定義的final變量:后講.
變量的特點(diǎn):
① 占據(jù)著內(nèi)存中的某一塊存儲(chǔ)區(qū)域祟敛;
② 該區(qū)域有自己的名稱(變量名)和類型(數(shù)據(jù)類型);
③ 可以被重復(fù)使用;
④ 該區(qū)域的數(shù)據(jù)可以在同一類型范圍內(nèi)不斷變化兆解;
變量的分類:
隨著變量定義在類中的位置不同馆铁,故把變量分成兩大類:
成員變量:直接定義在類里的變量,方法外面,又稱為全局變量或字段锅睛。
局部變量:變量除了成員變量之外埠巨,其他就是局部變量。根據(jù)定義的位置不同有3種表現(xiàn)形式:
方法形參现拒,方法內(nèi)變量辣垒,代碼塊變量。
變量作用域:
指變量的存在范圍印蔬,只有在這個(gè)范圍內(nèi)勋桶,程序代碼才能訪問(wèn)它。當(dāng)一個(gè)變量被定義時(shí),它的作用域就確定了:
作用域是定義開始到定義所在的花括號(hào)結(jié)束;
基本數(shù)據(jù)類型轉(zhuǎn)換
前面談到變量的時(shí)候侥猬,說(shuō)變量是有類型的例驹,那么Java數(shù)據(jù)有多少和哪些類型呢?總得來(lái)說(shuō)陵究,分成兩種:
① 基本數(shù)據(jù)類型眠饮,又稱為原生數(shù)據(jù)類型;
② 引用數(shù)據(jù)類型铜邮,又稱為對(duì)象數(shù)據(jù)類型仪召;
布爾類型(boolean):
boolean類型:通常用于邏輯運(yùn)算和程序流程控制。
該類型的值只能是true 或 false松蒜,表示真或假扔茅。
不可以使用0或非0的整數(shù)來(lái)代替false和true,區(qū)分于C語(yǔ)言秸苗。
整數(shù)類型(byte-short-int-long):
byte < short < int < long類型:
各自表示的數(shù)據(jù)范圍是不一樣的.
整型常量的四種表示形式:
① 二進(jìn)制整數(shù):0B或0b開頭(Java7的新特性)召娜,如:int a = 0B110;
② 八進(jìn)制整數(shù):要求以0開頭,如 int a = 012;
③ 十進(jìn)制整數(shù):如:int a = 17;
④ 十六進(jìn)制整數(shù):要求0X或0x開頭惊楼,如int a = 0x12;
Java語(yǔ)言的整型常量默認(rèn)是int型玖瘸,聲明long型變量后加上‘l’或‘L秸讹,因小寫的l容易和數(shù)字1相混淆,建議使用大寫L雅倒。
默認(rèn)情況下,一個(gè)整型的字面量默認(rèn)是int類型.
小數(shù)類型(float-double):
根據(jù)精確度細(xì)分為:
float璃诀、double類型:
表示小數(shù)類型又稱為浮點(diǎn)類型,其中float表示單精度類型蔑匣,double表示雙精度類型劣欢,但是二者都不能表示精確的小數(shù)。
Java的浮點(diǎn)類型常量有兩種表現(xiàn)形式:
?十進(jìn)制形式: 例如:3.14 裁良,168.0凿将, .618
?科學(xué)計(jì)數(shù)法形式: 例如:3.14e2, 3.14E2价脾, 1000E-2
科學(xué)計(jì)數(shù)法表達(dá)式返回的結(jié)果是double類型牧抵。
默認(rèn)情況下,一個(gè)小數(shù)類型的字面量默認(rèn)是double類型.若要聲明一個(gè)常量為float型,則需在常量后加上f 或 F彼棍,double常量后面的D或d可省略灭忠。
注意:Java里只有浮點(diǎn)型的變量才可以接受科學(xué)計(jì)算式結(jié)果:
因?yàn)閒loat和double都不能精確的表示小數(shù)膳算,那么在精度要求高的系統(tǒng)比如銀行系統(tǒng)里座硕,那怎么表示精確的小數(shù)呢?后面我們會(huì)講BigDecimal類型涕蜂,它表示任意精度的數(shù)據(jù)华匾。
char類型:表示16位的無(wú)符號(hào)整數(shù)或者Unicode字符,Java對(duì)字符采用Unicode字符編碼机隙。
Unicode收集了世界上所有語(yǔ)言文字中的字符(符號(hào))蜘拉,是一種跨平臺(tái)的編碼方式,Java的字符占兩個(gè)字節(jié)有鹿,可以表示一個(gè)漢字旭旭。
什么是編碼?
計(jì)算機(jī)只能表示0和1兩個(gè)數(shù)葱跋,于是人們做規(guī)定使用一個(gè)數(shù)字去表示一個(gè)特定的字符持寄,比如a使用97表示。
char前256個(gè)字符和ASCII(美國(guó)信息交互標(biāo)準(zhǔn)編碼)碼中的字符重復(fù)娱俺。
char常量有3種表示形式:
① 直接使用單個(gè)字符來(lái)指定字符常量稍味,格式如'◆'、'A'荠卷,'7',注意使用單引號(hào)括起來(lái)模庐;
② 直接作為十進(jìn)制整數(shù)數(shù)值使用,但是數(shù)據(jù)范圍在[0油宜,65535]掂碱,格式如97怜姿,但是打印出來(lái)的值依然是ASCII碼表對(duì)于的符號(hào),如97打印出來(lái)是字符a。
③ 和2一樣疼燥,只不過(guò)表示的是16進(jìn)制的數(shù)值社牲,格式如'\uX',X表示16進(jìn)制整數(shù)悴了;如:97的16進(jìn)制是61搏恤。那么表示為‘\u0061’打印出來(lái)也是a。
所以有人說(shuō)char本質(zhì)上也是整型湃交,也是有道理的熟空。
char前256個(gè)字符和ASCII(美國(guó)信息交互標(biāo)準(zhǔn)編碼)碼中的字符重復(fù),可查表搞莺。
當(dāng)要表示的數(shù)據(jù)超出數(shù)據(jù)類型的臨界范圍時(shí)息罗,稱為溢出。
int intMax = 2147483647;//int最大值
intMax = intMax + 1;//編譯時(shí)只檢查語(yǔ)法才沧,所以不報(bào)錯(cuò)
System.out.println("intMax + 1= " + intMax);
int intMin = -2147483648;//int最小值
intMin = intMin - 1;
System.out.println("intMin - 1= " + intMin);
分析數(shù)據(jù)發(fā)生紊亂的原因:溢出情況發(fā)生時(shí)程序并沒有做數(shù)據(jù)范圍檢查處理迈喉,此時(shí)會(huì)出現(xiàn)數(shù)據(jù)紊亂情況。
基本數(shù)據(jù)類型轉(zhuǎn)換:
--
在8大基本數(shù)據(jù)類型中,boolean不屬于數(shù)值類型,不參與轉(zhuǎn)換.
轉(zhuǎn)換規(guī)則其實(shí)就是各自數(shù)據(jù)類型的空間大小.
數(shù)據(jù)類型的轉(zhuǎn)換操作,分兩種:
1):自動(dòng)類型轉(zhuǎn)換.(把小類型轉(zhuǎn)換為大類型)
--
2):強(qiáng)制類型轉(zhuǎn)換.(把大類型轉(zhuǎn)換為小類型)
自動(dòng)類型轉(zhuǎn)換温圆,也稱為“隱式類型轉(zhuǎn)換:
當(dāng)把小數(shù)據(jù)范圍類型的數(shù)值或變量賦給另一個(gè)大數(shù)據(jù)范圍類型變量挨摸,系統(tǒng)可以自動(dòng)完成類型轉(zhuǎn)型。這好比把裝一斤水容器里的水倒進(jìn)可以裝兩斤水的容器里一樣岁歉。
再次強(qiáng)調(diào):boolean 類型是不可以轉(zhuǎn)換為其他數(shù)據(jù)類型得运。
強(qiáng)制類型轉(zhuǎn)換,也稱為“顯示類型轉(zhuǎn)換:
當(dāng)把大范圍類型的數(shù)值或變量賦給另一個(gè)小范圍類型變量時(shí)锅移,此時(shí)系統(tǒng)不能自動(dòng)完成轉(zhuǎn)換熔掺,需要加上強(qiáng)制轉(zhuǎn)換符,但這樣的操作可能造成數(shù)據(jù)精度的降低或溢出非剃,所以使用時(shí)要格外注意置逻。
算術(shù)運(yùn)算符
Arithmetic operators
用來(lái)處理四則運(yùn)算的符號(hào)
加號(hào):在操作數(shù)值、字符备绽、字符串時(shí)其結(jié)果是不同的券坞,當(dāng)兩個(gè)字符相加得到的是ASCII碼表值,當(dāng)兩個(gè)字符串相加時(shí)表示將兩個(gè)字符串連接在一起疯坤,從而組成新的字符串报慕。
除號(hào):整數(shù)在使用除號(hào)操作時(shí),得到的結(jié)果仍為整數(shù)(小數(shù)部分忽略)压怠,當(dāng)整數(shù)除以0的時(shí)候眠冈,會(huì)引發(fā)算術(shù)異常。
正無(wú)窮大(Infinity):當(dāng)一個(gè)正浮點(diǎn)類型數(shù)除以0時(shí),或者正整數(shù)除以0.0時(shí);
負(fù)無(wú)窮大(-Infinity):當(dāng)一個(gè)負(fù)浮點(diǎn)類型數(shù)除以0時(shí),或者負(fù)整數(shù)除以0.0時(shí);
NaN(Not a Number):當(dāng)0.0除以0.0時(shí);
取模:模數(shù)的符號(hào)忽略不計(jì),結(jié)果的正負(fù)取決于被模數(shù).
注意:無(wú)窮大和NaN都屬于double浮點(diǎn)類型,但是所有正無(wú)窮大都是相等的,所有負(fù)無(wú)窮大也是相等的,NaN永遠(yuǎn)不相等,也不等于自己.
++和--操作:
自增:++蜗顽,遞增操作符布卡,使變量值增加1,有前置和后置之分雇盖,只能操作變量忿等。
自減:-- ,遞減操作符崔挖,使變量值減去1贸街,有前置和后置之分,只能操作變量狸相。
自增和自減具體操作是一樣的薛匪,僅僅是一個(gè)是加1,一個(gè)是減1而已脓鹃,現(xiàn)在單講++:
代碼 result ++和 ++result逸尖,都將使result變量的值加1。
賦值運(yùn)算符
assigning operator
專門為變量指定值或重新指定值
注意Java支持同時(shí)給多個(gè)變量賦值瘸右,好比支持同時(shí)聲明多個(gè)變量一樣娇跟,但因影響代碼可讀性,故也不推薦太颤。
每一個(gè)變量單獨(dú)定義,并單獨(dú)賦值.
加等于:x += 5; 相當(dāng)于 x = x + 5苞俘,但還包括隱式類型轉(zhuǎn)換。
public class Hello{
public static void main(String[] args){
int a, b, c; //不推薦
a = b = c = 5; //不推薦
short s = 5;
//s = s + 3;//編譯出錯(cuò)栋齿,需要強(qiáng)轉(zhuǎn) s = (short)(s + 3);
s += 3;//編譯OK苗胀,隱式類型轉(zhuǎn)換
}
}
比較運(yùn)算符
comparison operator
用于比較兩個(gè)變量或常量之間的關(guān)系,比較運(yùn)算符的結(jié)果是boolean類型,其操作格式為:
boolean result = 表達(dá)式A 比較運(yùn)算符 表達(dá)式B;
==:等于瓦堵,若比較的是兩個(gè)操作數(shù)都是數(shù)值類型,即使他們的類型不同歌亲,只要值相同就返回true菇用。
當(dāng)然==也可以比較引用數(shù)據(jù)類型,留到后面講陷揪。
instanceof:在講面向?qū)ο蟮臅r(shí)候惋鸥,再細(xì)講。
public static void main(String[] args){
System.out.println(65 == 'A');//true
System.out.println(1.0 == 1);//true
System.out.println(true == false);//false
System.out.println(5 >= 5);//true
System.out.println(5 >= 5);//true
System.out.println(5 != 5);//false
}
三元運(yùn)算符
ternary operator
現(xiàn)在給一個(gè)小數(shù)悍缠,需要求出其四舍五入之后的結(jié)果卦绣,怎么完成該功能?
思路:取得整數(shù)部分飞蚓,再取得小數(shù)部分滤港,再判斷小數(shù)部分和0.5的大小關(guān)系,若大于等于趴拧,結(jié)果就是整數(shù)部分加1溅漾,否則就是整數(shù)部分山叮。
三元運(yùn)算符,表示有三個(gè)元素參與的表達(dá)式添履,所以又稱為三目運(yùn)算符屁倔,其語(yǔ)義表示if-else.
語(yǔ)法格式:X ? Y :Z, 其中x為boolean類型表達(dá)式暮胧,先計(jì)算X的值锐借,若X結(jié)果為true則整個(gè)三目運(yùn)算表達(dá)式的結(jié)果是Y,否則就是Z往衷。三目運(yùn)算符結(jié)果的類型由Y和Z決定瞎饲。
邏輯運(yùn)算符
logical operator
分析下列語(yǔ)句什么意思:(AND,OR)
張三和李四周末要值班:二者都來(lái)值班才是我期待的結(jié)果。
張三或李四周末要值班:二者只要有一個(gè)值班就是我期待的結(jié)果炼绘。
用于操作兩個(gè)boolean類型的變量或常量嗅战,結(jié)果類型也是boolean。
語(yǔ)法格式為:boolean result = boolean表達(dá)式A 邏輯運(yùn)算符 boolean表達(dá)式B;
&:表示并且俺亮,當(dāng)操作數(shù)A和B都為true結(jié)果才為true驮捍,否則結(jié)果result 是false。
&&:和&結(jié)果相同脚曾,具有短路效果东且,如果左邊操作數(shù)A是false,result 一定為false本讥,且不運(yùn)行B的運(yùn)算珊泳。
|:表示或者,A和B都為false結(jié)果result為false拷沸,只要有A或B是true色查,結(jié)果就是true。
||:和|結(jié)果相同撞芍,具有短路效果秧了,如果左邊操作數(shù)A是true,result一定為true序无,且不運(yùn)行B的運(yùn)算验毡。
^:判斷A和B是否不同,不同則為true帝嗡,相同則為false晶通。
!:取反,!true結(jié)果是false哟玷,!fasle結(jié)果是true狮辽。
位運(yùn)算符
運(yùn)算符的操作優(yōu)先級(jí)