- 聲明變量
定義變量就是告訴編譯器(compiler)這個變量的數據類型,這樣編輯器才知道需要分配多大內存,以及它可以放什麼樣子的數據
系統內存大致分三個區:
系統(OS)
程序(Program)
數據(Data)
當程序執行時,程序代碼會加載內存中在程序區,數據暫時存儲在數據區,假設上述兩個變量被定義在方法體中,則程序加載到程序區中
變量命名的規則:
- .變量必須是一個有效的標識符
- .變量名不可以使用Java 的關鍵字
- .變量名不能重複
- .應選擇有意義的單詞作爲變量名
- 聲明常量
在程序運行過程中一直不會被改變的量稱爲常量,也叫final變量,常量在整個程序中只能被賦值一次,常量名通常用大寫字母表示,但不是必須的。當定義的final變量屬於成員變量時,必須在定義時就設定它的初值,否則將產生編譯錯誤
final 數據類型 常量名稱[=值]
- 變量的有效範圍
變量被定義出來之後只是暫存在內存中,等到程序執行到某一個點,該變量會被釋放掉,所以變量的有效範圍是指程序代碼能夠訪問變量的區域,若超出該區域,則編譯時會出現錯誤,在程序中,一般會根據變量的“有效區域”將變量分成“成員變量”和“局部變量”。
- 成員變量
在類體中所定義的變量被稱爲成員變量,成員變量在整個類中都有效,類的成員變量可以分爲靜態變量和實例變量
Class var{
Int x=45;//實例變量
Static int y=90//靜態變量(類變量)
}
- 局部變量
在類的方法體中聲明的變量,包括方法的參數,都屬於局部變量。但方法被調用時,Java虛擬機爲方法中的局部變量分配內存空間,當該方法調用結束後,則會釋放方法中局部變量佔用的內存空間,局部變量也將會銷燬。
- 運算符
- 賦值運算符
二元運算符:對兩個操作數進行處理
- 算數運算符
運算符 |
說明 |
實例 |
結果 |
+ |
加 |
12.45f+15 |
27.45 |
- |
減 |
4.56-0.16 |
4.4 |
* |
乘 |
5L*12.45f |
62.25 |
/ |
除 |
7/2 |
3 |
% |
取餘數 |
12%10 |
2 |
-、+還可以做數據正負號
0不可以做除數,否則會拋出AirthemticException異常
- 自增自減運算符
自增、自減運算符是單目運算符,可以放在操作元前或者後,操作元必須是一個整型或者浮點型變量。
b=++a(先a自加然後再用,若a初始值爲4,b=5)
b=a++(先用a然後再自加,若a初始值爲4,b=4,a=5)
- 比較運算符
比較運算符用於判斷兩個數據的大小,例如:大於、等於、不等於。比較的結果是一個布爾值( true 或 false )。
Java 中常用的比較運算符如下表所示:
注意哦:
(1) > 、 < 、 >= 、 <= 只支持左右兩邊操作數是數值類型
(2) == 、 != 兩邊的操作數既可以是數值類型,也可以是引用類型
public class HelloWorld{
public static void main(String[] args) {
int a=16;
double b=9.5;
String str1="hello";
String str2="imooc";
System.out.println("a等於b:" + (a==b));
System.out.println("a大於b:" + (a > b));
System.out.println("a小於等於b:" + (a < b));
System.out.println("str1等於str2:" + (str1 == str2));
}
}
- 邏輯運算符(邏輯與、邏輯或、邏輯非)
1.使用規則:
(1)& 可以用作邏輯與的運算符,表示邏輯與(and)【判斷兩個表達式】
a、當運算符兩邊的表達式的結果都爲true時,整個運算結果才爲true,否則,只要有一方爲false,則結果爲false
b、無論第一個判斷條件是否成立,邏輯運算符前後兩個條件都會進行判斷
(2)&& 可以用作邏輯與的運算符,表示邏輯與(and)【針對boolean類型的類進行判斷】
a、當運算符兩邊的表達式的結果都爲true時,整個運算結果才爲true,否則,只要有一方爲false,則結果爲false
b、第一個條件不成立,後面的條件均不進行判斷,返回false
(3)| 可以作邏輯或運算符,表示邏輯或(or)
a、當運算符有一邊爲true時,整個運算結果爲true
b、無論第一個判斷條件是否成立,邏輯運算符前後兩個條件都會進行判斷
(4)|| 可以作邏輯或運算符,表示邏輯或(or)
a、當運算符有一邊爲true時,整個運算結果爲true
b、第一個條件成立,後面的條件均不進行判斷,返回true
2.使用案例:
String s = null;
1. if((s!=null)&(s.length()>0)){}
2. if((s!=null)&&(s.length()>0)){}
3. if((s==null)|(s.length()==0)){}
4. if((s==null)||(s.length()==0)){}
上述案例在java運行情況中,1,3均拋出NullPointerException異常。
- 位運算符
左移運算符:<< 二進制左移多少位,每左移一位便乘以2(在一定範圍內);
有符號右移運算符(最高位爲什麼就用什麼補,如(高位爲1則用1補,爲0用0補)):>> 二進制右移多少位,每左移一位便除以2(在一定範圍內);
無符號右移運算符(最高位無論爲什麼都用0補):>>>
與運算符:& 相同位都爲1則取1,否則取0;
或運算符:| 相同位有一個爲1則取1,都爲0才取0;
異或運算符:把兩位數轉化成二進制,相同取0,否則取1^ ;
取反運算符:~ 相同位0取1,1取0;
>>>:無論最高位是0還是1,左側被移空的高位都填入0.
- 三元運算符
第一個是表達式,剩餘兩個是值,條件表達式爲真時,取第一個值,爲假時,取第二個值。
示例代碼如下:
boolean a = 20 < 45 ? true : false
三元運算符的優先級高於賦值運算符,故第一個表達式爲真,取第一個值,返回 a=true;
三元運算符用於做判斷,其等價的if-else語句如下:
boolean a;
if (20 < 45) {
a = true;
}else{
a = false;
}
很多時候三元運算符可以和if-else語句進行互換,它們兩個可以等價的實現判斷的效果,但是三元運算符和if-else還是有不同之處的,下面我們來具體談談不同之處:
第一
兩者之間對於返回值有不同的要求。三元運算符是必須要有返回值的要求,其運算後一定有一個返回值返回給開發人員使用,而if-else不一定有返回值,其執行結果可能是賦值語句或者是輸出語句。
第二
兩者的性能不同。三元運算符的運算性能高於if-else。
第三
兩者使用範圍不同,在ireport的一些動態執行的情況下,只能用三元運算符而不能用if-else語句,當然在大多數情況下兩者是可以等價互換的
第四
兩者的語言特性不同,三元運算符設計到一種雙目運算符提升的特性,
所謂雙目數值提升,在雙目運算符java的開發環境下可以簡單的理解爲類型轉換的問題。
1.如果定義了數據類型的變量和未定義數據類型的變量參與雙目運算符的後雙目運算,那麼返回的結果就是範圍大(精度高)的類型。
2.如果兩個定義了數據類型的變量參與雙目運算符的後雙目運算,那麼返回的結果就是範圍大(精度高)的類型。
3.如果直接進行數值的比較,則自動轉型爲範圍大(精度高)的類型。