java基礎

轉載(https://github.com/yangchong211/YCBlogs/blob/d21fdb30f6751ccc02642e1b0a73aef50fdd176b/java)
0.Java語言概述

  • 0.1 jdk工具部分exe解釋

    • jar.exe jar包
    • javadoc.exe 文檔生成器
    • Java.exe 解釋器
    • Javac.exe 編輯器
  • 0.2 開發(fā)與運行Java程序需經(jīng)過哪些過程?

    • 用工具編輯源程序,也就是寫代碼,保存
    • 用Java編輯器工具javac.exe編譯源程序文件,生成字節(jié)碼.class文件
    • 用Java解釋器工具Java.exe解釋運行生成.class文件
  • 0.3 Java是如何實現(xiàn)跨平臺的?

    • 如下所示:
    • 跨平臺是怎樣實現(xiàn)的呢?這就要談及Java虛擬機(Java Virtual Machine,簡稱 JVM)。
    • JVM也是一個軟件,不同的平臺有不同的版本。我們編寫的Java源碼,編譯后會生成一種 .class 文件,稱為字節(jié)碼文件。Java虛擬機就是負責將字節(jié)碼文件翻譯成特定平臺下的機器碼然后運行。也就是說,只要在不同平臺上安裝對應的JVM,就可以運行字節(jié)碼文件,運行我們編寫的Java程序。
    • 而這個過程中,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這一”中間層“,就能在不同平臺上運行,真正實現(xiàn)了”一次編譯,到處運行“的目的。
    • JVM是一個”橋梁“,是一個”中間件“,是實現(xiàn)跨平臺的關鍵,Java代碼首先被編譯成字節(jié)碼文件,再由JVM將字節(jié)碼文件翻譯成機器語言,從而達到運行Java程序的目的。
    • 注意:編譯的結果不是生成機器碼,而是生成字節(jié)碼,字節(jié)碼不能直接運行,必須通過JVM翻譯成機器碼才能運行。不同平臺下編譯生成的字節(jié)碼是一樣的,但是由JVM翻譯成的機器碼卻不一樣。
    • 所以,運行Java程序必須有JVM的支持,因為編譯的結果不是機器碼,必須要經(jīng)過JVM的再次翻譯才能執(zhí)行。即使你將Java程序打包成可執(zhí)行文件(例如 .exe),仍然需要JVM的支持。
    • 注意:跨平臺的是Java程序,不是JVM。JVM是用C/C++開發(fā)的,是編譯后的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的JVM。

1.Java標識符規(guī)則

  • 1.1 組成規(guī)則
    • 英文大小寫字母
    • 數(shù)字字符
    • $或_
  • 1.2 注意事項
    • 不能以數(shù)字開頭
    • 不能是Java中的關鍵字
    • 區(qū)分大小寫
    • 不能有空格
  • 1.3 命名規(guī)范【必須見名知意】
    • 下劃線式命名:my_name
    • 駝峰式命名:myName
    • 類,接口命名:必須是大寫字母開頭,比如PersonActivity
    • 方法,變量【字符串】命名:getData(),otherName
    • 常量命名:一般全是大寫,比如MAX_VALUE

2.常量和變量

  • 2.1 什么是常量和變量
    • 其值不可以改變的稱之為常量
    • 其值會發(fā)生變化的稱之為變量
  • 2.2 常量有哪些
    • 字符串常量 用雙引號包括的 "hello world"
    • 整型常量 所有的整數(shù) 199
    • 小數(shù)常量 所有的小數(shù) 4.50
    • 字符常量 用單引號包括的 'a'
    • 布爾常量 true和false
    • 空常量 null
  • 2.3 變量
    • 用來描述值可以變化的量,比如室外溫度,App活躍用戶量等

3.進制

  • 3.1 進制有哪些
  • 二進制
    • 0和1 前綴0B或者0b 比如:0B1001 轉為十進制是9
  • 八進制
    • 0-7 前綴0 比如:0103
  • 十進制【我們常用的】
    • 0-9 沒有前綴
  • 十六進制
    • 0-9 和 A-F 前綴0x或者0X 比如:0x123
  • 進制轉化
    • 任何進制轉化為十進制公式:系數(shù) * 底數(shù) ^ 指數(shù)
0b1010 = 1 * 2^3 + 0 *2^2 + 1*2^1 + 0*2^0
       = 8 + 0 + 2 + 0
       = 10

0123  = 1*8^2 + 2*8^1 + 3*8^0
      = 64 + 16 + 3
      = 83

0x123 = 1*16^2 + 2*16^1 + 3*16^0
      = 256 + 32 + 3
      = 291

  • 3.2 補碼
    • 正數(shù)的補碼和原碼相同
5
原碼:0000 0101
補碼:0000 0101
    * 負數(shù)的補碼是它的反碼加1

-5:
原碼:1000 0101
反碼:1111 1010
    +         1
------------------
補碼  1111 1011

5.字符編碼

  • 常見的字符編碼
    • ASCII碼
    • GBK碼
    • Unicode碼【占2個字節(jié)】

6.運算符

  • 6.1 運算符有哪些?
    • 算術運算符
    • 賦值運算符
    • 關系運算符
    • 邏輯運算符
    • 三目運算符
    • 特殊運算符:位運算符
  • 6.2 算術運算符
      • ,- , * , / , %【取余】 , ++【自加】, --【自減】
  • 6.3 賦值運算符
    • = , += , -= , *= , /= , %=
  • 6.4 關系運算符
    • == , > , < , >= , <= , !=
  • 6.5 邏輯運算符
    • & ,^ ,| ,&& ,|| ,! , ^
  • 6.6 三目運算符【Android中用的很多】
    • a == b ? c : d
    • 格式:(條件表達式)?表達式1:表達式2
  • 6.7 位運算符
    • & , | , ^ , ~ , << , >> , >>>

7.Java基本語句結構

  • 7.1 語句結構種類

    • 順序結構
    • 選擇結構
    • 循環(huán)結構
  • 7.2 順序結構

    • 從上到下依次執(zhí)行
  • 7.3 選擇結構【可以嵌套】

    • if , if else , if else if …… else
    • switch case【支持byte,short,char,int,String】
  • 7.4 循環(huán)結構

  • for

    for(初始化語句;判斷條件語句;控制條件語句) {
             循環(huán)體語句;
    }
    第一步:先執(zhí)行初始化語句,只執(zhí)行一次
    第二步:執(zhí)行判斷條件語句
    第三部:執(zhí)行循環(huán)體語句
    第四步:執(zhí)行控制條件語句,然后再執(zhí)行循環(huán)體語句【循環(huán)】
    
    
  • while

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

    do {
             循環(huán)體語句;
    }while((判斷條件語句);
    
    

8.Java方法

  • 8.1 定義

  • 方法就是完成特定功能的代碼塊

    • 1:系統(tǒng)方法,只需要會使用,不需要知道內部的結構
    • 2:自定義方法:方法的內部實現(xiàn)需要我們來寫
    • 3:方法內部不能再嵌套方法
  • 8.2 格式

  • 方法格式

    修飾符   返回值類型   方法名(參數(shù)類型 參數(shù) , ……){
         函數(shù)體
         return 返回值
    }
    
    
  • 修飾符: public static或直接是public或是其它private

  • 返回類型:所有的數(shù)據(jù)類型(基本類型:int ,char ,float, long, 引用類型:String)

  • 方法名:1:見名知意 2: getMax

  • 參數(shù)類型:所有的數(shù)據(jù)類型 ,如果一個方法沒有返回值,則返回值類型為void

  • 參數(shù)名:變量名

  • 返回值:就是要返回的結果(這個結果必須和返回類型一致)

9.數(shù)組

  • 9.1 數(shù)組概念

    • 數(shù)組是一個容器,可以存儲多個變量,這些變量數(shù)據(jù)類型要一致
    • 數(shù)組既可以存儲基本數(shù)據(jù)類型,也可以存儲引用數(shù)據(jù)類型
  • 9.2 一維數(shù)組

  • 數(shù)組定義格式

    • 格式1:數(shù)據(jù)類型【】 數(shù)組名
    • 格式2:數(shù)據(jù)類型 數(shù)組名【】
    int[] a;     定義了一個int類型的數(shù)組a;
    int a[];    定義了一個int類型的a數(shù)組;
    推薦使用第一種定義方式。
    
    
  • 數(shù)組的初始化

    • Java中的數(shù)組必須先初始化,然后才能使用。
    • 所謂初始化:就是為數(shù)組中的數(shù)組元素分配內存空間,并為每個數(shù)組元素賦值。
  • 初始化分類:

    • a:動態(tài)初始化: 只指定長度,由系統(tǒng)給出初始化值
    • b:靜態(tài)初始化: 給出初始化值,由系統(tǒng)決定長度
    • 注意事項:這兩種方式,只能使用一種,不能進行動靜結合
  • 9.3 二維數(shù)組

  • 數(shù)組定義格式

    • 數(shù)據(jù)類型[][] 變量名 = new 數(shù)據(jù)類型[m][n];
    • m表示這個二維數(shù)組有多少個一維數(shù)組
    • n表示每一個一維數(shù)組的元素個數(shù)
  • 舉例:

    int[][] arr = new int[3][2];
    定義了一個二維數(shù)組arr
    這個二維數(shù)組有3個一維數(shù)組,名稱是arr[0],arr[1],arr[2]
    每個一維數(shù)組有2個元素,可以通過arr[m][n]來獲取,表示獲取第m+1個一維數(shù)組的第n+1個元素
    
    

10.Java的內存分配以及棧和堆的區(qū)別

  • 10.1 先了解幾個概念

    • 方法區(qū)
    • 本地方法去
    • 寄存器
    A:棧: 存放的是局部變量
    局部變量:在方法定義或者方法聲明上的變量都是局部變量。
    B:堆: 存放的是所有new出來的東西
    特點:
        a: 每一個new出來的東西都會為其分配一個地制值。
        b: 每一個變量都有一個默認的值
            byte,short,int,long  -- 0
            float,double            -- 0.0
            char                    -- '\u0000'
            boolean                -- false
            引用數(shù)據(jù)類型               -- null       
        c: 使用完畢就變成了垃圾,等待垃圾回收器對其回收
    C:方法區(qū):(面向對象部分講解)
    D:本地方法區(qū):(和系統(tǒng)相關)
    E:寄存器:(cpu使用)
    
    

11.使用switch和if-else區(qū)別

  • 11.1 switch語句特點

    • 使用switch語句時,要注意表達式必須是符合byte,char,short,int或枚舉類型的表達式,而不能使用浮點類型或long類型。
    • switch語句將表達式的值依次與每個case子語句中的常量值相比較。如果匹配成功,則執(zhí)行該case語句中的語句,直到遇到break語句為止。
    • default語句是可選的,當表達式的值與任何一個case語句都不匹配時,就執(zhí)行default后的語句。
  • 11.2 switch語句與if-else比較

    • if-else只是單純地一個接一個比較;if...else每個條件都計算一遍;
    • 使用了Binary,Tree算法;絕大部分情況下switch會快一點,除非是if-else的第一個條件就為true。編譯器編譯switch與編譯if...else...不同。不管有多少case,都直接跳轉,不需逐個比較查詢;switch只計算一次值,然后都是test , jmp……有很多else if的時候,用switch case比較清晰
    • switch...case與if...else,if的根本區(qū)別在于,switch...case會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch變量的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,697評論 4 12
  • 九種基本數(shù)據(jù)類型的大小,以及他們的封裝類。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動裝箱和自動拆箱 什么是自動裝箱...
    關瑋琳linSir閱讀 2,049評論 0 47
  • 參考菜鳥教程進行編寫 一.基本語法 1.1 基本概念 一個Java程序可以認為是一系列對象的集合,而這些對象通過調...
    天藍如染閱讀 488評論 0 1
  • 面向對象的三個特征 封裝,繼承,多態(tài).這個應該是人人皆知.有時候也會加上抽象. 多態(tài)的好處 允許不同類對象對同一消...
    Blizzard_liu閱讀 1,802評論 0 6
  • 寫代碼: 1,明確需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,確定步驟。每一個思路部分用到哪些...
    橫沖直撞666閱讀 406評論 0 0

友情鏈接更多精彩內容