Java基礎語法01——變數與運算子
Java基礎語法01——變數與運算子
本文是對Java基礎語法的第一部分的學習,包括註釋;識別符號的命名規則與規範;變數的資料型別分類以及轉換;以及六種運算子(算術、賦值、比較、邏輯、三元和位運算子)。
註釋(commment)
書寫註釋是一種良好的習慣,註釋是寫給人看的,並不會在程式碼執行時展示出來。註釋主要分為以下三類:單行註釋、多行註釋、文件註釋
-
單行註釋:一行,格式://
-
多行註釋:一段,格式:/* 註釋文字 */
-
文件註釋:是專門為了用javadoc工具自動生成文件而寫的註釋,它是一種帶有特殊功能的註釋。
格式:/** 文字 */ (這一部分還有很多需要擴充套件學習的地f方)
識別符號
identifier在Java中,有很多需要自己起名字的地方,而這些就被稱為識別符號。
用來命名:類名、變數名、方法名、包名、介面名、常量名等。
-
識別符號命名規則:【必須遵循,否則會報錯】
- 首字母只能以英文字母大小寫、$、下劃線(_)開始
- 首字母之後可以是英文字母大小寫、$、下劃線(_)或數字的任意組合
- 識別符號的命名是大小寫敏感的
- 不能使用關鍵字(被java語言賦予了特殊含義,用作專門用途的字串,所有字母全部是小寫的),但可以包含
- 可以使用中文命名,但是一般不建議使用
-
Java識別符號的命名規範:【非必須遵守,但是一種良好的程式碼習慣】
- 類名、介面名:多單片語成時,每個單詞的首字母大寫:XxxYyyZzz
- 變數名、方法名:首個單詞全部小寫,其餘單詞首字母大寫:xxxYyyZzz
- 包名:所有字母都小寫:xxxyyyzzz
- 常量名:所有字母都大寫且每個單詞用下劃線連線:XXX_YYY_ZZZ
-
合法識別符號舉例:age、$salary、_value、__1_value
-
非法識別符號舉例:123abc、-salary
變數
- Java是一種強型別語言,即所有的變數都必須嚴格符合規定,所有變數都必須先定義再使用。
- 變數的定義格式:
資料型別 變數名 = 值;
- 變數只在它的作用域內有效,一般作用域是{}
- 在一個作用域內不能宣告重名的多個變數
資料型別
資料型別分為基本資料型別和引用資料型別兩種
- 整數型別:byte(1位元組=8bit)、short(2位元組)、int(4位元組)、long(8位元組)
byte範圍:-128~127
定義long型別時,變數的值後要加L或l,例如:long l = 1000000L
整數型別常量預設為int型
- 浮點型別:float(4位元組,但其表示的數範圍比long大)、double(8位元組)
定義float型別時,變數的值後要加F或f,例如:float f = 100.1f
浮點型別常量預設為double型
- 字元型:char(1字元=2位元組)
宣告char型別時,使用一對單引號(‘ ’)進行賦值,只能對一個字元進行賦值
表示方法:(1)表示一個字元(2)轉義字元{\n——換行符,\t——製表符}(3)使Unicode字符集表 示字元{eg:\u0043——C}
-
布林型別:boolean,只有true\false兩個值,常常用在條件判斷和迴圈結構中
-
拓展:
\\n
執行時會輸出\n(不再表示換行的意義);"\"
可以將符號變成普通的字元
型別轉換
- 首先知道一下基本資料型別容量大小的順序:byte、short、char——>int——>long——>float——>double(順序由低容量到高容量)(此處容量大小,指的是型別的資料的範圍大小)
- 型別轉換有兩種型別:自動轉換、強制轉換(注意:不包括布林型別)
- 自動轉換:低——高
- 強制轉換:高——低,需使用強轉符:(強轉型別)變數名 【可能導致精度損失】
- 舉例:
//強轉型別舉例
public class Demo01{
public static void main(String[] args){
double d1 = 129.4;
int i1 = (int)d1;//將double型強轉為int型
System.out.println(i1);//執行結果為129
}
}
//自動提升型別舉例
public class Demo02{
public static void main(String[] args){
byte b1 = 12;
char c1 = 'a';
int i1 = 129;
int i2 = b1 + c1;//byte\char\short互相做運算或自身做運算時,都將自動轉換成int型別
int i3 = b1 + i1;//當容量大的和容量小的做運算時,結果為容量大的型別
System.out.println(i2);//int型——12+97
System.out.println(i3);//int型——12+129
}
}
拓展1——String字串型別
- 屬於引用資料型別
- 宣告String型別時,使用一對雙引號,表示字串
- String型別可以與其他8中基本型別做運算,且只能是連線運算:+,運算結果仍為String型別
拓展2——不同進位制間的轉換(瞭解)
所有數字在計算機底層都以二進位制存在
二進位制(以0b或0B開頭)、十進位制、八進位制(以0開頭)、十六進位制(以0x或0X開頭,用0-9及A-F[16]表示)
public class Test1{
public static void main(String[] args){
int num1 = 0b110;//二進位制???為啥這條執行不了???
int num2 = 123;//十進位制
int num3 = 0127;//八進位制
int num4 = 0x123A;//十六進位制
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}
運算子
算術運算子
算術運算子包括正負號(+、-)、加減乘除(+、-、*、/)、取模(取餘)(%)、++(前++、後++)、--(前--、後--)
通過下面的程式程式碼解釋相關的運算(正負號和加減乘比較簡單就不說了):
-
//除法運算 public class Demo01{ public static void main(String[] args){ int num1 = 12; int num2 = 7; int num3 = num1 / num2; System.out.println("num3 = " + num3);//1 double num4 = num1/num2;//自動型別提升為double System.out.println("num4 = " + num4);//1.0 double num5 = num1/num2+0.0; System.out.println("num5 = " + num5);//1.0 double num6 = num1/(num2+0.0); System.out.println("num6 = " + num6);//1.714...(除不盡) } } //掌握住基本資料型別運算的本質
-
//取餘運算 public class Domo02{ public static void main(String[] args){ int i1 = 12; int i2 = 5; System.out.println("i1%i2 = " + i1%i2);//2 int ii1 = -12; int ii2 = 5; System.out.println("ii1%ii2 = " + ii1%ii2);//-2 int iii1 = 12; int iii2 = -5; System.out.println("iii1%iii2 = " + iii1%iii2);//2 int iiii1 = -12; int iiii2 = -5; System.out.println("iiii1%iiii2 = " + iiii1%iiii2);//-2 //取模結果的符號於被取模數相同 } }
-
//前++(--):先自增(減)1.後做運算 //後++(--):先做運算,後自增(減)1 public class Demo03{ public static void main(String[] args){ int a = 5; int b = ++a; System.out.println("a="+a+",b="+b);//a=6,b=6 b = a++; System.out.println("a="+a+",b="+b);//a=7,b=6 b = --a; System.out.println("a="+a+",b="+b);//a=6,b=6 b = a--; System.out.println("a="+a+",b="+b);//a=5,b=6 } } //自增運算不改變 變數的資料型別
賦值運算子
賦值運算子號:=
擴充套件賦值運算子:+=、-=、*= 、/=、%=
//+=(其餘的類似)
public class Demo04{
public static void main(String[] args){
int i1 = 7;
i1 += 2;//相當於i1=i1+2
System.out.println(i1);//9
short i2 = 7;
//i2 = i2 + 2;//編譯失敗,因為資料型別
i2 += 2;//結論:不會改變變數的資料型別
System.out.println(i2);//9
int i3 = 1;
i3 *= 0.2;//i3=i3*0.2(注意資料型別是整型的)
System.out.println(i3);//0
i3 += 1;//i3=i3+1
System.out.println(i3);//1
}
}
/*
1. 在開發中,使得整數+2的方法:
num=num+2;
num+=2;(推薦)
2. 在開發中,使得整數+1的方法:
num=num+1;
num+=1;
num++;(推薦)
*/
比較運算子
比較運算子:==、!=、<、>、<=、>=、instanceof
比較運算子的結果都是布林型別:true或false
//注意區分好==和=
public class Demo05{
public static void main(String[] args){
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true
}
}
邏輯運算子
- 邏輯運算子:&(邏輯與)、&&(短路與)、|(邏輯或)、||(短路或)、!(邏輯非)、^(邏輯異或)
- 邏輯運算子兩邊操作的都是布林型別的變數
- 區分:&和&&(二者的運算結果相同,只是執行過程不同)【|、||的區分類似】
&:左右兩邊都執行
&&:如果左邊的值可以判斷出整體的值,那麼右邊的就不再執行
//舉例說明兩者區別
public class Demo05{
public static void main(String[] args) {
boolean b1=false;
int n1 =10;
if(b1 & (n1++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n1=" + n1);
//我在南京
n1=11
boolean b2=false;
int n2 =10;
if(b2 && (n2++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n2=" + n2);
//我在南京
n1=10
}
}
位運算子
(瞭解即可,平時用到的不太多)
-
位運算子:<<(左移)、>>(右移)、>>>(無符號右移)、&(與)、|(或)、^(異或)、~(取反)
-
位運算子運算的是整數的二進位制,操作的是整數
-
左移<<:將整數的二進位制數整體向左移,在空缺位補0【規律:<<n(左移n位) = 相當於原數乘2^n】
右移>>:將整數的二進位制數整體向右移,如果原整數為正數,則在空缺位補0;若為負數,則補1【規律:<<n(右移n位) = 相當於原數除以2^n】
無符號右移>>>:右移,補0
-
與運算&:12&5——寫成二進位制——只有都是1才1,其餘情況是0——結果:4
00001100——12
00000101——5
00000100——4
或運算|:12|5——寫成二進位制——只要有一個1就是1——結果:13
00001100——12
00000101——5
00001101——13
異或運算:125——寫成二進位制——兩者不相同就是1——結果:9
00001100——12
00000101——5
00001001——9
取反運算:12——寫成二進位制——包括最高位按位取反
00001100——12
11110011—— -13
三元運算子
-
三元運算子結構:(條件表示式)?表示式1:表示式2
-
注意幾點:條件表示式的結果須是布林型別
若條件表示式的結果為true,則執行表示式1;若條件表示式的結果為false,則執行表示式2
表示式1與表示式2的值要求可以統一為一個數據型別