本文在接着上文介紹完Java簡介相關的知識點後,介紹Java基礎中的標識符、變量與數據類型等基礎內容。
前言
- javadoc註釋
java中的註釋有三種,分單行註釋,普通多行註釋和javadoc註釋。單行註釋和普通多行註釋不用多說,javadoc註釋是比較專業的註釋,該註釋會被javadoc.exe工具解析提取並生成幫助文檔。
/**
* javadoc註釋
* javadoc註釋
* javadoc註釋
* @param args
*/
- 類體和方法體
類體爲類中的用 {} 括起來的部分,方法體爲方法中的用 {}括起來的部分 - 程序入口
在一個Java文件中可以定義多個Class,並且不一定非要有public class;但若定義了一個public class則該類名要和文件名相同,並且只能有一個public class;在該文件的每個class中都可以編寫main方法,都可以設定程序入口,要執行x.class中的main方法,則執行java x;在多個類中,要運行某一個類,則該類中必須有一個程序入口,即main函數
標識符
- 什麼是標識符?
在java源程序中,凡是程序員有權利自己命名的單詞都是標識符。
標識符在EidtPlus編輯器當中以黑色字體高亮顯示 - 標識符可以標識什麼元素?
類名、方法名、變量名、接口名、常量名… - 標識符的命名規則
注意:命名規則是語法,不按語法來編譯器會報錯
- 只能以“數字、字母、下劃線、美元符號”組成
- 不能數字開頭
- 嚴格區分大小寫
- 關鍵字不能做標識符
- 理論上無長度限制,但最好不要太長
- 標識符的命名規範
注意:規範不屬於語法,沒有遵循規範編譯器不會報錯,但在實際開發中也是必須遵循的
- 命名遵循“見名知意”的原則,如,String username, password
- 遵守駝峯命名方式,如,UserService,CustomerService
- 類名、接口名首字母大寫,後面每個單詞首字母大寫
- 變量名、方法名首字母小寫,後面每個單詞首字母大寫
- 常量名:全部大寫
字面值
- 什麼是字面值?
字面值就是數據,數據在顯示世界中是分門別類的,在計算機編程語言當中也是有類別的,包括整數型字面值(10,100),浮點型字面值(3.14),布爾型字面值(true, false),字符串型字面值(“abc”, “中國人”),字符型字面值(‘A’, ‘人’)
- 字面值佔用的內存空間
相同的字面值佔用不用的內存空間,因此後面引出了變量的概念,在變量中內存空間得到重複的使用。
變量
- 分類
成員變量:方法外、類的內部定義的變量
局部變量:方法或語句塊內部定義的變量 - 變量聲明和使用
對於局部變量而言,必須先聲明,再賦值,才能訪問
如定義int i; 程序執行到這裏,內存空間並沒有開闢出來,變量 i 並沒有初始化,所以賦值之前是無法訪問的。
數據類型
- 數據類型的作用
不同數據類型的數據佔用空間大小不同,數據類型的作用是指導JVM在運行程序的時候給該數據分配多大的內存空間。 - 基本數據類型
Java中的基本數據類型包括四大類八小類:
第一類:整型
byte, short, int, long
第二類:浮點型
float, double
第三類:布爾型
boolean
第四類:字符型
char - 基本數據類型佔用空間情況
按上面的順序,記爲:1, 2, 4, 8, 4, 8, 1, 2 【單位:字節】 - 取值範圍
類型 | 字節數 | 取值範圍 |
---|---|---|
byte | 1 | [-128~127], 2^7-1 |
short | 2 | [-32768~32767],2^15-1 |
int | 4 | [-2147483648~2147483647],2^31-1 |
long | 8 | ~ |
float | 4 | ~ |
double | 8 | ~ |
boolean | 1 | [true, false] |
char | 2 | [0, 65536],2^16 |
字符編碼
- 何爲字符編碼?
- 在八種基本數據類型當中,byte, short, int, long, float, double這七種數據類型計算機表示的比較容易,因爲底層是數字,在十進制和二進制數字之間存在一種固定的轉換規則;但char屬於現實時間中的文字,不存在任何轉換關係。
- 爲了讓計算機可以表示顯示世界當中的文字,我們需要進行人爲的干涉,需要人負責提前制定好“文字”和“二進制”之間的對照關係,這種對照轉換關係被稱爲:字符編碼。
- ASCII碼
計算機最初只支持英文,最先出現的字符編碼是ASCII碼
‘a’ - - -> 97 【0110 0001】
‘A’ - - -> 65
‘0’ - - -> 48
按照ASCII編碼:‘a’ - - -> 0110 0001
按照ASCII解碼:‘0110 0001’ - - -> ‘a’
- 爲什麼會出現亂碼
當解碼和編碼採用不是同一套對照表(字符編碼),則出現了亂碼問題 - ISO-8859-1
隨着計算機的發展,後來出現的一種編碼方式,是國際化標準組織ISO制定的,這種編碼方式支持西歐語言(德語、法語、西班牙語、葡萄牙語等),向上兼容ASCII碼,仍然不支持中文,這種編碼方式是ISO-8859-1,又被稱爲latin-1 - GBK
隨着計算機向亞洲發展,計算機開始支持中文、日文、韓文等國家文字,其中支持簡體中文的編碼方式:
GB2312 < GBK < GB18030(字典厚度)
支持繁體中文的編碼:大五碼 < big5 > - unicode編碼
後來出現的一種編碼方式,統一了全球所有的文字,容量較大,這種編碼方式叫做:unicode編碼
unicode編碼方式有很多具體的實現:
UTF-8(較多使用)、UTF-16、UTF-32
java語言源代碼採用的是unicode編碼方式,所以“標識符”可以用中文
nativie2ascii
JDK中自帶的native2ascii.exe程序能夠將文字轉換爲unicode編碼,運行該程序輸入要轉換的文字,即可得到unicode編碼,如‘中’對應的編碼爲\u4e2d
char c = ‘\u4e2d’; System.out.println( c ); //打印輸出漢字 ‘中’
轉義字符
- 轉義字符含義
反斜槓在java語言中具有轉義的作用。在轉義字符中,並非定義一個字符串而是定義的一個字符。
char c = ‘\n’; 相當於換行符(回車鍵)
char c = ‘\t’; 相當於製表符(tab鍵)
char c = ‘\’’; 相當於單引號
char c = ‘\u4e2d’; 表示轉換爲unicode編碼
char c= ‘\\’; 相當於反斜槓(將具有特殊意義的 \ 轉爲普通含義的 \,若只寫一個反斜槓會報未結束的字符錯誤,因爲 \’ 會把斜槓後面的單引號轉義爲不具有特殊含義的普通單引號,從而左邊的單引號缺少了結束的單引號字符,編譯報錯)
整數類型
- Java語言中的“整數型字面值”被默認當做
int類型
來處理,要讓這個整數型字面值被當做long類型來處理的話,需要在“整數型字面值”後面添加 l/L,建議使用大寫的L。 - Java語言中的整數型字面值有三種表示方式:
第一種方式:十進制【默認的方式】常用
第二種方式:八進制【在編寫八進制整數型字面值的時候需要以0開始】
第三種方式:十六進制【在編寫十六進制整數型字面值的時候需要以0x開始】 - 類型轉換
小容量轉大容量爲自動類型轉換
,大容量轉小容量爲強制類型轉換
自動類型轉換
:如,long x = 456; //因爲456整數型字面值被當做int型,佔4個字節,而x爲long類型,佔8個字節,會發生自動類型轉換;
強制類型轉換
:如,int y = (int) 445L; //因爲445L爲long類型,y爲int類型,將大容量轉換爲小容量的處理方式是將左邊的二進制砍掉【所有的數據強轉都是這樣完成的】
強制類型轉換原理:
以int x = (int)128L;爲例,因爲128L爲long類型,佔8個字節
所以原始數據表示爲00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000
砍掉左邊四字節:00000000 00000000 00000000 10000000
- 當一個整數字面值沒有超出byte, short, char的取值範圍,這個字面值可以直接賦值給byte,short,char類型的變量。這種機制SUN是允許的,目的是爲了方便程序員的編程。
浮點類型
- 在Java語言中的“浮點型字面值”被默認當做
double類型
來處理,要想該字面值被當做float類型來處理,需要在字面值後面添加f/F。 - double和float在計算機內部二進制存儲的時候存儲的都是
近似值
。計算機的資源是有限的,要用優先的資源存儲無限的數據(如無限循環的小數)只能存儲近似值。
布爾類型
- 在Java語言中boolean類型只有兩個值,true、false,沒有其他值。不像C語言當中,0和1可以表示假和真。
- 在底層存儲的時候boolean類型佔用1個字節,因爲實際存儲的時候false底層是0,true底層是1。
基本數據類型的轉換規則
- 八種基本數據類型當中除布爾類型之外剩下的7種類型之間都可以相互轉換
- 小容量向大容量轉換,稱爲自動類型轉換,容量從小到大排序:
byte < short < int < long < float < double
char <
注:任何浮點型不管佔用多少字節,都比整數型容量大
char和short可表示的種類數量相同,但是char可以取更大的正整數 - 大容量轉換成小容量,叫做強制類型轉換,需要加強制類型轉換符,程序才能編譯通過,但是在運行階段可能會損失精度,所以謹慎使用。
- 當整數字面值沒有超出byte,short,char的取值範圍,可以直接賦值給byte,short,char類型的變量。
- byte,short,char混合運算的時候,各自轉換成int類型再做運算。
- 多種數據類型混合運算,先轉換成容量最大的那種類型再做運算。
運算符
運算符類型 | 取值 |
---|---|
算數運算符 | +,-,*,/,++,- -,% |
關係運算符 | <,<=,>,>=,==,!= |
布爾運算符 | &&,||,&, |, !,^ |
位運算符 | &, |, ~,^,>>,>>>,<< |
賦值類運算符 | =,+=,-=,*=,/=,%= |
字符串連接運算符 | + |
條件運算符 | ? : |
其他運算符 | instanceof ,new |
邏輯運算符
:
& 邏輯與, | 邏輯或,&& 短路與,|| 短路或
位運算符
:
& 按位與(真真爲真,真假爲假)
| 按位或(假假爲假,其餘全真)
^ 按位異或(不同爲真,相同爲假)
~ 按位非 (真則假,假則真)
>> 右移
>>> 右移,左邊空出的位以0填充
<< 左移
//邏輯與和短路與
//邏輯與
int x = 10;
int y = 8;
System.out.println( x < y & ++x < y);// false
System.out.println(x);// 11
//短路與
int a = 10;
int b = 8;
System.out.println( a < b && ++x < y); //false
System.out.println(a);// 10
- 從某種角度來看,短路與更智能。由於後面的表達式可能不執行,所以執行效率較高。這種方式在實際的開發中使用較多。短路與比邏輯與使用的多。短路與更常用。
- 但是,在某些特殊的業務邏輯中,要求運算符兩邊的算子必須全部執行,此時必須使用邏輯與,不能使用短路與,使用短路與可能導致右邊的表達式不執行。
- 短路與:第一個表達式爲false,發生短路與;短路或:第一個表達式爲true,發生短路或。
運算符優先級列表
賦值運算符
- 擴展的賦值運算符能夠進行強制類型轉換
byte b = 10; //沒有超出byte類型可以直接賦值
b = b + 5; //混合運算時各自轉成int再做運算,b+5爲int型,b爲byte型,編譯報錯,需要進行強制類型轉換
//擴展的賦值運算符
byte x = 10;
x += 5;//編譯正確,等同於x = (byte)(x+5),不等於x = x + 5;
連接運算符
- +運算符在java語言中有兩個作用:加法運算求和,字符串的連接運算
- 當“+”運算符兩邊的數據都是數字的話,一定是進行加法運算
- 當“+”兩邊的數據只要有一個數據是字符串,一定會進行字符串連接運算,並且連接運算之後的結果還是一個字符串類型
- 在一個表達式當中可以出現多個“+”,在沒有添加小括號的前提下,遵循自左向右的順序依次運算(可以做加法運算,也可以做字符串連接運算)