Java基礎(chǔ)語法

標(biāo)識符

定義

  • 給包,類,方法,變量起名字的符號。

組成規(guī)則

  • 標(biāo)識符由字母、數(shù)字、下劃線、美元符號組成。

命名原則:見名知意

  • 包名:全部小寫,多級包用.隔開。
    舉例:com.jourwon
  • 類、接口:一個單詞首字母大寫,多個單詞每個單詞的首字母大寫。
    舉例:Student,Car,HelloWorld
  • 方法和變量:一個單詞首字母小寫,多個單詞從第二個單詞開始每個單詞的首字母大寫。
    舉例:age,maxAge,show(),getAge()
  • 常量:如果是一個單詞,所有字母大寫,如果是多個單詞,所有的單詞大寫,用下劃線區(qū)分每個單詞。
    舉例:DATE,MAX_AGE
  • 項目名:全部用小寫字母,多個單詞之間用橫桿-分割。
    舉例:demo,spring-boot

注意事項

  • 不能以數(shù)字開頭
  • 不能是Java中的關(guān)鍵字
  • Java標(biāo)識符大小寫敏感,長度無限制
  • 標(biāo)識符不能包含空格

關(guān)鍵字

定義

  • 被Java語言賦予了特殊含義,用作專門用途的字符串(單詞),這些關(guān)鍵字不能用于常量、變量、和任何標(biāo)識符的名稱。

Java關(guān)鍵字(Java 8版本)

Java關(guān)鍵字(Java 8版本)

Java關(guān)鍵字(Java 8 以后版本)

Java關(guān)鍵字(Java 8 以后版本)

注意事項

  • true,false和,null看起來像關(guān)鍵字,但它們實際上是文字; 您不能在程序中將它們用作標(biāo)識符。

注釋

定義

  • 用于解釋說明程序的文字

分類

  • 單行注釋
    格式: // 注釋文字
  • 多行注釋
    格式: /* 注釋文字 */
  • 文檔注釋
    格式:/** 注釋文字 */

作用

  • 在程序中,尤其是復(fù)雜的程序中,適當(dāng)?shù)丶尤胱⑨尶梢栽黾映绦虻目勺x性,有利于程序的修改、調(diào)試和交流。注釋的內(nèi)容在程序編譯的時候會被忽視,不會產(chǎn)生目標(biāo)代碼,注釋的部分不會對程序的執(zhí)行結(jié)果產(chǎn)生任何影響。

注意事項

  • 多行和文檔注釋都不能嵌套使用。

訪問修飾符

定義

  • Java中,可以使用訪問修飾符來保護對類、變量、方法和構(gòu)造方法的訪問。Java 支持 4 種不同的訪問權(quán)限。

分類

  • private : 在同一類內(nèi)可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
  • default (即缺省,什么也不寫,不使用任何關(guān)鍵字): 在同一包內(nèi)可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
  • protected : 對同一包內(nèi)的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
  • public : 對所有類可見。使用對象:類、接口、變量、方法

訪問修飾符圖

訪問修飾符圖

分隔符

定義

  • 空格、逗號、分號以及行結(jié)束符都被稱為分隔符,規(guī)定任意兩個相鄰標(biāo)識符、數(shù)字、保留字或語句之間必須至少有一個分隔符,以便程序編譯時能夠識別。

分類

  • ; 分號 用來終止一個語句
  • {} 花括號、大括號 用來包括自動初始化的數(shù)組的值,也用來定義程序塊、類、方法以及局部范圍
  • [] 方括號、中括號 用來聲明數(shù)組的類型,也用來表示撤消對數(shù)組值的引用
  • , 逗號 在變量聲明中,區(qū)分變量說明的各個變量。在for控制語句中,用來將圓括號內(nèi)的語句連接起來
  • . 原點 用來將軟件包的名字與它的子包或類分隔。也用來將引用變量與變量或方法分隔
  • () 圓括號 在定義和調(diào)用方法時用來容納參數(shù)表。在控制語句或強制類型轉(zhuǎn)換組成的表達(dá)式中用來表示執(zhí)行或計算的優(yōu)先權(quán)

注意事項

  • 必須都是半角下的英文符號。

轉(zhuǎn)義字符

定義

  • 轉(zhuǎn)義字符是一種特殊的字符常量。轉(zhuǎn)義字符以反斜線""開頭,后跟一個或幾個字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱“轉(zhuǎn)義”字符。

常見轉(zhuǎn)義字符表

常見轉(zhuǎn)義字符表

Java中需要轉(zhuǎn)義的字符

  • 在Java中,不管是String.split(),還是正則表達(dá)式,有一些特殊字符需要轉(zhuǎn)義,這些字符是
    ( [ { / ^ - $ | } ] ) ? * + .
    轉(zhuǎn)義方法為字符前面加上"\",這樣在split、replaceAll時就不會報錯。不過要注意,String.contains()方法不需要轉(zhuǎn)義。

空行

空白行,或者有注釋的行,Java編譯器都會忽略掉

進(jìn)制

定義

  • 進(jìn)制也就是進(jìn)位計數(shù)制,是人為定義的帶進(jìn)位的計數(shù)方法。
    十進(jìn)制是逢十進(jìn)一,十六進(jìn)制是逢十六進(jìn)一,二進(jìn)制就是逢二進(jìn)一,以此類推,x進(jìn)制就是逢x進(jìn)位。

常用進(jìn)制類型

  • 二進(jìn)制

    • 計算機底層都是使用二進(jìn)制進(jìn)行存儲以及運算

    • 0b****;(以0b或者0B開始,*表示0或1)比如:010101

    • 原碼、反碼、補碼

      • 原碼

        • 原碼:將一個整數(shù)轉(zhuǎn)換成二進(jìn)制表示
          以 int 類型為例,int類型占4個字節(jié)、共32位。
          例如:
          2 的原碼為:00000000 00000000 00000000 00000010
          -2的原碼為:10000000 00000000 00000000 00000010
      • 反碼

        • 反碼
          正數(shù)的反碼:與原碼相同
          負(fù)數(shù)的反碼:原碼的符號位不變,其他位取反
          例如,-2 的反碼為:11111111 11111111 11111111 11111101
      • 補碼

        • 補碼
          正數(shù)的補碼:與原碼相同
          負(fù)數(shù)的補碼:反碼+1
          例如,-2 的補碼為:01111111 11111111 11111111 11111110
      • 注意事項

        • 二進(jìn)制的最高位是符號位(“0”代表正數(shù),“1”代表負(fù)數(shù));
        • Java中沒有無符號數(shù);
        • 計算機以整數(shù)的補碼進(jìn)行運算;
  • 八進(jìn)制

    • 0****;(以數(shù)字0開始,*表示0到7任意數(shù)字 比如:012345)
  • 十進(jìn)制

    • 0~9組成 比如:100
  • 十六進(jìn)制

    • 0x****;(以0x或者0X開始,*表示09或者af組成 比如:0x12c)

進(jìn)制轉(zhuǎn)換

  • 十進(jìn)制轉(zhuǎn)二進(jìn)制
    方法為:十進(jìn)制數(shù)除2取余法,即十進(jìn)制數(shù)除2,余數(shù)為權(quán)位上的數(shù),得到的商值繼續(xù)除2,依此步驟繼續(xù)向下運算直到商為0為止。

    • 150十進(jìn)制轉(zhuǎn)二進(jìn)制
    • 150十進(jìn)制轉(zhuǎn)二進(jìn)制
  • 二進(jìn)制轉(zhuǎn)十進(jìn)制
    方法為:把二進(jìn)制數(shù)按權(quán)展開、相加即得十進(jìn)制數(shù)。

    • 150二進(jìn)制轉(zhuǎn)十進(jìn)制
    • 150二進(jìn)制轉(zhuǎn)十進(jìn)制

流程控制語句

定義

流程是指程序運行時,各語句的執(zhí)行順序。流程控制語句就是用來控制程序中各語句執(zhí)行的順序。

分類

順序結(jié)構(gòu)

定義

順序結(jié)構(gòu)是程序中最簡單最基本的流程控制,沒有特定的語法結(jié)構(gòu),按照代碼的先后順序,依次執(zhí)行,程序中大多數(shù)的代碼都是這樣執(zhí)行的

舉例
/*
 * 順序結(jié)構(gòu):從上往下,依次執(zhí)行
 */
public class OrderDemo {
    public static void main(String[] args) {
        System.out.println("開始");
        System.out.println("語句A");
        System.out.println("語句B");
        System.out.println("語句C");
        System.out.println("結(jié)束");
    }
}

分支結(jié)構(gòu)(選擇結(jié)構(gòu))

定義

條件語句可根據(jù)不同的條件執(zhí)行不同的語句。包括if條件語句與switch多分支語句。

分類
if分支結(jié)構(gòu)

第一種格式

格式

if(條件表達(dá)式){
執(zhí)行的代碼塊;
}

執(zhí)行流程

執(zhí)行流程圖

if語句格式1

執(zhí)行流程說明

首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
如果是true就執(zhí)行語句體
如果是false就不執(zhí)行語句體

舉例
public class IfDemo {
    public static void main(String[] args) {
        System.out.println("開始");
        // 定義兩個變量
        int a = 10;
        int b = 20;

        if (a == b) {
            System.out.println("a等于b");
        }
    
        int c = 10;
        if (a == c) {
            System.out.println("a等于c");
        }
    
        System.out.println("結(jié)束");
    }
}
第二種格式
格式

if(條件表達(dá)式){
執(zhí)行的代碼塊;
}else{
執(zhí)行的代碼塊;
}

執(zhí)行流程

執(zhí)行流程圖

if語句格式2

執(zhí)行流程說明

首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false
如果是true就執(zhí)行語句體1
如果是false就執(zhí)行語句體2

舉例
public class IfDemo2 {
    public static void main(String[] args) {
        System.out.println("開始");
        // 判斷給定的數(shù)據(jù)是奇數(shù)還是偶數(shù)
        // 定義變量
    int a = 100;
        // 給a重新賦值
    a = 99;

    if (a % 2 == 0) {
        System.out.println("a是偶數(shù)");
    } else {
        System.out.println("a是奇數(shù)");
    }
    
        System.out.println("結(jié)束");
    }
}
第三種格式
格式

if(條件表達(dá)式){
執(zhí)行的代碼塊;
}else if(條件表達(dá)式){
執(zhí)行的代碼塊;
}......(此處省略N個else if)
else{
執(zhí)行代碼塊;
}

執(zhí)行流程

執(zhí)行流程圖

if語句格式3

執(zhí)行流程說明

首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false
如果是true就執(zhí)行語句體1
如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false
如果是true就執(zhí)行語句體2
如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false

如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語句體n+1

舉例
public class IfDemo3 {
    public static void main(String[] args) {
        // x和y的關(guān)系滿足如下:
        // x>=3 y = 2x + 1;
        // -1<=x<3 y = 2x;
        // x<=-1 y = 2x – 1;
        // 根據(jù)給定的x的值,計算出y的值并輸出。

        // 定義變量
        int x = 5;
        
        /*
        int y;
        if (x >= 3) {
            y = 2 * x + 1;
        } else if (x >= -1 && x < 3) {
            y = 2 * x;
        } else if (x <= -1) {
            y = 2 * x - 1;
        }else {
            y = 0;
        }
        */
        
        int y = 0;
        if (x >= 3) {
            y = 2 * x + 1;
        } else if (x >= -1 && x < 3) {
            y = 2 * x;
        } else if (x <= -1) {
            y = 2 * x - 1;
        }
        
        System.out.println("y的值是:"+y);
    }
}
注意事項

1、一旦滿足某個條件表達(dá)式,則進(jìn)入其執(zhí)行語句塊執(zhí)行,執(zhí)行完畢后不會執(zhí)行其一下的條件語句。
2、如果多個條件表達(dá)式之間為“互斥”關(guān)系,多個語句之間可以上下調(diào)換順序,一旦是包含關(guān)系,要求條件表達(dá)式范圍小的寫到范圍大的上邊;

switch分支結(jié)構(gòu)
執(zhí)行流程

執(zhí)行流程說明

首先計算出表達(dá)式的值
其次,和case依次比較,一旦有對應(yīng)的值,就會執(zhí)行相應(yīng)的語句,在執(zhí)行的過程中,遇到break就會結(jié)束。
最后,如果所有的case都和表達(dá)式的值不匹配,就會執(zhí)行default語句體部分,然后程序結(jié)束掉。

執(zhí)行流程圖

switch執(zhí)行流程
舉例
public class SwitchDemo {
    public static void main(String[] args) {
        //創(chuàng)建鍵盤錄入對象
        Scanner sc = new Scanner(System.in);
        
        //接收數(shù)據(jù)
        System.out.println("請輸入一個數(shù)字(1-7):");
        int weekday = sc.nextInt();
        
        //switch語句實現(xiàn)選擇
        switch(weekday) {
        case 1:
            System.out.println("星期一");
            break;
        case 2:
            System.out.println("星期二");
            break;
        case 3:
            System.out.println("星期三");
            break;
        case 4:
            System.out.println("星期四");
            break;
        case 5:
            System.out.println("星期五");
            break;
        case 6:
            System.out.println("星期六");
            break;
        case 7:
            System.out.println("星期日");
            break;
        default:
            System.out.println("你輸入的數(shù)字有誤");
            break;
        }
    }
}
注意事項

1、swich(表達(dá)式)中表達(dá)式的返回值必須是以下幾種類型之一:
  byte,short,char,int,枚舉(jdk1.5),String(jdk1.7)

2、case子句中的值必須是常量,且所有case子句中的值應(yīng)是不同的;

3、default子句是可任選的,當(dāng)沒有匹配的case時,執(zhí)行default;

4、break語句用來在執(zhí)行完一個case分支后使程序跳出swich語句塊;如果沒有break程序會順序執(zhí)行到swich結(jié)尾;

if分支結(jié)構(gòu)和switch分支結(jié)構(gòu)區(qū)別

if和swich語句很想,如果判斷的具體數(shù)值不多,而且復(fù)合byte、short、int、char這四種類型。建議使用swich語句,因為效率稍高;

其他情況:對區(qū)間進(jìn)行判斷,對結(jié)果為boolean類型進(jìn)行判斷,使用if,if的使用范圍比較廣泛。

循環(huán)結(jié)構(gòu)

定義

循環(huán)語句就是在滿足一定條件的情況下反復(fù)執(zhí)行某一個操作。包括while循環(huán)語句、do···while循環(huán)語句和for循環(huán)語句。

分類
for循環(huán)語句
執(zhí)行流程

執(zhí)行流程圖

for循環(huán)語句的執(zhí)行流程圖

執(zhí)行流程說明

A:執(zhí)行初始化語句
B:執(zhí)行判斷條件語句,看其結(jié)果是true還是false
如果是false,循環(huán)結(jié)束。
如果是true,繼續(xù)執(zhí)行。
C:執(zhí)行循環(huán)體語句
D:執(zhí)行控制條件語句
E:回到B繼續(xù)

格式

for(初始化語句;判斷條件語句;控制條件語句) {
循環(huán)體語句;
}

舉例
public class ForDemo {
    public static void main(String[] args) {
        //原始寫法
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("HelloWorld");
        System.out.println("-------------------------");
        

        //用循環(huán)改進(jìn)
        for(int x=1; x<=10; x++) {
            System.out.println("HelloWorld");
        }
    }
}
foreach循環(huán)語句
執(zhí)行流程

執(zhí)行流程說明

和for循環(huán)執(zhí)行流程相似

格式

for (聲明語句 : 表達(dá)式) {
  //代碼句子
}

舉例
public class Test {
    public static void main(String args[]) {
        int [] numbers = {10, 20, 30, 40, 50};
        
        for ( int x : numbers ) {
            System.out.print( x );
            System.out.print(",");
        }
        
        System.out.print();
        String [] names = {"James", "Larry", "Tom", "Lacy"};
        
        for ( String name : names ) {
            System.out.print( name );
            System.out.print(",");
        }
    }
}
定義

它是Java5后新增的for語句的特殊簡化版本,并不能完全替代for語句,但所有foreach語句都可以改寫為for語句。foreach語句在遍歷數(shù)組等時為程序員提供了很大的方便。

while循環(huán)語句
格式

基本格式
while(判斷條件語句) {
循環(huán)體語句;
}
擴展格式
初始化語句;
while(判斷條件語句) {
循環(huán)體語句;
控制條件語句;
}

執(zhí)行流程

執(zhí)行流程圖

while循環(huán)語句的執(zhí)行流程圖

執(zhí)行流程說明

while循環(huán)語句的循環(huán)方式為利用一個條件來控制是否要繼續(xù)反復(fù)執(zhí)行這個語句。

舉例
public class WhileDemo {
    public static void main(String[] args) {
        //輸出10次HelloWorld
        /*
        for(int x=1; x<=10; x++) {
            System.out.println("HellloWorld");
        }
        */
        
        //while循環(huán)實現(xiàn)
        int x=1;
        while(x<=10) {
            System.out.println("HellloWorld");
            x++;
        }
    }
}
do…while循環(huán)語句
格式

基本格式
do {
循環(huán)體語句;
}while((判斷條件語句);
擴展格式
初始化語句;
do {
循環(huán)體語句;
控制條件語句;
} while((判斷條件語句);

執(zhí)行流程

執(zhí)行流程圖

do...while循環(huán)語句的執(zhí)行流程圖

執(zhí)行流程說明

A:執(zhí)行初始化語句;
B:執(zhí)行循環(huán)體語句;
C:執(zhí)行控制條件語句;
D:執(zhí)行判斷條件語句,看是true還是false
如果是true,回到B繼續(xù)
如果是false,就結(jié)束

舉例
public class DoWhileDemo {
    public static void main(String[] args) {
        //輸出10次 HelloWorld
        /*
        for(int x=1; x<=10; x++) {
            System.out.println("HelloWorld");
        }
        */
        

        //do...while改寫
        int x=1;
        do {
            System.out.println("HelloWorld");
            x++;
        }while(x<=10);
    }
}
三種循環(huán)的區(qū)別

雖然可以完成同樣的功能,但是還是有小區(qū)別:
do…while循環(huán)至少會執(zhí)行一次循環(huán)體。
for循環(huán)和while循環(huán)只有在條件成立的時候才會去執(zhí)行循環(huán)體
for循環(huán)語句和while循環(huán)語句的小區(qū)別:
使用區(qū)別:控制條件語句所控制的那個變量,在for循環(huán)結(jié)束后,就不能再被訪問到了,而while循環(huán)結(jié)束還可以繼續(xù)使用,如果你想繼續(xù)使用,就用while,否則推薦使用for。原因是for循環(huán)結(jié)束,該變量就從內(nèi)存中消失,能夠提高內(nèi)存的使用效率。

跳轉(zhuǎn)語句(控制循環(huán)結(jié)構(gòu))
定義

Java語言中提供了3種跳轉(zhuǎn)語句,分別是break語句、continue語句和return語句。

分類

break

break的使用場景

break的使用場景:
在選擇結(jié)構(gòu)switch語句中,在循環(huán)語句中
離開使用場景的存在是沒有意義的
break的作用:跳出單層循環(huán)

舉例

/*
 * break:中斷的意思
 * 使用場景:
 *      A:switch語句中
 *      B:循環(huán)中
 * 注意:
 *      離開使用場景是沒有意義的。
 * 作用:
 *      跳出循環(huán),讓循環(huán)提前結(jié)束
 */
public class BreakDemo {
    public static void main(String[] args) {
        //break;
        
        for(int x=1; x<=10; x++) {
            if(x == 3) {
                break;
            }
            System.out.println("HelloWorld");
        }
    }
}
continue

continue的使用場景

continue的使用場景:
在循環(huán)語句中
離開使用場景的存在是沒有意義的
continue的作用:
單層循環(huán)對比break,然后總結(jié)兩個的區(qū)別
break 退出當(dāng)前循環(huán)
continue 退出本次循環(huán)

舉例

/*
 * continue:繼續(xù)的意思
 * 使用場景:
 *      循環(huán)中
 * 注意:
 *      離開使用場景是沒有意義的
 * 作用:
 *      結(jié)束一次循環(huán),繼續(xù)下一次的循環(huán)
 * 區(qū)別:
 *      break:退出循環(huán)
 *      continue:結(jié)束一次循環(huán),繼續(xù)下一次的循環(huán)
 */
public class ContinueDemo {
    public static void main(String[] args) {
        //continue;
        
        for(int x=1; x<=10; x++) {
            if(x == 3) {
                //break;
                continue;
            }
            System.out.println("HelloWorld");
        }
    }
}
return

return的使用場景

return的使用場景:
在循環(huán)語句中
在方法中
return的作用:可以從一個方法返回,并把控制權(quán)交給調(diào)用它的語句。
直接結(jié)束整個方法,從而結(jié)束循環(huán)。

舉例

public class ReturnDemo {
    public static void main(String[] args) {
        getStr();
    }

    public String getStr() {
                return "Hello";
        }

}

表達(dá)式

定義

  • 用運算符把常量或者變量連接起來符號java語法的式子就可以稱為表達(dá)式。

類型和值

  • 表達(dá)式值的數(shù)據(jù)類型即為表達(dá)式的類型。
  • 對表達(dá)式中操作數(shù)進(jìn)行運算得到的結(jié)果是表達(dá)式的值。

運算順序

  • 應(yīng)按照運算符的優(yōu)先級從高到低的順序進(jìn)行;
  • 優(yōu)先級相同的運算符按照事先約定的結(jié)合方向進(jìn)行;

舉例

  • a + b
    3.14 + a
    (x + y) * z + 100
    boolean b= i < 10 && (i%10 != 0)

運算符

定義

分類

  • 算術(shù)運算符

  • 算術(shù)運算符
              • / % ++ -- +
    • 注意事項

      • 1、/ 左右兩端的類型需要一致;
      • 2、%最后的符號和被模數(shù)相同;
      • 3、前++;先+1,后運算 后++;先運算,后+1;
      • 4、+:當(dāng)String字符串與其他數(shù)據(jù)類型只能做連接運算;并且結(jié)果為String類型;
  • 比較運算符(關(guān)系運算符)

    • = += -= *= /= %=

    • 比較運算符1

    • 比較運算符
    • 比較運算符2

    • 比較運算符2
    • 注意事項

      • 1、比較運算符的兩端都是boolean類型,也就是說要么是true,要么是false;
      • 2、比較運算符的"=="與"="的作用是不同的,使用的時候需要小心。
  • 賦值運算符

    • = += -= *= /= %=
    • 基本的賦值運算符:=
    • 擴展的賦值運算符:+=,-=,*=,/=,%=
      +=: a+=20;相當(dāng)于a = (a的數(shù)據(jù)類型)(a + 20);
  • 邏輯運算符(符號的兩端都是boolean類型)

    • & | ^ ! && ||

    • 注意事項

      • 1、& 與 &&以及|與||的區(qū)別:
      • &:左邊無論真假,右邊都會進(jìn)行運算;
      • &&:如果左邊為假,則右邊不進(jìn)行運算;
      • | 與 || 的區(qū)別同上;在使用的時候建議使用&&和||;
      • 2、(^)與或(|)的不同之處是:當(dāng)左右都為true時,結(jié)果為false。
    • 邏輯運算符

    • 邏輯運算符
  • 位運算符(兩端都是數(shù)值型的數(shù)據(jù))

    • 位運算符1
    • 位運算符1
    • 位運算符2
    • 位運算符2
  • 三元運算符(三目運算符)

    • 三元運算符

    • 三元運算符
    • 注意事項

      • 1、表達(dá)式1與表達(dá)式2的類型必須一致;
      • 2、使用三元運算符的地方一定可以使用if..else代替,反之不一定成立;

運算符的優(yōu)先級

運算符的優(yōu)先級
  • 優(yōu)先級按照從高到低的順序書寫,也就是優(yōu)先級為1的優(yōu)先級最高,優(yōu)先級14的優(yōu)先級最低。使用優(yōu)先級為 1 的小括號可以改變其他運算符的優(yōu)先級。

變量

定義

  • 在程序執(zhí)行的過程中,在某個范圍內(nèi)其值可以發(fā)生改變的量。
    從本質(zhì)上講,變量其實是內(nèi)存中的一小塊區(qū)域

分類

  • 按被聲明的位置劃分

    • 成員變量

      方法外部,類內(nèi)部定義的變量

      • 類變量(靜態(tài)變量):獨立于方法之外的變量,用 static 修飾。

        • 類變量也稱為靜態(tài)變量,在類中以static關(guān)鍵字聲明,但必須在方法構(gòu)造方法和語句塊之外。
        • 無論一個類創(chuàng)建了多少個對象,類只擁有類變量的一份拷貝。
        • 靜態(tài)變量除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化后不可改變。
        • 靜態(tài)變量儲存在靜態(tài)存儲區(qū)。經(jīng)常被聲明為常量,很少單獨使用static聲明變量。
        • 靜態(tài)變量在第一次被訪問時創(chuàng)建,在程序結(jié)束時銷毀。
        • 與實例變量具有相似的可見性。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為public類型。
        • 默認(rèn)值和實例變量相似。數(shù)值型變量默認(rèn)值是0,布爾型默認(rèn)值是false,引用類型默認(rèn)值是null。變量的值可以在聲明的時候指定,也可以在構(gòu)造方法中指定。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化。
        • 靜態(tài)變量可以通過:ClassName.VariableName的方式訪問。
        • 類變量被聲明為public static final類型時,類變量名稱一般建議使用大寫字母。如果靜態(tài)變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一致。
      • 實例變量(非靜態(tài)變量):獨立于方法之外的變量,不過沒有 static 修飾。

        • 實例變量聲明在一個類中,但在方法、構(gòu)造方法和語句塊之外;
        • 當(dāng)一個對象被實例化之后,每個實例變量的值就跟著確定;
        • 實例變量在對象創(chuàng)建的時候創(chuàng)建,在對象被銷毀的時候銷毀;
        • 實例變量的值應(yīng)該至少被一個方法、構(gòu)造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;
        • 實例變量可以聲明在使用前或者使用后;
        • 訪問修飾符可以修飾實例變量;
        • 實例變量對于類中的方法、構(gòu)造方法或者語句塊是可見的。一般情況下應(yīng)該把實例變量設(shè)為私有。通過使用訪問修飾符可以使實例變量對子類可見;
        • 實例變量具有默認(rèn)值。數(shù)值型變量的默認(rèn)值是0,布爾型變量的默認(rèn)值是false,引用類型變量的默認(rèn)值是null。變量的值可以在聲明時指定,也可以在構(gòu)造方法中指定;
        • 實例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中,就應(yīng)該使用完全限定名:ObejectReference.VariableName。
      • 類變量和實例變量的區(qū)別

        • 調(diào)用方式

          • 靜態(tài)變量也稱為類變量,可以直接通過類名調(diào)用。也可以通過對象名調(diào)用。這個變量屬于類。
          • 成員變量也稱為實例變量,只能通過對象名調(diào)用。這個變量屬于對象。
        • 存儲位置

          • 靜態(tài)變量存儲在方法區(qū)長中的靜態(tài)區(qū)。
          • 成員變量存儲在堆內(nèi)存。
        • 生命周期

          • 靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失。生命周期長。
          • 成員變量隨著對象的創(chuàng)建而存在,隨著對象的消失而消失。
        • 與對象的相關(guān)性

          • 靜態(tài)變量是所有對象共享的數(shù)據(jù)。
          • 成員變量是每個對象所特有的數(shù)據(jù)。
    • 局部變量

      • 局部變量:類的方法中的變量。
      • 局部變量聲明在方法、構(gòu)造方法或者語句塊中;
      • 局部變量在方法、構(gòu)造方法、或者語句塊被執(zhí)行的時候創(chuàng)建,當(dāng)它們執(zhí)行完成后,變量將會被銷毀;
      • 訪問修飾符不能用于局部變量;
      • 局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見;
      • 局部變量是在棧上分配的。
      • 局部變量沒有默認(rèn)值,所以局部變量被聲明后,必須經(jīng)過初始化,才可以使用。
    • 成員變量和局部變量的區(qū)別

      • 作用域

        • 成員變量:針對整個類有效。
        • 局部變量:只在某個范圍內(nèi)有效。(一般指的就是方法,語句體內(nèi))
      • 存儲位置

        • 成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失,存儲在堆內(nèi)存中。
        • 局部變量:在方法被調(diào)用,或者語句被執(zhí)行的時候存在,存儲在棧內(nèi)存中。當(dāng)方法調(diào)用完,或者語句結(jié)束后,就自動釋放。
      • 生命周期

        • 成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失
        • 局部變量:當(dāng)方法調(diào)用完,或者語句結(jié)束后,就自動釋放。
      • 初始值

        • 成員變量:有默認(rèn)初始值。
        • 局部變量:沒有默認(rèn)初始值,使用前必須賦值。
    • 使用原則

      • 在使用變量時需要遵循的原則為:就近原則
        首先在局部范圍找,有就使用;接著在成員位置找。
  • 按所屬的數(shù)據(jù)類型劃分

    • 基本數(shù)據(jù)類型變量

      • 基本數(shù)據(jù)類型

        • byte,short,int,long,float,double,char,boolean
      • 變量的定義格式

        • 數(shù)據(jù)類型 變量名 = 初始化值;
      • 注意

        • 整數(shù)默認(rèn)是int類型,定義long類型的數(shù)據(jù)時,要在數(shù)據(jù)后面加L。
        • 浮點數(shù)默認(rèn)是double類型,定義float類型的數(shù)據(jù)時,要在數(shù)據(jù)后面加F。
    • 引用數(shù)據(jù)類型變量

定義格式

  • 數(shù)據(jù)類型 變量名 = 初始化值;
    注意:格式是固定的,記住格式,以不變應(yīng)萬變
  • 舉例
public class Variable{
    // 類變量
    static int allClicks=0;    
     // 實例變量
    String str="hello world";  
    public void method(){
            // 局部變量
        int i =0;  
    }
}

注意事項

  • 類外面不能有變量的聲明

常量

定義

  • 常量定義:在程序執(zhí)行的過程中,其值不可以發(fā)生改變的量。常量不同于常量值,它可以在程序中用符號來代替常量值使用,因此在使用前必須先定義。
  • 常量值定義:常量和常量值是不同的概念,常量值又稱為字面常量,它是通過數(shù)據(jù)直接表示的。
  • 關(guān)系:常量值是常量的具體和直觀的表現(xiàn)形式,常量是形式化的表現(xiàn)。通常在程序中既可以直接使用常量值,也可以使用常量。

分類

  • 字符串常量 用雙引號括起來的內(nèi)容(“HelloWorld”)
  • 整數(shù)常量 所有整數(shù)(12,-23)
  • 小數(shù)常量 所有小數(shù)(12.34)
  • 字符常量 用單引號括起來的內(nèi)容(‘a(chǎn)’,’A’,’0’)
  • 布爾常量 較為特有,只有true和false
  • 空常量 null(數(shù)組部分講解)

舉例

  • Java 語言使用 final 關(guān)鍵字來定義一個常量
    final int COUNT=10;
    final float HEIGHT=10.2F;

注意事項

  • 在定義常量時就需要對該常量進(jìn)行初始化。
  • final 關(guān)鍵字不僅可以用來修飾基本數(shù)據(jù)類型的常量,還可以用來修飾對象的引用或者方法。
  • 為了與變量區(qū)別,常量取名一般都用大寫字符。

數(shù)據(jù)類型

定義

  • Java語言是強類型語言,對于每一種數(shù)據(jù)都定義了明確的具體的數(shù)據(jù)類型,在內(nèi)存中分配了不同大小的內(nèi)存空間。

分類

  • 基本數(shù)據(jù)類型

    • 數(shù)值型

      • 整數(shù)類型(byte,short,int,long)
      • 浮點類型(float,double)
    • 字符型(char)

    • 布爾型(boolean)

  • 引用數(shù)據(jù)類型

    • 類(class)
    • 接口(interface)
    • 數(shù)組([])

計算機存儲單元

  • 定義:變量是內(nèi)存中的小容器,用來存儲數(shù)據(jù)。那么計算機內(nèi)存是怎么存儲數(shù)據(jù)的呢?無論是內(nèi)存還是硬盤,計算機存儲設(shè)備的最小信息單元叫“位(bit)”,我們又稱之為“比特位”,通常用小寫的字母b表示。而計算機最小的存儲單元叫“字節(jié)(byte)”,通常用大寫字母B表示,字節(jié)是由連續(xù)的8個位組成。

  • 常用存儲單元關(guān)系

    • 1B= 8b
      1KB = 1024B
      1MB = 1024KB
      1GB = 1024MB
      1TB = 1024GB

Java基本數(shù)據(jù)類型圖

Java基本數(shù)據(jù)類型

數(shù)據(jù)類型轉(zhuǎn)換

  • 定義

    • 數(shù)據(jù)類型的轉(zhuǎn)換是在所賦值的數(shù)值類型和被變量接收的數(shù)據(jù)類型不一致時發(fā)生的,它需要從一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型。
  • 分類

    • 隱式轉(zhuǎn)換

      • 定義

        • 在運算過程中,由于不同的數(shù)據(jù)類型會轉(zhuǎn)換成同一種數(shù)據(jù)類型,所以整型、浮點型以及字符型都可以參與混合運算。自動轉(zhuǎn)換的規(guī)則是從低級類型數(shù)據(jù)轉(zhuǎn)換成高級類型數(shù)據(jù)。
      • 轉(zhuǎn)換規(guī)則

        • 數(shù)值型數(shù)據(jù)的轉(zhuǎn)換:byte→short→int→long→float→double。
        • 字符型轉(zhuǎn)換為整型:char→int。
      • 轉(zhuǎn)換條件

        • 自動類型轉(zhuǎn)換的實現(xiàn)需要同時滿足兩個條件:①兩種數(shù)據(jù)類型彼此兼容,②目標(biāo)類型的取值范圍大于源數(shù)據(jù)類型(低級類型數(shù)據(jù)轉(zhuǎn)換成高級類型數(shù)據(jù))。例如 byte 類型向 short 類型轉(zhuǎn)換時,由于 short 類型的取值范圍較大,會自動將 byte 轉(zhuǎn)換為 short 類型。
    • 顯式轉(zhuǎn)換

      • 定義

        • 當(dāng)兩種數(shù)據(jù)類型不兼容,或目標(biāo)類型的取值范圍小于源類型時,自動轉(zhuǎn)換將無法進(jìn)行,這時就需要進(jìn)行強制類型轉(zhuǎn)換。
      • 語法格式

        • 目標(biāo)類型 變量名 = (目標(biāo)類型) (被轉(zhuǎn)換的數(shù)據(jù));
          舉例:int b = (byte)(a + b);
      • 注意

        • 如果超出了被賦值的數(shù)據(jù)類型的取值范圍得到的結(jié)果會與你期望的結(jié)果不同
        • 不建議強制轉(zhuǎn)換,因為會有精度的損失。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容