2.JAVA語法基礎
java基本程式碼規範,以及類的定義,基本的關鍵字和屬性的用法,基本資料格式以及資料轉換,運算子的操作
一、類的基本結構
類是組成Java程式的最小結構單元。
基本語法:
public class SyntaxBasic{
}
一個類的組成
花括號前的部分稱為類頭。用來修飾一個類的特徵。
-
public稱為訪問修飾符
-
class稱為類關鍵字
-
SyntaxBasic是類的名稱,名稱的命名要求要見名知意。
花括號內的部分稱為類體,也就是類的主體部分。
二、 main方法的結構
main方法也成主方法,作為程式碼執行的入口,只要main方法體記憶體在有效程式碼,執行時便會輸出結果。
基本語法:
public static void main(String[] args){
}
main方法的主要存在的一些特性
-
public稱為訪問修飾符
-
static表示靜態方法
-
void表示無引數返回值
-
圓括號內表示是方法能夠獲取到的引數也稱資源。String[]表示引數型別為字串符陣列型別,args為引數變數的名稱
-
花括號稱為方法體,包含程式碼的部分
三、註釋、識別符號、關鍵字、變數和常量
1.註釋
便於給程式碼註釋其含義的輔助文字,供編寫者檢視。
註釋分為單行註釋、多行註釋和註釋文件
註釋的用法及規範
-
單行註釋,一種是寫在單行程式碼的後面,若內容過多,可以寫在程式碼的上面。另一種是寫在一行程式碼的前面,使這段程式碼編譯被忽略但也不會消失
-
多行註釋,對於程式碼中較為複雜的操作的解釋,例如用在if,for迴圈的註釋
-
註釋文件,用於生成程式的相關資訊。在實際工作中一般寫在類頭和方法頭的上面,註解文件中可以用*號開頭也可以不用
規範演示
/** * @author Wavesboker //作者名 * @version //版本號 * @since //開發用的Java版本 * @param //引數名 * @return //返回值 * @throws //異常丟擲情況 */ public class Test{ /** 這是文件註釋 支援多行 */ public static void main(String[] args){ int num = 10;//這是單行註釋 //包含在註釋中的程式碼編譯時被忽略int score = 15; System.out.println("顯示的值" + num); } }
2.識別符號
給一個類、一個方法或者是變數定義的名稱稱為識別符號。這些名稱都是由程式設計師自定義的。
識別符號的命名規則
-
A~Z和a~z的英文字母表示(推薦使用規則)
-
0~9的數字(不能用來作為開頭)
-
_下劃線(一般用在常量名兩個單詞之間的連線)
-
$美元符號(只用在給類中類定義變數名字的特殊情況)
-
不能以關鍵字做為識別符號,例如:public,class,void等
識別符號的應用範圍
-
類名:由英文字母命名,首字母大寫。多個單片語成,單詞首字母都要大寫(帕斯卡命名)
-
方法名:由英文字母命名,首字母小寫。多個單片語成,第二個單詞首字母大寫(駝峰命名)
-
變數名:由英文字母命名,方法名規則一樣(駝峰命名)
-
常量名:英文字母全大寫,多個單詞之間用下劃線_連線
例項:
定義類
public class Note{
}
定義變數
int number = 1;
定義方法
public void method(){
}
定義常量
final int MAX_VALUE = 100;
3.關鍵字-----
在某種語言當中表示特殊語義的特殊符號。由語言開發者定義,不能被程式設計師修改
關鍵字的種類以及作用
-
訪問修飾符 Java中用來保護類、方法、變數和構造方法訪問許可權的修飾符
-
public 即公共的,訪問許可權最高,所有的類都可見。可以用在類、方法、變數和介面
-
default 預設的(可以不用寫),在同一包當中可見。可以用在類、方法、變數和介面
-
protected
-
private
-
類修飾符
-
class 僅用來修飾類
4.變數
在Java中,變數用於對記憶體資料進行儲存,獲取。並且可以進行修改的識別符號
變數的宣告與定義
變數的宣告,格式為資料型別+變數名。宣告變數中沒有資料
int number;
變數的賦值,格式為變數名+等號+變數值。前提先給變數宣告之後,一般是將等號右邊的值存放在左邊的變數中
number = 10;
變數的宣告並賦值,宣告和賦值一起執行。一行程式碼完成變數宣告和定義,給變數賦初始值
int age = 10;
變數的作用域
作用:為了避免在複雜的系統中程式碼發生衝突,劃分變數的使用範圍。
public class Variable{
//全域性變數
int quantity;
int height;
public static void main(String[] args){
//區域性變數
int num = 10;
int power = 100;
System.out.println("數量為" + num);
}
}
按照結構劃分為全域性變數和區域性變數
-
全域性變數:全域性變數可以在整個類中使用
-
區域性變數:只能在方法內使用,使用範圍就是整個方法的花括號內
注意點:由於案例當中的main方法為靜態方法,所以也無法使用全域性變數
5.常量
常量的資料是固定不變的,初始值後不能被修改
常量的型別
分為普通常量(常數)和標誌性常量
-
普通常量體現在變數值、字串符、字元和布林常量
int a = 12;
char b = 'z';
String name = "張三";
boolean result = true;
-
標誌性常量是由final關鍵字修飾的變數
final double PI = 3.1415926;
注意:被final修飾的變數必須要賦予初始值,而且不能進行二次修改
四、資料型別
變數是來申請記憶體儲存數值的。
記憶體管理系統通過變數的型別來匹配相同型別的儲存空間,儲存空間用來儲存該型別資料。
Java中資料型別的分類
資料型別分為基本資料型別和引用資料型別
基本資料型別分為整型、浮點型、字元型和布林型
1.整型的種類以及屬性
-
byte 在JVM記憶體佔1個位元組,一個位元組等於8位,資料有效範圍-128~127
-
short 佔16位,範圍-32768~32767
-
int 最常用的整型儲存型別 佔32位 範圍-2147483648~2147483647
-
long 佔64位 範圍-9223372036854775808~9223372036854775807
byte numA = 127;
short numB = 32767;
int numC = 2100000;
long numD = 920000
2.浮點型的種類以及屬性
-
float 單精度型別 佔32位 範圍在1.4E-45~3.4028235E38
-
double 雙精度 佔64位 範圍在4.9E-324~1.7976931348623157E308
float height = 12.5f;
double width = 5.567342;
注意點:float型別的常數需要加上f的字尾才能存放在float型別的記憶體中
浮點資料保留小數的處理
DecimalFormat 路徑:Java.text.DecimalFormat
使用DecimalFormat類可以實現保留浮點資料小數點後幾位數字的個數
DecimalFormat.format()方法可以將目標資料轉換成字串符的格式
案例演示
import java.text.DecimalFormat;//從java中匯入工具類
public class Test{
public static void main(String[] args){
DecimalFormat object = new DecimalFormat("0.000");//建立物件,特性是保留小數點後三位
double num = 2.744866952;
String numStr = object.format(num);//將浮點型別資料轉換成字串型別
System.out.println(numStr);
}
}
經過處理的浮點資料會採用四捨五入的方式保留
科學計數法的表示
在Java中若出現浮點資料過長,系統會自動將其轉換為科學計數法的形式,僅用於浮點型的資料
轉換規則:
double number = 4E2.8;
4E2等於4乘以10的二次方,轉換結果為400.8
3.字元型的定義以及屬性
字元資料型別用來儲存單個字元的資料,用單引號包圍。JVM對字符采用unicode無符號進行編碼。
char 在JVM中佔用16位 範圍為0~65535 預設值為\u0000
char name = '張';
char型別相容int型別,可以直接將字元型資料轉換成整數
轉義字元
特殊的單個字元,不能直接顯示的字元要用轉義字元表示
下列為常見轉義字元表
4.布林型的定義以及屬性
boolean型資料型別只有兩種表示方式true和false,一般應用於邏輯判斷。
boolean 按JVM標準佔4個位元組 預設值為false
boolean result = false;
五、資料型別轉換
1.資料型別轉換的種類
-
自然轉換,低精度資料型別向高精度資料轉換
資料型別精度從小到大排序
byte<<<short<<<int<<<long<<<float<<<double
案例
byte small = 15;
int bigger = byte;
低精度的資料可以任意的存放在高精度資料型別的記憶體中,只用於相相容的資料型別,如char型不能和boolean型進行轉換
-
強制轉換,高精度型別資料存放在低精度型別記憶體中,會丟失資料精度
轉換格式:
低精度資料型別變數 = (低精度資料型別關鍵字)高精度常量/變數;
案例
int num = (int)18.67;//double型別轉int型別
double money = 1756.4457;
long bank = (long)double;
括號內的強制轉換的資料型別要與低精度資料型別變數相相容
擴充套件:原始碼、反碼和補碼
-
原碼
原碼(true form)是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。
例如:用8位二進位制表示一個數,+9的原碼為0000 1001,-9的原碼就是1000 1001
-
反碼
反碼是數值儲存的一種,多應用於系統環境設定,如linux平臺的目錄和檔案的預設許可權的設定umask,就是使用反碼原理。反碼的表示方法是:正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持為1。
例如:+11的反碼為0000 1011,-11的反碼為1111 0100
-
補碼
正數:正數的補碼和原碼相同。負數:負數的補碼則是符號位為“1”。並且,這個“1”既是符號位,也是數值位。數值部分按位取反後再在末位(最低位)加1。也就是“反碼+1”。
例如:+7的補碼為0000 0111,-7的補碼為1111 1001
當資料型別從高轉低發生溢位時,最終輸出的結果會發生改變
案例
public class Test{
public static void main(String[] args){
int num = 130;
byte result = (byte)num;//當int型轉換byte型記憶體溢位後 結果會變成負數
System.out.println("轉換記憶體溢位結果:"+result);
}
}
從案例中得出最終轉換結果為-126,因為資料的溢位,導致結果變成了負數
原理解析:
由於計算機底層是以數字二進位制的原始碼、反碼和補碼來進行表示
根據原理分析
由於int型別的130強制轉換為byte型別,byte型別數值位是8位,130轉換成二進位制為1000 0010,最高位是“1”
所以是一個負數為000 0010。在通過補碼錶示負數,轉換成反碼為111 1101,再+1等於111 1110
111 1110轉換成十進位制結果就是-126
各進位制的表示方式和換算
1.進位制的字首表示
-
二進位制:字首為0b,範圍:0和1
-
八進位制:字首為0o或者0,範圍:0-7
-
十進位制:沒有字首,所有表示的數字都是十進位制,範圍:0-9
-
十六進位制:字首為0x,字尾為H,範圍:0-9,A-F,a為10
2.各進位制的運算機制
二進位制轉十進位制
int t = 0b1111;
System.out.println(t);
運算過程:
t變數賦值的是一個二進位制的數值
輸出的值運算方法:
是從0開始右往左數2的0次方乘以第一位數加上2的1次方乘以第二位數加上2的2次方乘以第三位數……以此類推
每一位數運算的結果從右往左排再相加1+2+4+8=15
八進位制轉十進位制
int i = 012;
System.out.println(i);
運算過程:i變數賦值的是一個八進位制的數值
輸出的值運算方法:
同樣從右往左數8的0次方乘以2加上8的1次方乘以1加上8的2次方乘以0
每一位數運算的結果從右往左排再相加2+8+0=10
十六進位制轉十進位制
int y = 0xc8;
System.out.println(y);
運算過程:y變數為十六進位制
輸出的值運算方法:
16的0次方乘以8加上16的1次方乘以12
結果為8+192=200
二進位制轉八進位制
例:0b110101
由於2的3次方為8,可以將二進位制程式碼從右往左每三個數字分成一組,每組按照4 2 1法則組合,110=6,101=5,組合起來是65
例:0b1011
若遇到不能每三個分成一組的,從右往左數,最後一個不能三個數分成一組的補0,001011,001=1,011=3,組合起來是13
二進位制轉十六進位制類似於二進位制轉八進位制,但是2的4次方為16,所以需要將二進位制程式碼每四個組成一個數,每組按照8 4 2 1法則組合
六、運算子
運算子按照功能大致分為算數運算子、賦值運算子、關係運算符、邏輯運算子、位運算子、條件運算子和特殊運算子
1.算數運算子
通常使用1個或2個運算元進行數學運算來得出結果。按照運算元個數分為雙目運算子和單目運算子。
雙目運算子
+加 -減 *乘 /除 %取餘
public class DataCount {
//雙目運算子
public static void main(String[] args) {
int a = 20;
int b = 5;
System.out.println("已知a等於20,b等於5");
System.out.println("相加運算:" + (a + b));
System.out.println("相減運算:" + (a - b));
System.out.println("相乘運算:" + (a * b));
System.out.println("相除運算:" + (a / b));
System.out.println("取餘運算:" + (a % b));
}
}
單目運算子
++自增 --自減
public class DataCount {
//單目運算子 自增和自減特性相同
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println("++在後先賦值後自增 a =" + a + " b = " + b);
b = ++a;
System.out.println("++在前先自增後賦值 a =" + a + " b = " + b);
}
}
2.賦值運算子
用來將一個數據賦值給一個變數
=賦值 +=加賦值 -=減賦值 *=乘賦值 /=除賦值 %=取餘賦值
測試
=賦值
int num = 10;//將10賦值給變數num
+=加賦值
int a = 1;
a += 1;//分解公式為a=a+1
-=減賦值
int b = 2;
b -= 1;//b=b-1
*=乘賦值
int c = 2;
c *= 2;//c=c*2
/=除賦值
int d = 10;
d /= 5;//d=d/5
%=取餘賦值
int e = 9;
e %= 2;//e=e%2
3.關係運算符
用來對2個運算元進行比較運算,並得出布林資料型別的結果。
-
(a > b) 表示a是否大於b 如果大於為真
-
(a < b)表示a是否小於b 如果小於為真
-
(a <= b)表示a是否小於等於b 如果是為真
-
(a >= b)表示a是否大於等於b 如果是為真
-
(a == b)表示a是否等於b 如果等於為真
-
(a != b)表示a是否不等於b 如果不等於為真
案例演示
//關係運算符 返回值為true false
int a = 30;
int b = 50;
System.out.println("輸出結果為:" + (a > b));
System.out.println("輸出結果為:" + (a < b));
System.out.println("輸出結果為:" + (a == b));
System.out.println("輸出結果為:" + (a != b));
int c = 5;
int e = ++c;
System.out.println("輸出結果為:" + (e == c));
4.邏輯運算子
對運算元使用邏輯運算,只能返回true和false 所以只能用Boolean型別
-
&& 與邏輯 兩個運算元都為真 則為true 否則為false
-
|| 或邏輯 兩個運算元有一個為真 則會true 否則為false
-
! 非邏輯 將最後表達的結果取反
短路邏輯運算現象:
使用與邏輯時 當第一個運算元結果為false,不用第二個運算元判斷,則最終結果就為false
使用或邏輯時 當第一個運算元結果為true直接判斷最終結果就為true
案例演示
//邏輯運算子 &與 |或 !非 應用於Boolean值 返回值為true false
boolean a = true;
boolean b = false;
System.out.println("a && b ="+(a && b));
System.out.println("a || b ="+(a || b));
System.out.println("a && b="+!(a && b));
System.out.println("!(a || b)="+!(a || b));
/*短路邏輯運算
當進行與邏輯運算時,若第一個值為false 不管後面的值是否為true 判定為false
當進行或邏輯運算時,若第一個值為true 不管後面的值是否為false 判定為true
*/
int c = 100;
System.out.println("輸出結果為:" + ((c > 100) && (c == 100)));
System.out.println("輸出結果為:" + ((c == 100) || (c < 100)));
5.位運算子
位運算子是針對二進位制程式碼的運算,不能對浮點型操作。
案例演示
/*
位運算子
& | ^ ~ 位與 位或 位異或 位非 << >> 左移 右移
例 有兩個二進位制資料
A = 0010 0110
B = 1010 0001
==========================================
& = 0010 0000 兩個都是1 才為1 否則為0
| = 1010 0111 兩個都是0 為0 否則為1
^ = 1000 0111 相同為0 否則為1
~ B = 0101 1110 取反
<< 左移多少位 就是乘以2的幾次方
>> 右移多少位 就是除以2的幾次方
*/
int a = 63; //a = 0011 1111
System.out.println("a << 2 = "+ (a << 2));//a = 252
6.條件運算子
對三個運算元進行條件判斷的運算 第一個運算元是條件,第二個運算元是結果為true所返回的值,第三個運算元是結果為false所返回的值,一般用於簡單的兩種比較結果,使用條件運算子會更加簡潔並且提高閱讀性。
案例演示
/* 條件運算子 也稱三目運算子
例 a ? b : c
當a的結果為true 執行b 結果為false 執行c
*/
int a = 10;
int b = 20;
int c = 30;
boolean g = (a > 10);//設定條件a > 10
System.out.println("輸出結果為:" + (g ? b : c));//結果為true輸出b的值 結果為false輸出c的值
7.特殊運算子
-
new 建立某個引用型別的物件
-
. 用於訪問類或者是方法
-
() 所包圍的內容為優先被運算的表示式或者是方法內的引數
-
[] 表示為陣列的型別
-
instanceof 用於判斷某個物件是否屬於某個類,結果為布林值
綜合案例:
//new運算子
Scanner scan = new Scanner(System.in);//建立Scanner型別的物件
System.out.println("請輸入文字");
//.訪問物件的方法
int num = scan.nextInt();//此括號內表示無引數
//[]表示陣列的型別
int [] arr = {1,2,3};
//intanceof判斷並儲存boolean值 格式:物件 instanceof 類
boolean result = scan instanceof Scanner;
System.out.println("結果為" +result);