Java之基礎語法

1.Java的語言概述

Java基礎知識的圖解

image.png

(1)軟件開發介紹

1.軟件開發:

軟件即一系列按照特定順序組織的計算機數據和指令的集合。有系統軟件應用軟件之分。java

2.人機交互的方式:

圖形化界面(簡稱GUI)是指採用圖形方式顯示的計算機操做用戶界面。編程

命令行界面(簡稱CLI)是用戶經過鍵盤輸入指令,計算機獲得指令後,予以執行。數組

3.經常使用的DOS命令

dir : 列出當前目錄下的文件以及文件夾
md : 建立目錄
rd : 刪除目錄
cd : 進入指定的目錄
cd.. : 退回到上一級目錄
cd : 退回到根目錄
del : 刪除文件
exit : 退出DOS命令窗口

(2)計算機編程語言介紹

1.語言發展

第一代語言:機器語言,指令是以二進制代碼形式存在。app

第二代語言:彙編語言,使用助記符表示一條機器指令。編程語言

第三代語言:高級語言,是種獨立於機器,面向對象或者對象的語言。模塊化

  • 面向過程的語言:C,Pascal、Fortran
  • 面向對象的語言:Java,JS,Python,Scala..

(3)Java語言的迭代概述

1991年 Green項目,開發語言最初命名爲Oak (橡樹)工具

1994年,開發組意識到Oak 很是適合於互聯網開發工具

1996年,發佈JDK 1.0,約8.3萬個網頁應用Java技術來製做編碼

1997年,發佈JDK 1.1,JavaOne會議召開,創當時全球同類會議規模之最spa

1998年,發佈JDK 1.2,同年發佈企業平臺J2EE

1999年,Java分紅J2SE、J2EE和J2ME,JSP/Servlet技術誕生

2004年,發佈里程碑式版本:JDK 1.5,爲突出此版本的重要性,改名爲JDK 5.0

2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME

2009年,Oracle公司收購SUN,交易價格74億美圓

2011年,發佈JDK 7.0

2014年,發佈JDK 8.0,是繼JDK 5.0以來變化最大的版本

2017年,發佈JDK 9.0,最大限度實現模塊化

2018年3月,發佈JDK 10.0,版本號也稱爲18.3

2018年9月,發佈JDK 11.0,版本號也稱爲18.9

(4)運行機制及運行過程

1.Java語言的特色:

  • 面向對象
    兩個基本概念:類、對象
    三大特性:封裝、繼承、多態
  • 健壯性
    ① 去除了C語言中的指針 ②自動的垃圾回收機制 -->仍然會出現內存溢出、內存泄漏。
  • 跨平臺性
    一次編譯處處運行「Write once,Run Anywhere」
    Java的虛擬機JVM,不一樣的平臺,提供不一樣的虛擬機。
    image.png

(5)JDK JRE JVM

1.什麼是JDK、JRE、JVM,以及三者的關係

  • JDK是提供給Java開發人員使用,包含了Java的開發工具。
  • JRE是Java的運行環境,包括了Java虛擬機和Java程序所需的核心類庫等。
  • JVM是一個虛擬的計算機,具備指令集並使用不一樣的存儲區域。負責執行指令,管理數據、內存、寄存器。

image.png

(6)第一個程序HelloWorld

1.第一個開發體驗

image.png

1.1編寫

//建立一個後綴名爲.java的文件:HelloWorld.java
public class HelloWorld{
    public static void main(String[]args){
        System.out.println("HelloWorld");
    }
}

1.2編譯

javac HelloWolrd.java
會生成一個後綴名爲.class的字節碼文件

1.3運行

java HelloWorld
注意要去掉.class後綴名

1.4小結

  • Java源文件以「.java」爲後綴名。
  • Java應用程序的執行入口是main()方法。
  • Java語言嚴格區分大小寫。
  • Java每一個語句都以「;」結束。
  • 大括號都是成對出現的,缺一不可。

2.常見的Bug及解決方法
20200430105136.png
20200430105146.png

(7)註釋和API文檔

1.三種註釋類型

1.單行註釋 格式: //註釋文字
2.多行註釋 格式:/*註釋文字*/
單行和多行註釋,不會被JVM解釋執行,多行註釋不容許嵌套。
3.文檔註釋 格式/**註釋文字*/
文檔註釋能夠被JDK提供的工具javadoc所解析,生成網頁形式的說明文檔

2.API文檔

  • API: application programming interface。習慣上:將語言提供的類庫,都稱爲API.
  • API文檔:針對於提供的類庫如何使用,給的一個說明書。相似於《新華字典》

2.Java基本語法

(1)關鍵字和標識符

1.關鍵字:

被Java語言賦予了特殊含義,用作專門用途的字符串,關鍵字全部的字母小寫
image.png

image.png

2.保留字

現有Java版本還沒有使用,但之後版本可能會做爲關鍵字使用。(goto、const)

3.標識符

3.1定義

Java對各類變量、方法和類等要素命名時使用的字符序列爲標識符。(本身起名字的地方都叫標識符)

3.2標識符命名規則

1.由26個英文字母大小寫,0-9,_或$組成
2.數字不可開頭
3.不可使用關鍵字和保留字,但能包含關鍵字和保留字
4.Java中嚴格區分大小寫,長度無限制
5.標識符中不能夠包含空格

3.3標識符命名規範

  • 包名:多單詞組成時全部單詞都小寫
  • 類名、接口名:多單詞組成時,全部單詞首字母都大寫
  • 變量名、方法名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每一個單詞首字母大寫
  • 常量名:全部字母都大寫,多單詞組成時用_下劃線隔開

(2)變量

1.1變量的概念

  • 內存中的一個存儲區域
  • 該區域的數據能夠在同一類型範圍不斷變化
  • 變量時程序中最基本的儲存單元,包含變量類型、變量名和儲存的值

1.2使用變量要注意

  • Java中每一個變量必須先聲明,後使用
  • 使用變量名來訪問這塊區域的數據
  • 變量的做用域:其定義所在的一對{}內
  • 變量只有在其做用域纔有效
  • 同一個做用域中不可使變量重名

1.3變量的聲明與賦值

聲明變量 語法: <數據類型><變量名稱>;
                int test;
       
變量的賦值 語法: <變量名稱> = <值>;
                test = 10;
            
聲明和賦值變量 語法:<數據類型><變量名稱> = <值>;;
                int test = 10;

2.1變量的分類

image.png

  • 在方法體外,類體內聲明變量稱爲成員變量。
  • 在方法體內部聲明的變量稱爲局部變量。

2.2 8種數據類型

類型          儲存空間            範圍
(1)整數
byte          1字節            -128~127
short         2字節            正負3萬多
int           4字節            正負21億
整數默認的類型是int類型
long          8字節            19位數字
表示long類型數據後面須要加L/l
(2)浮點數
float         4字節      
表示float類型數據後面須要加F/f,取值範圍大於8字節的long
double        8字節   
浮點數默認是double類型
(3)字符
char          2字節
(4)布爾
boolean       1字節   取值爲true或者false

2.3定義8種數據類型

public class Type{
    public static void main(String[]args){
        //1.整數類型定義byte、short、int、long
        byte a = 10;
        short b = 11;
        int c = 12;
        long d = 1000L;//long類型要加上L/l
        //2.浮點數定義
        float f = 1.23F;//float類型要加上F/f
        double e = 2.6;
        //3.char類型
        char r = 'A';
        //char類型中只能放一個字符 不可爲空
        //4.布爾類型
        boolean lean = true;//取值只有true/false
    }
}

3.1自動數據類型的轉換

  • 容量小的類型自動轉換成容量大的數據類型。

image.png

  • byte、short、char之間不會互相轉換,三者計算會首先轉換成int類型。
  • boolean類型不能參與其餘數據類型的運算。
  • 當把任何基本數據的值和字符串(String)進行鏈接運算時(+),基本數據類型的值將自動轉化爲字符串類型。
int + int
    int + long ==> long + long  (把int轉換成long: 從小到大,自動類型轉換)
    
    例子1:
    int i = 1; 
    byte b = 2; 
    int c = i + b; i是int型,b是byte型,二者運算自動類型轉換爲int型

3.2強制類型轉換

  • 自動類型轉換的逆過程,將容量大的數據類型轉換爲容量小的數據類型,使用時要加上強轉符(),但可能形成精度下降或溢出。
轉後類型 變量名稱 = (轉後類型)轉前數據或者變量;
    long類型(8個字節)的數字10:
    long num = 10L;
    long類型強制類型轉換成int類型(4個字節):
    int a = (int)num;//把num中的數據強制類型轉換成int類型,並把結果賦值給int變量a

4.進制

進制的概念:逢幾進一就叫作幾進制
進制的分類:
    十進制:    逢十進一        每位的數字0-9
    二進制:    逢二進一        每位的數字0-1
    八進制:    逢八進一        每位的數字0-7
    十六進制:  逢十六進一      每位的數字0-9,10(A/a),11(B/b),12(C/c),13(D/d),14(E/e),15(F/f)

4.1進制的轉換

1.二進制轉十進制(8421編碼):    
    (二進制數字的每一位(從右向左 )上隱藏了一個2的多少次方,第1位是2的0次方,第2位是2的1次方...):
    1101 = 1*2^0 + 0*2^1 + 1*2^2 + 1*2^3
         = 1*1 + 0*2 + 1*4 + 1*8
       = 1 + 0 + 4 + 8
         = 13
      
    1111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3
       = 1*1 + 1*2 + 1*4 + 1*8
         = 1 + 2 + 4 + 8
         = 15
        
      
  2.十進制轉二進制: 除以2取餘數,倒過來寫
    十進制的13轉換成二進制:    1101
    十進制的75轉換成二進制:    1001011

(3)運算符

1.算術運算符

算術運算符: + - + - * / % (前)++ (後)++ (前)-- (後)-- +

【經典代碼】

//除號:/
        int num1 = 12;
        int num2 = 5;
        int result1 = num1 / num2;
        System.out.println(result1);//2
        // %:取餘運算
        //結果的符號與被模數的符號相同
        //開發中,常用%來判斷可否被除盡的狀況。
        int m1 = 12;
        int n1 = 5;
        System.out.println("m1 % n1 = " + m1 % n1);

        int m2 = -12;
        int n2 = 5;
        System.out.println("m2 % n2 = " + m2 % n2);

        int m3 = 12;
        int n3 = -5;
        System.out.println("m3 % n3 = " + m3 % n3);

        int m4 = -12;
        int n4 = -5;
        System.out.println("m4 % n4 = " + m4 % n4);
        //(前)++ :先自增1,後運算
        //(後)++ :先運算,後自增1
        int a1 = 10;
        int b1 = ++a1;
        System.out.println("a1 = " + a1 + ",b1 = " + b1);
        
        int a2 = 10;
        int b2 = a2++;
        System.out.println("a2 = " + a2 + ",b2 = " + b2);
        
        int a3 = 10;
        ++a3;//a3++;
        int b3 = a3;
        //(前)-- :先自減1,後運算
        //(後)-- :先運算,後自減1
        
        int a4 = 10;
        int b4 = a4--;//int b4 = --a4;
        System.out.println("a4 = " + a4 + ",b4 = " + b4);

【特別說明】

  • (前)++ :先自增1,後運算

    (後)++ :先運算,後自增1

  • (前)-- :先自減1,後運算

    (後)-- :先運算,後自減1

  • 鏈接符:+:只能使用在String與其餘數據類型變量之間使用。

2.賦值運算符

賦值運算符:= += -= *= /= %=

【經典代碼】

int i2,j2;
        //連續賦值
        i2 = j2 = 10;
        //***************
        int i3 = 10,j3 = 20;
        int num1 = 10;
        num1 += 2;//num1 = num1 + 2;
        System.out.println(num1);//12

        int num2 = 12;
        num2 %= 5;//num2 = num2 % 5;
        System.out.println(num2);

        short s1 = 10;
        //s1 = s1 + 2;//編譯失敗
        s1 += 2;//結論:不會改變變量自己的數據類型
        System.out.println(s1);

運算的結果不會改變變量自己的數據類型

3.比較運算符

比較運算符(關係運算符): == != > < >= <= instanceof

【經典代碼】

int i = 10;
        int j = 20;

        System.out.println(i == j);//false
        System.out.println(i = j);//20

        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b2 == b1);//false
        System.out.println(b2 = b1);//true
  • 比較運算符的結果是boolean類型
  • ( > < >= <= :只能使用在數值類型的數據之間。)
  • == 和 !=: 不只可使用在數值類型數據之間,還可使用在其餘引用類型變量之間。

4.邏輯運算符

邏輯運算符:& && | || ! ^

【經典代碼】

boolean b1 = true;
        b1 = false;
        int num1 = 10;
        if(b1 & (num1++ > 0)){
            System.out.println("我如今在北京");
        }else{
            System.out.println("我如今在南京");
        }

        System.out.println("num1 = " + num1);
        
        & && 的區別:當符號左邊是false時,&繼續執行符號右邊的運算,&&再也不執行符號右邊的運算。
        | ||同理↑

5.位運算符

位運算符:<< >> >>> & | ^ ~

【經典代碼】

int i = 21;
        i = -21;
        System.out.println("i << 2 :" + (i << 2));
        System.out.println("i << 3 :" + (i << 3));
        System.out.println("i << 27 :" + (i << 27));

        int m = 12;
        int n = 5;
        System.out.println("m & n :" + (m & n));
        System.out.println("m | n :" + (m | n));
        System.out.println("m ^ n :" + (m ^ n));
  • 位運算符操做的都是整型的數據
  • << :在必定範圍內,每向左移1位,至關於 * 2 >>:在必定範圍內,每向右移1位,至關於 / 2

6.三元運算符

格式:(條件運算符)?表達式1 : 表達式2

【經典代碼】

1.獲取兩個整數的最大值

int a = 5;
int b = 6;
int max = (a > b) ? a : b;

2.獲取三個數的最大值

int a = 1;
int b = 2;
int c = 3;
int temp = (a > b) ? a : b; //先判斷兩個數的值賦值給一個變量temp
int max = (temp > c) ? temp : c; //再判斷temp與c的大小
  • 條件表達式的結果爲boolean類型
  • 根據條件表達式真或假,決定執行表達式1,仍是表達式2.

    若是表達式爲true,則執行表達式1。
    若是表達式爲false,則執行表達式2。

  • 表達式1 和表達式2要求是一致的。
  • 三元運算符能夠嵌套使用
  • 凡是可使用三元運算符的地方,均可以改寫爲if-else反之,不成立。
  • 若是程序既可使用三元運算符,又可使用if-else結構,那麼優先選擇三元運算符。緣由:簡潔、執行效率高。

(4)流程控制

1.分支語句

1.1 if-else條件判斷結構

書寫方法:

結構1:
if(條件表達式){
    執行表達式
}

結構2:(2選1)
if(條件表達式){
    執行表達式1
}else{
    執行表達式2
}

結構3:(n選1)
if(條件表達式1){
    執行表達式1
}else if(條件表達式2){

...
}else{
    執行表達式n
}
  • else 結構是可選的。
  • 針對於條件表達式:

    • 若是多個條件表達式之間是「互斥」關係(或沒有交集的關係),哪一個判斷和執行語句聲明在上面仍是下面,無所謂。
    • 若是多個條件表達式之間有交集的關係,須要根據實際狀況,考慮清楚應該將哪一個結構聲明在上面。
    • 若是多個條件表達式之間有包含的關係,一般狀況下,須要將範圍小的聲明在範圍大的上面。不然,範圍小的就沒機會執行了。
  • if-else結構是能夠相互嵌套的。
  • 若是if-else結構中的執行語句只有一行時,對應的一對{}能夠省略的。可是,不建議省略。

1.2 switch-case選擇結構

switch(表達式){
case 常量1:
    執行語句1;
    //break;
case 常量2:
    執行語句2;
    //break;
...
default:
    執行語句n;
    //break;
}
  1. 根據switch表達式中的值,依次匹配各個case中的常量。一旦匹配成功,則進入相應case結構中,調用其執行語句。

    • 當調用完執行語句之後,則仍然繼續向下執行其餘case結構中的執行語句,直到遇到break關鍵字或此switch-case結構末尾結束爲止。
  2. break,可使用在switch-case結構中,表示一旦執行到此關鍵字,就跳出switch-case結構
  3. switch結構中的表達式,只能是以下的6種數據類型之一: byte 、short、char、int、枚舉類型(JDK5.0新增)、String類型(JDK7.0新增)
  4. case 以後只能聲明常量。不能聲明範圍。
  5. break關鍵字是可選的。
  6. default:至關於if-else結構中的else.
  7. default結構是可選的,並且位置是靈活的。

補充:

  • 若是switch-case結構中的多個case的執行語句相同,則能夠考慮進行合併。
  • break在switch-case中是可選的

2.循環結構

2.1. 循環結構的四要素

① 初始化條件 ② 循環條件 --->是boolean類型 ③ 循環體 ④ 迭代條件 說明:一般狀況下,循環結束都是由於②中循環條件返回false了。

2.2三種循環結構

for循環結構

for(①;②;④){
    ③
}
執行過程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

while循環結構

①
while(②){
    ③;
    ④;
}
執行過程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②

for和while循環總結:

  1. 開發中,基本上咱們都會從for、while中進行選擇,實現循環結構。
  2. for循環和while循環是能夠相互轉換的! 區別:for循環和while循環的初始化條件部分的做用範圍不一樣。
  3. 咱們寫程序,要避免出現死循環。

do - while循環結構

①
do{
    ③
    ④
}while(②)

說明:

  1. do-while循環至少會執行一次循環體!
  2. 開發中,使用for和while更多一些。較少使用do-while
  3. 數組循環比遍歷一般用for循環
  4. 觸發條件複雜的用while循環

3. 「無限循環」結構: while(true) 或 for(;;)

如何結束一個循環結構?

  • 方式一:當循環條件是false時
  • 方式二:在循環體中,執行break

4.嵌套循環

嵌套循環:將一個循環結構A聲明在另外一個循環結構B的循環體中,就構成了嵌套循環 內層循環:循環結構A 外層循環:循環結構B

說明: ① 內層循環結構遍歷一遍,只至關於外層循環循環體執行了一次 ② 假設外層循環須要執行m次,內層循環須要執行n次。此時內層循環的循環體一共執行了m * n次 ③ 外層循環控制行數,內層循環控制列數

/*
        ******
        ******
        ******
        ******
        */
        for(int j = 1;j <= 4;j++ ){
            for(int i = 1;i <= 6;i++){
                System.out.print('*');
            }
            System.out.println();
        }
        //練習二:
        /*            i(行號)        j(*的個數)
        *             1            1
        **            2            2
        ***           3            3
        ****          4            4
        *****         5            5
        */

        for(int i = 1;i <= 5;i++){//控制行數
            for(int j = 1;j <= i;j++){//控制列數
                System.out.print("*");
            
            }
            System.out.println();
        }

3. 關鍵字:break和continue

break和continue關鍵字的使用

使用範圍 循環中的做用(不一樣點) 相同點
break swiltch-case循環結構中 結束當前循環 關鍵字後面不能聲明執行語句
continue 循環結構中 結束當前循環 關鍵字後面不能聲明執行語句

補充:帶標籤的break和continue的使用

4. 補充:Scanner類的應用

如何從鍵盤獲取不一樣類型的變量:須要使用Scanner類

具體實現步驟:

  1. 導包:import java.util.Scanner;
  2. Scanner的實例化:Scanner scan = new Scanner(System.in);
  3. 調用Scanner類的相關方法(next() / nextXxx()),來獲取指定類型的變量

注意: 須要根據相應的方法,來輸入指定類型的值。若是輸入的數據類型與要求的類型不匹配時,會報異常:InputMisMatchException致使程序終止

*/
//1.導包:import java.util.Scanner;
import java.util.Scanner;

class ScannerTest{
    
    public static void main(String[] args){
        //2.Scanner的實例化
        Scanner scan = new Scanner(System.in);
        
        //3.調用Scanner類的相關方法
        System.out.println("請輸入你的姓名:");
        String name = scan.next();
        System.out.println(name);

        System.out.println("請輸入你的芳齡:");
        int age = scan.nextInt();
        System.out.println(age);

        System.out.println("請輸入你的體重:");
        double weight = scan.nextDouble();
        System.out.println(weight);

        System.out.println("你是否相中我了呢?(true/false)");
        boolean isLove = scan.nextBoolean();
        System.out.println(isLove);

        //對於char型的獲取,Scanner沒有提供相關的方法。只能獲取一個字符串
        System.out.println("請輸入你的性別:(男/女)");
        String gender = scan.next();//"男"
        char genderChar = gender.charAt(0);//獲取索引爲0位置上的字符
        System.out.println(genderChar);    
    }
}
相關文章
相關標籤/搜索