一:變量
1.1 what赞弥?
問題:我們在實際開發(fā)過程中不可避免的要遇到一些比如數(shù)值計算的問題毅整。而對于有些數(shù)值,可能在整個程序的執(zhí)行過程中被反復(fù)使用绽左,或者對該數(shù)值進(jìn)行四則運(yùn)算悼嫉;而此時,如果沒有一個行之有效的東西幫助我們?nèi)ビ涗涍@些反復(fù)使用的值拼窥,很可能后導(dǎo)致后期對于值的不確定性增加(記混了戏蔑,記錯了)蹋凝,導(dǎo)致整個程序崩潰。
定義:變量就是在程序運(yùn)行期間总棵,其值可以發(fā)生改變鳍寂。我們用變量來記錄和標(biāo)識程序中的某個用戶輸入等記錄。
1.2 Why?
為了能夠更好的方便開發(fā)情龄,所以我們通過變量對于某些數(shù)據(jù)起一個簡單的名字迄汛,方便程序調(diào)用以及執(zhí)行。這就是為什么需要變量的原因骤视。
1.3 Where?
變量被應(yīng)用在程序的開發(fā)的各個地方鞍爱,基本不存在沒有變量的程序或者代碼段。
1.4 How
1.4.1 變量的聲明
PS:為了能夠更好的說明問題专酗,我們下面的例子中都是通過int
這種數(shù)據(jù)類型類完成下面的測試用例的睹逃。
- 案例
public class VariableStatement {
public static void main(String[] args) {
int num;//①
}
}
- 結(jié)論
變量的聲明需要指定數(shù)據(jù)類型和變量名稱;int就是一種數(shù)據(jù)類型祷肯,num就是當(dāng)前變量的名字沉填;
- 注意事項
①:Java是一門強(qiáng)類型語言,所有的變量都是具備具體類型的躬柬,目前我們先通過int代替拜轨,后面細(xì)說每種數(shù)據(jù)類型
②:變量名稱就是給某個數(shù)據(jù)起的一個名稱,必須要嚴(yán)格遵守標(biāo)識符的命名規(guī)則(3必2標(biāo)1注意)
1.4.2 變量的賦值
-
案例1 聲明變量直接使用
public class VariableStatement { public static void main(String[] args) { int num;//① System.out.println("num的值是:"+num); } }
-
結(jié)論
程序在編譯期間報錯允青,報錯信息如下:
The local variable num may not have been initialized
-
注意事項
變量在聲明之后橄碾,無法直接使用;如果需要使用變量颠锉,必須要保證變量
聲明且賦值
法牲。 -
修改方式
public class VariableStatement { public static void main(String[] args) { int num;//①聲明變量 num = 10;//② 增加賦值語句 System.out.println("num的值是:"+num); } }
變量聲明之后需要使用是,通過賦值語句進(jìn)行變量的賦值之后才能正常使用琼掠。
-
案例2 聲明變量且賦值
public class VariableStatement { public static void main(String[] args) { int num = 10;//聲明變量num且賦10 System.out.println("num的值是:"+num); } }
-
結(jié)論
PS:變量的聲明和賦值可以分開進(jìn)行編寫拒垃,也可以編寫為一行。一般情況下我們都會將聲明和賦值放在一行語句中瓷蛙。
-
案例3 變量在程序運(yùn)行期間可以重新賦值
public class VariableStatement { public static void main(String[] args) { int num = 10;//聲明變量num且賦值10 System.out.println("起初num的值是:"+num); //改變num的值 num = 20; System.out.println("修改之后的num的值是:"+num); } }
輸出結(jié)果:
起初num的值是10修改之后的num的值是20
在程序運(yùn)行期間悼瓮,變量的值可以發(fā)生改變,只需要重新給當(dāng)前變量賦值即可艰猬。
1.4.3 變量的口訣
變量變量横堡,它隨你變;要想使用冠桃,記著賦值命贴。
二: 數(shù)據(jù)類型
2.1 前言
Java是一門強(qiáng)類型的語言,所有的數(shù)據(jù)都具備具體的類型。思考問題胸蛛,弱類型語言和強(qiáng)類型語言的優(yōu)缺點分析污茵。
- 強(qiáng)類型語言:
- 所有數(shù)據(jù)都具備其具體的類型,每種不同的類型的存儲空間不同葬项,大的數(shù)據(jù)泞当,空間開辟大一點,小的數(shù)據(jù)空間開辟的小一點玷室;
- 程序容易維護(hù)零蓉,不會因為程序在運(yùn)行期間,對于變量進(jìn)行賦值等操作穷缤,導(dǎo)致程序出現(xiàn)Bug,所以相對比而言會更加安全一點箩兽。
- 弱類型語言:
- 所有的數(shù)據(jù)的類型可能都一樣津肛,每種數(shù)據(jù)的存儲空間相同。導(dǎo)致小的數(shù)據(jù)(100)和大的數(shù)據(jù)(100000)的存儲的空間一樣汗贫,造成一些內(nèi)存的浪費身坐;
- 程序不容易維護(hù),后期程序運(yùn)行時落包,不小心對于某一個數(shù)值型的變量進(jìn)行更改部蛇,變成其它類型,導(dǎo)致程序正常執(zhí)行咐蝇,結(jié)果后期釀成大禍涯鲁,相對于穩(wěn)定性差一點。
2.2 數(shù)據(jù)類型分類
注意有序,Java是一門強(qiáng)類型語言抹腿,分為基本數(shù)據(jù)類型(3類8種)和引用類型。引用類型暫且背下來旭寿,我們后期講解警绩。接下來我們主攻的方向是基本數(shù)據(jù)類型,基本數(shù)據(jù)類型的我們通過了解每種類型的范圍
盅称,內(nèi)存大小
肩祥,聲明方式,注意事項
系統(tǒng)學(xué)習(xí)缩膝;
2.2.1 字節(jié)型
- 注意事項
表示方式 | 所占空間 | 表示范圍 |
---|---|---|
字節(jié)型(byte) | 1個字節(jié) | -128 - 127 |
- 案例分析
public class DataTypeTest01{
public static void main(String[] args){
//1:聲明一個byte類型的數(shù)據(jù) 賦值10
byte num1 = 10;
System.out.println("num1 的值是:"+num1);
//2:給num1重新賦值128查看結(jié)果
num1 = 128;//這行代碼報錯混狠,type mismatch
System.out.println("num1 的值更改之后是:"+num1);
}
}
- 結(jié)論
字節(jié)型是數(shù)據(jù)類型通過byte指定,占內(nèi)存1個字節(jié)逞盆,能夠代表的數(shù)的范圍是-128到127之間檀蹋;如果賦值超過這個區(qū)間,編譯時會報錯Type mismatch: cannot convert from int to byte。不能將超過byte范圍的數(shù)據(jù)直接賦值給byte類型的變量俯逾。
2.2.2 短整形
- 注意事項
表示方式 | 所占空間 | 表示范圍 |
---|---|---|
短整型(short) | 2個字節(jié) | -32768-32767 -2^15 - 2^15-1 |
- 案例分析
public class DataTypeTest02{
public static void main(String[] args){
//1:聲明一個short類型的數(shù)據(jù) 賦值1000
short num1 = 1000;
System.out.println("num1 的值是:"+num1);
//2:給num1重新賦值32768查看結(jié)果
num1 = 32768;//這行代碼報錯贸桶,type mismatch
System.out.println("num1 的值更改之后是:"+num1);
}
}
- 結(jié)論
短整形型是數(shù)據(jù)類型通過short指定,占內(nèi)存2個字節(jié)桌肴,能夠代表的數(shù)的范圍是-32768到32767之間提揍;如果賦值超過這個區(qū)間,編譯時會報錯Type mismatch: cannot convert from int to byte恩沽。不能將超過short范圍的數(shù)據(jù)直接賦值給short類型的變量命雀。
2.2.3 整形
- 注意事項
表示方式 | 所占空間 | 表示范圍 |
---|---|---|
整型(int) | 4個字節(jié) | -2147483648-2127283647 -2^31 - 2^31-1 |
- 案例分析
public class DataTypeTest03{
public static void main(String[] args){
//1:聲明一個int類型的數(shù)據(jù) 賦值40000
int num1 = 1000;
System.out.println("num1 的值是:"+num1);
//2:給num1重新賦值2147483648查看結(jié)果
num1 = 2147483648;//這行代碼報錯,type mismatch
System.out.println("num1 的值更改之后是:"+num1);
}
}
- 結(jié)論
整形型是數(shù)據(jù)類型通過int指定彪置,占內(nèi)存4個字節(jié)拄踪,能夠代表的數(shù)的范圍是-231到231-1之間;如果賦值超過這個區(qū)間拳魁,編譯時會報錯Type mismatch: cannot convert from int to byte惶桐。不能將超過short范圍的數(shù)據(jù)直接賦值給int類型的變量。
2.2.4 長整形
- 注意事項
表示方式 | 所占空間 | 表示范圍 |
---|---|---|
長整型(long) | 8個字節(jié) | -2^63 - 2^63-1 |
- 案例分析
public class DataTypeTest04{
public static void main(String[] args){
//1:聲明一個int類型的數(shù)據(jù) 賦值40000
long num1 = 1000;
System.out.println("num1 的值是:"+num1);
//2:給num1重新賦值2147483648查看結(jié)果
num1 = 2147483648;//這行代碼報錯潘懊,type int is out of range
System.out.println("num1 的值更改之后是:"+num1);
}
}
- 結(jié)論
長整形型是數(shù)據(jù)類型通過long指定姚糊,占內(nèi)存8個字節(jié),能夠代表的數(shù)的范圍是-263到263-1之間授舟;
這里要千萬注意救恨,默認(rèn)情況下在Java中所有的整數(shù)的默認(rèn)類型是int類型,所以當(dāng)給long類型變量賦值時释树,本身賦值的數(shù)超過了int的范圍肠槽;大于2147483647或者小于-2147483658時,編譯器覺得賦值的右邊還是int類型而不是long類型躏哩,所以報錯The literal 2147483648 of type int is out of range署浩。
解決辦法: 在超過int值的后面加"L"(推薦)或者是"l"。