Java基礎語法
- Java程式碼的基本格式:Java程式中程式碼分為結構定義語句和功能執行語句,結構定義語句用於宣告一個類或方法,後面帶{},功能執行語句後面一般需要加上冒號;Java中嚴格區分大小寫;為了便於閱讀,使用良好的格式進行程式設計排版;程式碼中一個連續字串不能夠分為兩行進行書寫;
- 識別符號的規則和規範:
規則:Java中包名、類名、介面名、常量名、變數名、方法名和引數名都稱之為識別符號,識別符號有任意順序的大小寫字母、數字、下劃線和美元符號組成。不能以數字開頭,不能使用關鍵字;
規範:包名所有字母使用小寫,和域名倒轉去掉WWW一樣,使用點來進行分級;類名和介面名每個單詞的首字母大寫;常量名所有字母大寫,單詞之間使用下劃線進行分隔;變數名和方法名第一個單詞首字母小寫,其餘單詞首字母大寫;命名要有意義,為了便於閱讀,定義名稱要見名知意; - 註釋的分類:註釋包括單行註釋、多行註釋和文件註釋;
- 常量的分類:常量包括整數常量、浮點數常量、字元常量、字串常量、布林常量、null
註釋
在程式開發工程中,用於解釋和說明程式的文字我們稱之為註釋,Java中的註釋分為以下幾種:單行註釋、多行註釋、文件註釋。
單行註釋
// … 註釋一行
//這是一條單行註釋複製程式碼
多行註釋解
/ … / 註釋若干行
/* 這是一段註釋,
它跨越了多個行 */複製程式碼
文件註釋
/* … / 註釋若干行,並寫入 javadoc 文件
/**
* ========================================
* <p/>
* 版 權:dou361.com 版權所有 (C) 2015
* <p/>
* 作 者:jjdxmashl
* <p/>
* 個人網站:http://www.dou361.com
* <p/>
* 版 本:1.0
* <p/>
* 建立日期:2017/2/13 16:25
* <p/>
* 描 述:
* <p/>
* <p/>
* 修訂歷史:
* <p/>
* ========================================
*/複製程式碼
關鍵字
瞭解Java關鍵字的含義及特點,掌握關鍵字使用的注意事項。
關鍵字的定義和特點
定義:被Java語言賦予了特殊含義的單詞
特點:關鍵字中所有字母都為小寫
關鍵字是電腦語言裡事先定義的,有特別意義的識別符號,有時又叫保留字,還有特別意義的變數。
Java的關鍵字對Java的編譯器有特殊的意義,他們用來表示一種資料型別,或者表示程式的結構等,關鍵字不能用作變數名、方法名、類名、包名和引數。
Java語言規定關鍵字不能作為識別符號。目前共有50個Java關鍵字,其中,"const"和"goto"這兩個關鍵字在Java語言中並沒有具體含義。Java語言把它們列為關鍵字,只是因為"const"和"goto"是其他某些計算機語言的關鍵字。複製程式碼
Java中所有的關鍵字
Abstract 抽象的,用在類的宣告中來指明一個類是不能被例項化的,但是可以被其它類繼承。一個抽象類可以使用抽象方法,抽象方法不需要實現,但是需要在子類中被實現
assert 用來進行程式除錯
boolean 基本資料型別之一,布林型別
break 用來改變程式執行流程,立刻從當前語句的下一句開始執行從。如果後面跟有一個標籤,則從標籤對應的地方開始執行
byte 基本資料型別之一,位元組型別
case 用來定義一組分支選擇,如果某個值和switch中給出的值一樣,就會從該分支開始執行。
catch 用來宣告當try語句塊中發生執行時錯誤或非執行時異常時執行的一個塊。
char 用來定義一個字元型別
catch 用在異常處理中,用來捕捉異常
char 基本資料型別之一,字元型別
class 類
const 保留關鍵字,沒有具體含義
continue 用來打斷當前迴圈過程,從當前迴圈的最後重新開始執行,如果後面跟有一個標籤,則從標籤對應的地方開始執行。
default 預設,例如,用在switch語句中,表明一個預設的分支
do 用來宣告一個迴圈,這個迴圈的結束條件可以通過while 關鍵字設定
double 用來定義一個double型別的變數
else 如果if語句的條件不滿足就會執行該語句。
enum 列舉
extends 表明一個型別是另一個型別的子型別,這裡常見的型別有類和介面
final 你只能定義一個實體一次,以後不能改變它或繼承它。更嚴格的講:一個final修飾的類不能被子類化,一個final修飾的方法不能被重寫,一個final修飾的變數不能改變其初始值。
finally 用來執行一段程式碼不管在前面定義的try語句中是否有異常或執行時錯誤發生。
float 用來定義一個浮點數變數
for 用來宣告一個迴圈。程式設計師可以指定要迴圈的語句,推出條件和初始化變數。
goto 保留關鍵字,沒有具體含義
if 用來生成一個條件測試,如果條件為真,就執行if下的語句。
implements 在類的宣告中是可選的,用來指明當前類實現的介面。
import 在原始檔的開始部分指明後面將要引用的一個類或整個包,這樣就不必在使用的時候加上包的名字。
instanceof 用來測試第一個引數的執行時型別是否和第二個引數相容。
int 用來定義一個整形變數
interface 用來定義一系列的方法和常量。它可以被類實現,通過
long 用來定義一個long型別的變數。
native 用來宣告一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的
new 用來建立新例項物件
null 空
private 用在方法或變數的聲中。它表示這個方法或變數只能被這個類的其它元素所訪問。
protected 在方法和變數的宣告中使用,它表示這個方法或變數只能被同一個類中的,子類中的或者同一個包中的類中的元素所訪問
public 在方法和變數的宣告中使用,它表示這個方法或變數能夠被其它類中的元素訪問。
return 用來結束一個方法的執行。它後面可以跟一個方法宣告中要求的值。
short 用來定義一個short型別的變數。
static 用來定義一個變數為類變數。類只維護一個類變數的拷貝,不管該類當前有多少個例項。"static" 同樣能夠用來定義一個方法為類方法。類方法通過類名呼叫而不是特定的例項,並且只能操作類變數。
strictfp 用來宣告FP_strict(單精度或雙精度浮點數)表示式遵循IEEE 754算術規範
super 表明當前物件的父型別的引用或者父型別的構造方法
switch 分支語句結構的引導詞
synchronized 表明一段程式碼需要同步執行
this 用來代表它出現的類的一個例項。this可以用來訪問類變數和類方法。
throw 允許使用者丟擲一個exception物件或者任何實現throwable的物件
throws 用在方法的宣告中來說明哪些異常這個方法是不處理的,而是提交到程式的更高一層。
transient 用來表示一個域不是該物件序列化的一部分。當一個物件被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包括進去的。
try 用來定義一個可能丟擲異常語句塊。如果一個異常被丟擲,一個可選的catch語句塊會處理try語句塊中丟擲的異常。同時,一個finally語句塊會被執行,無論一個異常是否被丟擲。
void 用在Java語言的方法宣告中說明這個方法沒有任何返回值。"void"也可以用來表示一句沒有任何功能的語句。
volatile 用在變數的宣告中表示這個變數是被同時執行的幾個執行緒非同步修改的。
while 用來定義一段反覆執行的迴圈語句。迴圈的退出條件是while語句的一部分。 複製程式碼
關於break和continue
continue 語句與break語句相關,但較少用到。continue語句用於使其所在的for、while或do-while語句開始下一次迴圈。在while與 do-while語句中,continue語句的執行意味著立即執行測試部分;在for迴圈語句中,continue語句的執行則意味著使控制傳遞到增量 部分。
識別符號
瞭解什麼是識別符號,識別符號的組成規則,以及識別符號使用時的注意事項。
識別符號特徵
1.識別符號可以由字母、數字、下劃線(_)、美元符($)組成,但不能包含 @、%、空格等其它特殊字元,不能以數字開頭。譬如:123name 則是不合法的
2.識別符號不能是 Java 關鍵字和保留字( Java 預留的關鍵字,以後的升級版本中有可能作為關鍵字),但可以包含關鍵字和保留字。如:不可以使用 void 作為識別符號,但是 Myvoid 可以
3.識別符號是嚴格區分大小寫的。 一定要分清楚 imooc 和 IMooc 是兩個不同的識別符號哦!
4.識別符號的命名最好能反映出其作用,做到見名知意。複製程式碼
Java中的名稱規範:
包名:多單片語成時所有字母都小寫。
xxx.yyy.zzz www.dou361.com
com
dou361
student
com.dou361.student複製程式碼
類名介面名:多單片語成時,所有單詞的首字母大寫。
XxxYyyZzz 複製程式碼
變數名和函式名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫。
xxxYyyZzz 複製程式碼
常量名:所有字母都大寫。多單詞時每個單詞用下劃線連線。
XXX_YYY_ZZZ 複製程式碼
常量與變數
理解常量與變數的含義,並掌握常量與變數的區別、變數的定義格式以及變數的賦值。
在程式中存在大量的資料來代表程式的狀態,其中有些資料在程式的執行過程中值會發生改變,有些資料在程式執行過程中值不能發生改變,這些資料在程式中分別被叫做變數和常量。
常量
- 由於在生活中,一些事物常常會發生改變,使用常量不足以滿足對事物的描述,因此需要使用到變數。Java語言是一種強型別語言,在使用變數時,必須有明確的資料型別,變數只有有了資料型別才有實際意義;
- 資料型別分為基本資料型別和引用資料型別:
基本資料型別:數值型:整數型:byte、short、int、long 浮點型:double float;字元型:char;布林型:Boolean;
引用資料型別:類、介面、陣列、列舉、註解、String;
常量代表程式執行過程中不能改變的值。
常量在程式執行過程中主要有2個作用:
1. 代表常數,便於程式的修改(例如:圓周率的值)
2. 增強程式的可讀性(例如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其數值分別是1、2、3和4)複製程式碼
常量的語法格式和變數型別,只需要在變數的語法格式前面新增關鍵字final即可。在Java編碼規範中,要求常量名必須大寫。
則常量的語法格式如下:
final 資料型別 常量名稱 = 值;
final 資料型別 常量名稱1 = 值1, 常量名稱2 = 值2,……常量名稱n = 值n;
例如:
final double PI = 3.14;
final char MALE=‘M’,FEMALE=‘F’;複製程式碼
在Java語法中,常量也可以首先宣告,然後再進行賦值,但是隻能賦值一次。
變數
用來不斷的存放同一型別的常量,並可以重複使用成為變數。為了方便的引用變數的值,在程式中需要為變數設定一個名稱,這就是變數名。例如在一個求和方法中,需要2個變數,一個是a引數,一個是b引數,在執行不同求和計算過程中,這兩個變數的值會改變。
由於Java語言是一種強型別的語言,所以變數在使用以前必須首先宣告,在程式中宣告變數的語法格式如下:
資料型別 變數名稱;
例如:int x;複製程式碼
從本質上講,變數其實是記憶體中的一小塊區域,使用變數名來訪問這塊區域,因此,每一個變數使用前必須要先申請(宣告),然後必須進行賦值(填充內容),才能使用。
語法格式如下:
資料型別 變數名稱 = 值;
例如:int x = 10;複製程式碼
final、static修飾
1.被final修飾而沒有被static修飾的類的屬性變數只能在兩種情況下初始化:(必須初始化)
在它被宣告的時候賦值
在建構函式裡初始化複製程式碼
2.被static修飾而沒有被final修飾的類的屬性變數只能在兩種情況下初始化:(可以不初始化)
在它被宣告的時候賦值
在靜態或非靜態快裡初始化複製程式碼
3.同時被final和static修飾的類的屬性變數只能在兩種情況下初始化:(必須初始化)
在它被定義的時候
在類的靜態塊裡初始化
特別對於初始化時候呼叫丟擲異常的建構函式,初始時候注意,特別是在實現單例模式時(只能這麼初始化)複製程式碼
資料型別
掌握Java語言的資料型別,如基本資料型別:byte、short、int、long、float、double、char、boolean,以及引用型別:類、介面、陣列。
Java語言是強型別語言,對於每一種資料都定義了明確的具體資料型別,在記憶體總分配了不同大小的記憶體空間
Java四類八種資料型別
型別 佔用儲存空間 表數範圍
byte 1位元組 -128~127
short 2位元組 -2^15~2^15-1
int 4位元組 -2^31~2^31-1
float 4位元組 -3.403E38~3.403E38
long 8位元組 -2^63~2^63-1
double 8位元組 -1.798E38~1.798E38複製程式碼
整形,字元型,浮點型的資料在混合運算中相互轉換,轉換時遵循以下原則:
1:容量小的型別預設轉換為容量大的資料型別;資料型別按容量大小排序為:
byte,short,char->int->long->float->double複製程式碼
byte,short,char之間不會互相轉換,他們三者在計算時首先會轉換為int型別
2:容量大的資料型別轉換為容量小的資料型別時,要加上強制轉換符,但可能造成精度降低或溢位;使用時要格外注意。
3:有多種型別的資料混合運算時,系統首先自動的將所有資料轉換成容量最大的那一種資料型別,然後再進行計算。
Java 各整數型別有固定的表數範圍和欄位長度,其不受具體作業系統的影響,以保證Java程式的可移植性。Java語言的整型常量預設為int型,宣告long型常量可以後加‘ l ’或‘ L ’ ,如:
int i1 = 600; //正確
long l1 = 88888888888L; //必須加l否則會出錯複製程式碼
與整數型別類似,Java浮點型別有固定的表數範圍和欄位長度,不受平臺影響。
Java 浮點型別常量有兩種表示形式,
十進位制數形式,如:
3.14
314.0複製程式碼
科學記數法形式,如:
3.14e2
3.14*10^2複製程式碼
Java 浮點型常量預設為 double 型,如要宣告一個常量為 float 型,則需在數字後面加 f 或 F ,如:
double d = 12345.6; //正確
float f = 12.3f; //必須加f否則會出錯複製程式碼
運算子
熟練掌握Java中的運算子:
算術運算子
賦值運算子
符號:
= , +=, -=, *=, /=, %=複製程式碼
示例:
int a,b,c; a=b=c =3;
int a = 3; a+=5;等同運算a=a+5;複製程式碼
比較運算子
符號:
== , !=, <, >, <=, >=, instanceof複製程式碼
示例:
4 == 3 false
4 != 3 true
"hello" instanceof String true
注1:比較運算子的結果都是boolean型,也就是要麼是true,要麼是false。
注2:比較運算子“==”不能誤寫成“=” 。複製程式碼
邏輯運算子
邏輯運算子用於連線布林型表示式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。
“&”和“&&”的區別:
單&時,左邊無論真假,右邊都進行運算;
雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那麼右邊不參與運算。
“|”和“||”的區別同理,雙或時,左邊為真,右邊不參與運算。
異或( ^ )與或( | )的不同之處是:當左右都為true時,結果為false。複製程式碼
位運算子
符號:
<< , >>, >>>, &, |, ^, ~複製程式碼
示例:
3 << 2 = 12 --> 3*2*2=12
3 >> 1 = 1 --> 3/2=1
3 >>> 1 = 1 --> 3/2=1
6 & 3 = 2
6 | 3 = 7
6 ^ 3 = 5
~6 = -7
<<:就是將左邊的運算元在記憶體中的二進位制資料左移右邊運算元指定的位數,右邊被移空的部分補0。相當於乘與2的倍數
>>:右移稍微複雜一點,如果最高位是0,左邊被移空的位就填入0;如果最高位是1,左邊被移空的位就填入1。相當於除以2的倍數
>>>:無論最高位是1還是0,左邊被移空的高位都填入0。講一個應用。複製程式碼
三目運算子。
格式
(條件表示式)?表示式1:表示式2;
如果條件為true,運算後的結果是表示式1;
如果條件為false,運算後的結果是表示式2;複製程式碼
示例:
獲取兩個數中大數。
int x=3,y=4,z;
z = (x>y)?x:y;//z變數儲存的就是兩個數的大數。複製程式碼
- 算術運算子:+ 、-、 *、 、% 、+、 -、 +、 ++、 —
- 賦值運算子:+= 、-= 、*=、= 、%= 、=
- 比較運算子:== 、!= 、< 、>、 <= 、>=
- 邏輯運算子:&、 |、 ^、 ! 、&& 、||
- 位運算子:&、 |、 ~ 、^ 、<<、 >> 、>>>
- 優先順序:
流程控制語句
- 循序語句:執行語句都是順序語句,由上到下,由左到右;
- 選擇語句:if if…else if…else if…else switch…case switch…case…defualt
- 迴圈語句:do…while while for foreach
- 判斷語句:try…catch try…catch…defualt
- 跳轉語句:goto continus break
瞭解什麼是流程控制語句,掌握以下流程控制語句:順序結構、選擇結構、迴圈結構,並能夠通過流程控制語句實現特定的功能。
順序結構
if(條件表示式)
{
執行語句;
}
if(條件表示式)
{
執行語句;
}
else
{
執行語句;
}
if(條件表示式)
{
執行語句;
}
else if (條件表示式)
{
執行語句;
}
……
else
{
執行語句;
}複製程式碼
選擇結構
switch(表示式)
{
case 取值1:
執行語句;
break;
case 取值2:
執行語句;
break;
…...
default:
執行語句;
break;
}複製程式碼
switch語句特點:
a,switch語句選擇的型別只有四種:byte,short,int , char。
b,case之間與default沒有順序。先執行第一個case,沒有匹配的case執行default。
c,結束switch語句的兩種情況:遇到break,執行到switch語句結束。
d,如果匹配的case或者default沒有對應的break,那麼程式會繼續向下執行,執行可以執行的語句,直到遇到break或者switch結尾結束。複製程式碼
迴圈結構
代表語句:while , do while , for
for語句格式::
for(初始化表示式;迴圈條件表示式;迴圈後的操作表示式)
{
執行語句;
}複製程式碼
注意:
a,for裡面的連個表示式執行的順序,初始化表示式只讀一次,判斷迴圈條件,為真就執行迴圈體,然後再執行迴圈後的操作表示式,接著繼續判斷迴圈條件,重複找個過程,直到條件不滿足為止。
b,while與for可以互換,區別在於for為了迴圈而定義的變數在for迴圈結束就是在記憶體中釋放。而while迴圈使用的變數在迴圈結束後還可以繼續使用。
c,最簡單無限迴圈格式:while(true) , for(;;),無限迴圈存在的原因是並不知道迴圈多少次,而是根據某些條件,來控制迴圈。複製程式碼
while語句格式:
while(條件表示式)
{
執行語句;
}複製程式碼
先判斷邏輯表示式的值。若=true.則執行其後面的語句,然後再次判斷條件並反覆執行,直到條件不成立為止
do while語句格式:
do
{
執行語句;
}while(條件表示式);複製程式碼
先執行語句,再判斷邏輯表示式的值,若為true,再執行語句,否則結束迴圈。
方法
掌握方法的定義及格式,並能正確的呼叫方法,理解方法的呼叫過程,同時清楚方法的注意事項;掌握方法過載及其特點。
- 什麼是方法:完成一些事情的時候,通常需要使用到不同的功能,如果所有功能都寫到一起,不利於程式碼的維護和閱讀。因此我們可以對完成特定功能的程式碼進行封裝,封裝好的不同功能的程式碼就稱為方法或函式;
- 什麼是方法過載:在同一個類中,方法名相同,引數列表不同的方法稱為方法過載。
- 成員變數與區域性變數的區別:初始化值:成員變數都有預設初始化值,區域性變數沒有預設初始化值,使用之前必須先賦值;定義位置:成員變數定義在類中方法外,區域性變數定義在方法中;儲存位置:成員變數儲存在堆中,區域性變數儲存在棧中;生命週期:成員變數隨著物件的建立而存在,隨著物件的消失而消失,區域性變數隨著方法的呼叫而存在,隨著方法呼叫完畢而消失;
函式的格式:
修飾符 返回值型別 函式名(引數型別 形式引數1,引數型別 形式引數2,…)
{
執行語句;
return 返回值;
}
返回值型別:函式執行後的結果的資料型別。
引數型別:是形式引數的資料型別。
形式引數:是一個變數,用於儲存呼叫函式時傳遞給函式的實際引數。
實際引數:傳遞給形式引數的具體數值。
return:用於結束函式。
返回值:該函式運算的結果,該結果會返回給呼叫者。複製程式碼
函式的特點
定義函式可以將功能程式碼進行封裝
便於對該功能進行復用
函式只有被呼叫才會被執行
函式的出現提高了程式碼的複用性
對於函式沒有具體返回值的情況,返回值型別用關鍵字void表示,那麼該函式中的return語句如果在最後一行可以省略不寫。複製程式碼
函式的過載
在同一個類中,允許存在一個以上的同名函式,只要它們的引數個數或者引數型別不同即可。與返回值型別無關,只看引數列表。過載示例如下:
//返回兩個整數的和
int add(int x,int y){return x+y;}
//返回三個整數的和
int add(int x,int y,int z){return x+y+z;}
//返回兩個小數的和
double add(double x,double y){return x+y;}複製程式碼
陣列
瞭解陣列的概念,掌握陣列的定義格式、靜態初始化、動態初始化,並能夠理解Java中陣列的記憶體圖解。熟練掌握陣列的遍歷、獲取最值、陣列元素逆序、陣列元素查詢、陣列排序和二分查詢,以及二維陣列的定義格式及初始化。
有時候需要定義多個變數時,而這些變數又具有一定的共性時就可以定義成陣列,陣列是用來儲存一組相同資料型別資料的,陣列可以儲存基本資料型別和引用資料型別。
同一種型別資料的集合。其實陣列就是一個容器。可以自動給陣列中的元素從0開始編號,方便操作這些元素。
格式1:
元素型別[] 陣列名 = new 元素型別[元素個數或陣列長度];
示例:int[] arr = new int[5];複製程式碼
格式2:
元素型別[] 陣列名 = new 元素型別[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};複製程式碼
二維陣列
格式1:int[][] arr = new int[3][2];
定義了名稱為arr的二維陣列
二維陣列中有3個一維陣列
每一個一維陣列中有2個元素
一維陣列的名稱分別為arr[0], arr[1], arr[2]
給第一個一維陣列1腳標位賦值為78寫法是:arr[0][1] = 78;複製程式碼
格式2:int[][] arr = new int[3][];
二維陣列中有3個一維陣列
每個一維陣列都是預設初始化值null
可以對這個三個一維陣列分別進行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];複製程式碼
陣列記憶體結構
記憶體結構
Java程式在執行時,需要在記憶體中的分配空間。為了提高運算效率,有對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。
棧記憶體
用於儲存區域性變數,當資料使用完,所佔空間會自動釋放。複製程式碼
堆記憶體
陣列和物件,通過new建立的例項都存放在堆記憶體中。
每一個實體都有記憶體地址值
實體中的變數都有預設初始化值
實體不在被使用,會在不確定的時間內被垃圾回收器回收複製程式碼