java
一、java的基本語法
1.java代碼的基本格式
java中程序代碼都必須放在一個勒種。類需要使用class關鍵字定義,在class前面可以有一些修飾符,如下:
修飾符 class 類名{
程序代碼
}
2.在編寫java代碼時,需要特備的關鍵點:
-
java中的程序代碼可分爲結構定義語句和功能執行語句,其中,結構定義語句用於聲明一個類或方法,功能執行語句用於實現具體的功能。每條功能執行語句的最後都必須用分號(;)結束。
System.out.println("Hello World")
-
java語句嚴格區分大小寫。例如,定義一個類是,Computer和computer是兩個完全不同的符號,在使用時務必注意
-
雖然Java沒有嚴格要求用什麼樣的格式來編排程序代碼,但是,出於可讀性考慮,應該讓自己編寫的程序代碼整齊美觀、層次清晰。
-
Java程序中第一句連續的字符串不能分開在兩行中書寫,如果實在太長可以利用+號將兩個字符串進行連接
二、java中的註釋
在編寫程序時,爲了時代嗎易於閱讀。通常會在實現風能的同事爲代碼加一些註釋
註釋是對程序的某個狗能或者某行代碼的解釋說明,它旨在Java源文件中有效,在編譯程序時編譯器會忽略掉這些註釋信息,不會將其編譯到class字節碼文件中去。
java的註釋分爲三種:
1.單行註釋
通常用於程序中的某一行代碼進行解釋,用符號“//”表示,“//”後面爲被註釋的內容,具體如下
int c=10 //定義一個整型變量
2.多行註釋
多行註釋中可以出現單行註釋,但是不能再次出現多行註釋
/*
hello
這是註釋
*/
3.文檔註釋
以/**
開頭,並且在註釋內容末尾以*/
結尾。
三、Java中的標識符
在編譯過程中,經常需要在程序定義一些符號來標記一些名稱,如:包名,類名,方法名,參數名,變量名等,這些符號成爲標識符。
標識符可以由仍以順序的大小寫字母、數字、下劃線和美元符號組成,但不能以數字開頭,不能是Java中的關鍵字。
建議初學者在定義標識符時還應該遵循以下規則:
- 包名所有字母一律小寫
- 類名和接口名每個單詞的字母要大寫
- 常量名所有字母都要大寫
- 變量名和方法名的第一個單詞首字母小寫,從第二個單詞開始每個單詞首字母大寫
- 在程序中,應該儘量使用有意義的英文的單詞來定義標識符,使得程序便於閱讀。
四、Java中的關鍵字
關鍵字時編輯語言裏實現定義好並賦予特殊含義的單詞,也稱做保留字。
abstract | boolean | break | byte | case | catch | char |
---|---|---|---|---|---|---|
const | class | continue | default | do | double | else |
extend | false | final | finallly | float | for | goto |
if | implements | import | instanceof | int | interface | long |
native | new | static | package | private | protected | public |
return | short | transient | strictfp | super | switch | this |
throw | throws | null | true | try | void | volatile |
while | synchronized |
五、java中的常量
常量就是在程序中固定不變的值,是不能改變數據的。
在java中包括整型常量、浮點型常量、布爾常量、字符常量等
1.整型常量
整型常量是幀數類型的數據,它的表現形式有四種,具體如下:
- 二進制
- 八進制
- 十進制
- 十六進制
2.浮點常量
浮點數長了兩就是數學中用到的小數,分爲float和double。單精度浮點數後面以F或f結尾,雙精度後面以D或d結尾,也可以不加,則默認爲雙精度。
3.字符常量
字符串常量用於表示一個字符,一個字符串常量要用一對英文半角格式單引號(’’)引起來,它可以是英文字母、數字、標點符號、以及由轉移序列來表示的特殊字符。'a' '1' '&' '\u11000'
注:java採用unicode字符集。
4.字符串常量
字符串常量用一連串的字符,一個字符串常量要用一對英文半角格式的雙引號("")引起來。
一個字符串可以包含一個或多個字符,也可以不包含任何字符,即長度爲零。
5.布爾常量
布爾常量即布爾型的兩個值true和false,該常量用於區分一個事物的真與假。
6.null常量
null常量只有一個值null,表示對象的引用爲空。
六、變量的定義
在程序運行期間,隨時可能產生一些臨時數據,應用程序會將這些寫數據保存在一些內存單元中,每個內存單元都用一個標識符來標識。這些內存單元稱之爲變量,定義的標識符就是變量名,內存單元中存儲的數據就是變量的值。
java是一門強類型的編程語言,它對變量的數據類型有嚴格的限定。在定義變量時必須聲明變量的類型,在爲變量賦值時必須賦予和變量同一種類型的值,否則程序會報錯。
1.整數類型變量
用來存儲整數數值,即沒有小數部分的值
整數類型分爲以下四種
類型名 | 佔空間 | 取值範圍 |
---|---|---|
byte | 8位(1個字節) | -27~27-1 |
short | 16位(2個字節) | -215~215-1 |
int | 32位(4個字節) | -231~231-1 |
long | 64位(8個字節) | -263~263-1 |
佔用空間指的是不同類型的變量佔用的內存大小
取值範圍是變量存儲的值不能超出的範圍
2.浮點類型
浮點數類型變量用來存儲小數數值
浮點數類型分爲兩種:單精度浮點數和雙精度浮點數。
類型名 | 佔用空間 |
---|---|
float | 32位(4個字節) |
double | 64位(8個字節) |
3.字符類型變量
用於存儲一個單一字符,在java中用char表示
每個char類型的字符串變量都會佔用2個字節
複製時,要用英文半角格式的單引號(’’)吧字符串括起來。也可以賦值0~65535範圍內的整數,計算機會自動講這些整數轉化爲所對應的字符。
4.布爾類型變量
布爾類型變量用來存儲布爾值,在java中用boolean表示,該類型變量只有兩個值:true和false。
七、變量的類型轉化
當把一種數據類型的值賦值給另一種數據類型的變量時,需要進行數據轉化。
根據轉化的方式不同,數據類型轉化可分爲兩種:自動類型轉化和強制類型轉化。
1.自動類型轉化
也叫作隱式類型轉化,指的是兩種數據類型在轉化的過程中不需要顯示的進行聲明。
要實現自動類型轉化,必須同時滿足兩個條件:
- 一是兩種數據彼此兼容
- 而是目標類型的取值範圍大於源類型的取值範圍。
byte b=3;
int x=b; // 程序把byte類型的變量b轉化成了int類型,無需特殊聲明
1.整數類型之間可以實現轉化,如byte類型的數據合一賦值給short,int,long類型的變量等。
2.整數類型轉化成float類型,如byte,char,short,int類型的數據可以賦值給float類型的變量。
3.其它類型的轉化爲double類型,如byte,char,short,int,long,float類型的數據可以複製給double類型的變量。
2.強制類型轉化
強制類型轉化也叫顯式類型轉化,指的是兩種數據類型之間的轉化需要進行顯式的聲明
當兩種類型彼此不兼容,或者目標類型取值範圍小於原類型時,自動類型轉化無法進行,這是就需要強制類型轉換。
目標類型 變量 = (目標類型)值
int num = 4;
byte b = (byte)num;
所謂表達式是指由變量和運算符組成的一個算式。變量在表達式中進行運算時,也有可能發生自動類型轉化,這就是表達式數據類型的自動提升。
八、變量的作用域
變量需要在它的作用範圍內纔可以被使用,這個作用範圍成爲變量的作用域。
在程序中,變量一定會被定義在某一對大括號中,該大括號所包含的代碼區域便是這個變量的作用域。
九、算數運算符
與c語言類似,其中將取模改爲%
%,++i,i++,--i,i--
並且在取模運算時,運算結果的正負取決於被模數的符號,與模數的符號無關。7%(-3)==1
十、賦值運算符
=,+=,-=,*=,/=,%=
1.在賦值運算中,需要注意以下幾點:在java中可以通過一條賦值語句對多個變量進行賦值
int x,y,z;
x=y=z=5; //這樣是爲三個變量同時賦值
int x=y=z=5;//這樣寫是錯誤的
2.除了“=”,其他都是特殊的賦值運算符。
3.在爲變量賦值時,當兩種類型彼此不兼容,或者目標類型取值範圍小於源類型時,需要進行強制類型轉化。然而在使用特殊賦值運算符時,強制類型轉化會自動完成,程序不需要做任何顯示聲明。
short s = 3;
int i = 5;
s = (short)i;
s += i;//以上兩種都是強制轉化
十一、比較運算符
==,!=,<,>,<=,>=
比較運算符在使用時需要注意一個問題,不能將比較運算符“==”攜程賦值運算符“=”
十二、邏輯運算符
&,|,^,!,&&,||
依次爲與,或,異或,非,短路與,短路或
短路與:只有左右兩邊同時爲t時才返回t,但是如果左邊爲true時,右邊就不在運算。
短路或:只有左右兩邊同時爲f時才返回f,但是如果左邊爲f時,右邊就不進行運算。
^:當兩邊的布爾值相同時,結果爲t,否則爲f。
在使用邏輯運算符過程中,需要注意邏輯運算符可以針對結果爲布爾值的表達式進行運算。如:x>3 && y!=0
int x=0;
int y=0;
int z=0;
boolean a,b;
a=x>0&y++>1 //整個爲f,此時a爲false,y爲1
a=x>0&&z++>1 //整個爲f,此時a爲false,z爲0
十三、運算符優先級
優先級 | 運算符 |
---|---|
1 | . [] () |
2 | ++ – ~ ! |
3 | * / % |
4 | + - |
5 | << >> >>> |
6 | < > <= >= |
7 | == != |
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ? |
14 | = *= /= += -= %= <<= >>= >>>= &= ^= |= |
十四、if條件語句
if條件語句分爲三種語法格式,具體如下:
- if語句
- if……else語句
- if……else if……if語句
1.if語句
if語句指如果滿足某種條件,就進行某種處理,其語法格式如下:
if (條件語句)
{
代碼塊
}
2.if……else語句
if (判斷條件){
執行語句1
}else{
執行語句2
}
3.特殊的三元運算
判斷條件 ? 表達式1 : 表達式2
4.if……else if……else語句
if (判斷條件){
執行語句1
}else if(判斷條件){
執行語句2
……
}else{
執行語句3
}
十五、switch語句
switch語句也是一種常見的選擇語句,和id條件語句不同,它只能正對某個表達式的值做出判斷,從而決定執行哪一段代碼。
switch(表達式){
case 目標值1:
執行語句1
break;
case 目標值2:
執行語句2
break;
……
case 目標值n:
執行語句n
break;
default:
執行語句n+1
break;
}
在switch語句中,使用switch關鍵字來描述一個表達式,使用case關鍵字來描述和表達式結果比較的目標值,當表達式的值和某個目標值匹配時,會執行對應case下的語句。
需要注意:switch語句中的表達式只能是byte,short,char,int,枚舉(1.5引入),String(1.7引入)的值,否則傳入其他值,會報錯。
在使用switch語句的過程中,如果多個case條件後面的執行語句是一樣的,則該執行語句中需書寫一次即可。
十六、while循環語句
while(循環條件){
執行語句
……
}
例:
int x=1;
while(x<=4){
Systemm.out.println(x);
x++;
}
十七、do……while循環語句
do{
執行語句
……
}while(循環條件);
例:
int x=1;
do{
Systemm.out.println(x);
x++;
}while(x<=4);
十八、for循環語句
for (初始化表達式;循環條件;操作表達式){
執行語句
……
}
例:
for(int i=0;i<=4;i++){
System.out.println(i);
}
二十、循環嵌套
循環嵌套是指在一個循環語句的循環體中再定義一個循環語句的語法結構。while、do……while、for循環語句都可以進行嵌套,並且他們之間也可以互相嵌套,最常見的是for循環中嵌套for循環。
二十一、跳轉語句(break、continue)
跳轉語句用於實現循環執行過程中流程的跳轉。
- break語句:在用switch條件語句和循環語句中,它的叢是終止某個case並跳出switch結構。
- continue語句:在循環語句中,它的作用是終止本次循環,執行下一個循環。
二十二、方法
爲了解決代碼重新股編寫的問題,可以將重複使用的代碼取出放入{}中,並未這段代碼取個名字,這樣每次想執行這些代碼就可以調用這個名字來運行。
修飾符 返回值類型 方法名([參數類型 參數名1,參數類型 參數名2,.....]){
執行語句
……
return 返回值;
}
修飾符:是對訪問權限的限定,例如public、static都是修飾符
返回值類型:用於限定方法返回值的數據類型
參數類型:用於限定調用方法時傳入參數的數據類型
參數名:是一個變量,用於接收調用方法是傳入的數據
return關鍵字:用於結束方法以及返回方法指定類型的值
返回值:被return語句返回的值,該值會返回調用者
二十三、重載
定義:函數名相同,但是參數不同(參數個數,參數類型不同)
public static int sum(int a,int b)
{
return a+b
}
public ststic int sum(int a,int b,int c)
{
return a+b+c
}
二十四、數組
數組是一組數據的集合,數組中的每個元素被稱爲元素,在數組中可以存放仍以類型的元素,但同一個數組中存放的元素類型必須一致。
在Java中,可以使用下列各式定義一個數組,具體實例如下:
int[] x=new int[100];
上述語句就相當於內存中定義了100個int類型的變量,第一個變量的名稱爲x[0],依次往後推,這些變量的初始值爲0.
上述代碼換爲2行進行解釋
int[] x; //聲明一個int[]類型的變量
x = new int[100]; //創建一個長度爲100的數組
在Java中,爲了方便我們獲得數組的長度,提供了一個length屬性,在程序中可以通過“數組名.length”的方式來獲取數組的長度,即元素的個數。
1.各種不同類型的數組的默認值
數據類型 | 默認初始化 |
---|---|
byte,short,int,long | 0 |
float,double | 0.0 |
char | 一個空字符 |
boolean | false |
引用數據類型 | null,表示變量不引用任何對象 |
初始化還有另一種方式叫做靜態初始化,就是定義數組的同事就維數組的每個元素賦值。數組的靜態初始化有兩種方式。
1.類型[] 數組名=new 類型[]{元素,元素,……};
2.類型[] 數組名={元素,元素,元素,……};
- 每個數組的索引都有一個範圍,即0~length-1.在訪問元素時,索引不能超出這個範圍,否則程序報錯。
- 在使用變量引用一個數組時,變量必須指向一個有效的數組對象,如果該變量的值爲null,則意味着沒有指向任何數組,此時通過該變量訪問的元素會出現空指針異常。
2.數組常見操作
1.數組遍歷
在操作數組時,經常需要依次訪問數組中的每個元素,這種操作叫做數組的遍歷。
索引思想,操作數組中的元素,賦值還是獲取值,都是依賴索引值。
int[] arr=new int[5];
for (int i=0;i<arr.length;i++)
System.out.println(arr[i]);
2.數值最值
在操作數組時,經常需要獲取數組中元素的最值。
public class Example{
public static void main(String[] args){
int[] arr={1,2,43,5,2,3,56,321,1,9,2};
int max = getMax(arr);
System.out.println("最大值爲:"+max);
}
public static int getMax(int[] arr){
int max=arr[0];//定義變量x,用於記錄數組中的最大值
for(int i = 1;i<arr.length;i++){
if (max < arr[i]) max = arr[i];
}
return max;
}
}
3.數組排序
在操作數組時,經常需要對數組中元素進行排序,其中冒泡排序是比較常見的一種算法。冒泡過程中,不斷比較數組中相鄰的兩個元素,較小者向上浮,較大者向下沉。
// 冒泡排序
public class Example{
public static void main(String[] args){
int[] arr={9,6,3,1,7,3};//定義數組,賦值無序
printArr(arr);
buddleSort(arr);
printArr(arr);
}
// 打印數組的方法
public static void printArr(int[] arr){
// 循環遍歷數組的元素
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.print("\n");
}
public static void buddleSort(int[] arr){
// 定義外層循環
for(int i=0;i<=arr.length-1;i++){
//定義內層循環
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){ // 比較相鄰的元素
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
System.out.println("第"+ (i+1)+"倫排序");
printArr(arr);
}
}
}
}
4.多維數組
多維數組可以簡單的理解爲在數組中嵌套數組。在程序中最常見的數組就是二維數組。
方式一:
int[][] arr = new int[3][4];
定義一個三行四列的數組。
方式二:
int[][] arr = new int[3][];
定義一個三行但是不知道幾列的數組。
方式三:
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
多維數組對元素的訪問同樣也是通過角標的方式,例如:訪問二維數組中第一個元素數組的第二個元素的方式如下:arr[0][1]
public class test{
public static void main(String[] args){
int[][] arr = new int[3][];//定義一個長度爲3的二維數組
arr[0] = new int[]{11,12};
arr[1] = new int[]{14,25,15};
arr[2] = new int[]{51,125,124};
int sum = 0;//定義變量記錄總銷售額
for(int i=0;i<arr.length;i++){
int groupSum = 0;//記錄每小組的銷售額
for(int j=0;j<arr[i].length;j++){
groupSum+=arr[i][j];
}
sum+=groupSum;
}
System.out.println("總銷售額爲:"+sum+"萬元");
}
}