1. 程式人生 > 其它 >2.JAVA語法基礎

2.JAVA語法基礎

Java語法基礎

java基本程式碼規範,以及類的定義,基本的關鍵字和屬性的用法,基本資料格式以及資料轉換,運算子的操作

一、類的基本結構

類是組成Java程式的最小結構單元。

基本語法:

public class SyntaxBasic{
    
}

一個類的組成

有兩個部分構成:類頭和類體。

花括號前的部分稱為類頭。用來修飾一個類的特徵。

  1. public稱為訪問修飾符

  2. class稱為類關鍵字

  3. SyntaxBasic是類的名稱,名稱的命名要求要見名知意。

花括號內的部分稱為類體,也就是類的主體部分。

 

二、 main方法的結構

main方法也成主方法,作為程式碼執行的入口,只要main方法體記憶體在有效程式碼,執行時便會輸出結果。

基本語法:

public static void main(String[] args){
    
}

main方法的主要存在的一些特性

  1. public稱為訪問修飾符

  2. static表示靜態方法

  3. void表示無引數返回值

  4. 圓括號內表示是方法能夠獲取到的引數也稱資源。String[]表示引數型別為字串符陣列型別,args為引數變數的名稱

  5. 花括號稱為方法體,包含程式碼的部分

 

三、註釋、識別符號、關鍵字、變數和常量

 

1.註釋

便於給程式碼註釋其含義的輔助文字,供編寫者檢視。

註釋分為單行註釋、多行註釋和註釋文件

 

註釋的用法及規範

  1. 單行註釋,一種是寫在單行程式碼的後面,若內容過多,可以寫在程式碼的上面。另一種是寫在一行程式碼的前面,使這段程式碼編譯被忽略但也不會消失

  2. 多行註釋,對於程式碼中較為複雜的操作的解釋,例如用在if,for迴圈的註釋

  3. 註釋文件,用於生成程式的相關資訊。在實際工作中一般寫在類頭和方法頭的上面,註解文件中可以用*號開頭也可以不用

     

    規範演示

    /**
     * @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.識別符號

給一個類、一個方法或者是變數定義的名稱稱為識別符號。這些名稱都是由程式設計師自定義的。

識別符號的命名規則

  1. A~Z和a~z的英文字母表示(推薦使用規則)

  2. 0~9的數字(不能用來作為開頭)

  3. _下劃線(一般用在常量名兩個單詞之間的連線)

  4. $美元符號(只用在給類中類定義變數名字的特殊情況)

  5. 不能以關鍵字做為識別符號,例如:public,class,void等

 

識別符號的應用範圍

  1. 類名:由英文字母命名,首字母大寫。多個單片語成,單詞首字母都要大寫(帕斯卡命名)

  2. 方法名:由英文字母命名,首字母小寫。多個單片語成,第二個單詞首字母大寫(駝峰命名)

  3. 變數名:由英文字母命名,方法名規則一樣(駝峰命名)

  4. 常量名:英文字母全大寫,多個單詞之間用下劃線_連線

 

例項:

定義類

public class Note{
    
}

定義變數

int number = 1;

定義方法

public void method(){
    
}

定義常量

final int MAX_VALUE = 100;

 


 

3.關鍵字-----

在某種語言當中表示特殊語義的特殊符號。由語言開發者定義,不能被程式設計師修改

關鍵字的種類以及作用

  1. 訪問修飾符 Java中用來保護類、方法、變數和構造方法訪問許可權的修飾符

  • public 即公共的,訪問許可權最高,所有的類都可見。可以用在類、方法、變數和介面

  • default 預設的(可以不用寫),在同一包當中可見。可以用在類、方法、變數和介面

  • protected

  • private

  1. 類修飾符

  • 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);
    }
}

按照結構劃分為全域性變數和區域性變數

  1. 全域性變數:全域性變數可以在整個類中使用

  2. 區域性變數:只能在方法內使用,使用範圍就是整個方法的花括號內

注意點:由於案例當中的main方法為靜態方法,所以也無法使用全域性變數

 


 

5.常量

常量的資料是固定不變的,初始值後不能被修改

常量的型別

分為普通常量(常數)和標誌性常量

  1. 普通常量體現在變數值、字串符、字元和布林常量

int a = 12;
char b = 'z';
String name = "張三";
boolean result = true;
  1. 標誌性常量是由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.資料型別轉換的種類

  1. 自然轉換,低精度資料型別向高精度資料轉換

資料型別精度從小到大排序

byte<<<short<<<int<<<long<<<float<<<double

案例

byte small = 15;
int bigger = byte;

低精度的資料可以任意的存放在高精度資料型別的記憶體中,只用於相相容的資料型別,如char型不能和boolean型進行轉換

 

  1. 強制轉換,高精度型別資料存放在低精度型別記憶體中,會丟失資料精度

轉換格式:

低精度資料型別變數 = (低精度資料型別關鍵字)高精度常量/變數;

案例

int num = (int)18.67;//double型別轉int型別
double money = 1756.4457;
long bank = (long)double;

括號內的強制轉換的資料型別要與低精度資料型別變數相相容

 

擴充套件:原始碼、反碼和補碼

  1. 原碼

原碼(true form)是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其餘位表示數值的大小。

例如:用8位二進位制表示一個數,+9的原碼為0000 1001,-9的原碼就是1000 1001

  1. 反碼

反碼是數值儲存的一種,多應用於系統環境設定,如linux平臺的目錄和檔案的預設許可權的設定umask,就是使用反碼原理。反碼的表示方法是:正數的反碼與其原碼相同;負數的反碼是對正數逐位取反,符號位保持為1。

例如:+11的反碼為0000 1011,-11的反碼為1111 0100

  1. 補碼

正數:正數的補碼和原碼相同。負數:負數的補碼則是符號位為“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);