Java基礎(chǔ)知識(shí)學(xué)習(xí)筆記

JAVA入門(mén)

java特性和優(yōu)勢(shì)

  1. 簡(jiǎn)單性
  2. 面向?qū)ο?/strong>
  3. 可移植性
  4. 高性能
  5. 分布式
  6. 動(dòng)態(tài)性
  7. 多線程
  8. 安全性
  9. 健壯性

java三大版本

  1. JavaSE:標(biāo)準(zhǔn)版(桌面程序,控制臺(tái)開(kāi)發(fā)等)
  2. JavaME:嵌入式開(kāi)發(fā)(手機(jī)股淡、小家電等)
  3. JavaEE:企業(yè)級(jí)開(kāi)發(fā)(web端,服務(wù)器開(kāi)發(fā)等)

JDK壮不、JRE蔼夜、JVM

  • JDK: Java Development Kit (java開(kāi)發(fā)者工具)
  • JRE: Java Runtime Environment (java運(yùn)行時(shí)環(huán)境)
  • JVM: Java Virtual Machine (java虛擬機(jī))

安裝開(kāi)發(fā)環(huán)境

卸載JDK

  1. 刪除jdk的安裝目錄
  2. 刪除環(huán)境變量立的JAVA_HOME
  3. 刪除path下關(guān)于java 的目錄
  4. cmd中測(cè)試是否刪除成功:java -version

安裝JDK

  1. 網(wǎng)上搜索下載JDK8

  2. 安裝JDK

  3. 記住安裝路徑

  4. 配置環(huán)境變量

    • JAVA_HOME設(shè)為jdk的安裝路徑
    • 新增path的變量:%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin
  5. 測(cè)試JDK是否安裝成功:cmd中java -version

Hello World

  1. 新建Hello.java文件

    public class Hello{
     public static void main (String [] args) {
         System.out.print("Hello World!");
     }
    }
    
  2. 在cmd中切換到上面文件的目錄下判呕,執(zhí)行編譯:javac Hello.java

  3. 該文件目錄下會(huì)自動(dòng)生成可執(zhí)行的文件Hello.class

  4. 執(zhí)行該文件:java Hello

注意

  • Java是大小寫(xiě)敏感的
  • 文件名和類(lèi)名必須保持一致尘喝,并且首字母大寫(xiě)

原理

  1. javac是調(diào)用的java的編譯器磁浇,將代碼編譯成.class文件
  2. java執(zhí)行.class文件相當(dāng)于一個(gè)解釋器去執(zhí)行,使用的JVM
  3. 這也是java能夠跨平臺(tái)執(zhí)行的關(guān)鍵
  4. java既有編譯型的特點(diǎn)又有解釋型的特點(diǎn)

JAVA基礎(chǔ)

注釋

java的注釋有三種:

  1. 單行注釋

    //這是一行注釋
    
  2. 多行注釋

    /*
    這是一個(gè)多行注釋
    */
    
  3. 文檔注釋

    /**
    *@Author bGpi
    */
    

    參數(shù)信息

    • @author 作者名
    • @version 版本號(hào)
    • @since 指明需要最早使用的jdk版本
    • @param 參數(shù)名
    • @return 返回值情況
    • @throws 異常拋出情況

標(biāo)識(shí)符

  • 關(guān)鍵字

    關(guān)鍵字 含義
    abstract 表明類(lèi)或者成員方法具有抽象屬性
    assert 斷言朽褪,用來(lái)進(jìn)行程序調(diào)試
    boolean 基本數(shù)據(jù)類(lèi)型之一置吓,聲明布爾類(lèi)型的關(guān)鍵字
    break 提前跳出一個(gè)塊
    byte 基本數(shù)據(jù)類(lèi)型之一,字節(jié)類(lèi)型
    case 用在switch語(yǔ)句之中缔赠,表示其中的一個(gè)分支
    catch 用在異常處理中衍锚,用來(lái)捕捉異常
    char 基本數(shù)據(jù)類(lèi)型之一,字符類(lèi)型
    class 聲明一個(gè)類(lèi)
    const 保留關(guān)鍵字嗤堰,沒(méi)有具體含義
    continue 回到一個(gè)塊的開(kāi)始處
    default 默認(rèn)构拳,例如,用在switch語(yǔ)句中梁棠,表明一個(gè)默認(rèn)的分支。Java8 中也作用于聲明接口函數(shù)的默認(rèn)實(shí)現(xiàn)
    do 用在do-while循環(huán)結(jié)構(gòu)中
    double 基本數(shù)據(jù)類(lèi)型之一斗埂,雙精度浮點(diǎn)數(shù)類(lèi)型
    else 用在條件語(yǔ)句中符糊,表明當(dāng)條件不成立時(shí)的分支
    enum 枚舉
    extends 表明一個(gè)類(lèi)型是另一個(gè)類(lèi)型的子類(lèi)型。對(duì)于類(lèi)呛凶,可以是另一個(gè)類(lèi)或者抽象類(lèi)男娄;對(duì)于接口,可以是另一個(gè)接口
    final 用來(lái)說(shuō)明最終屬性漾稀,表明一個(gè)類(lèi)不能派生出子類(lèi)模闲,或者成員方法不能被覆蓋,或者成員域的值不能被改變崭捍,用來(lái)定義常量
    finally 用于處理異常情況尸折,用來(lái)聲明一個(gè)基本肯定會(huì)被執(zhí)行到的語(yǔ)句塊
    float 基本數(shù)據(jù)類(lèi)型之一,單精度浮點(diǎn)數(shù)類(lèi)型
    for 一種循環(huán)結(jié)構(gòu)的引導(dǎo)詞
    goto 保留關(guān)鍵字殷蛇,沒(méi)有具體含義
    if 條件語(yǔ)句的引導(dǎo)詞
    implements 表明一個(gè)類(lèi)實(shí)現(xiàn)了給定的接口
    import 表明要訪問(wèn)指定的類(lèi)或包
    instanceof 用來(lái)測(cè)試一個(gè)對(duì)象是否是指定類(lèi)型的實(shí)例對(duì)象
    int 基本數(shù)據(jù)類(lèi)型之一实夹,整數(shù)類(lèi)型
    interface 接口
    long 基本數(shù)據(jù)類(lèi)型之一橄浓,長(zhǎng)整數(shù)類(lèi)型
    native 用來(lái)聲明一個(gè)方法是由與計(jì)算機(jī)相關(guān)的語(yǔ)言(如C/C++/FORTRAN語(yǔ)言)實(shí)現(xiàn)的
    new 用來(lái)創(chuàng)建新實(shí)例對(duì)象
    package
    private 一種訪問(wèn)控制方式:私用模式
    protected 一種訪問(wèn)控制方式:保護(hù)模式
    public 一種訪問(wèn)控制方式:共用模式
    return 從成員方法中返回?cái)?shù)據(jù)
    short 基本數(shù)據(jù)類(lèi)型之一,短整數(shù)類(lèi)型
    static 表明具有靜態(tài)屬性
    strictfp 用來(lái)聲明FP_strict(單精度或雙精度浮點(diǎn)數(shù))表達(dá)式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算術(shù)規(guī)范
    super 表明當(dāng)前對(duì)象的父類(lèi)型的引用或者父類(lèi)型的構(gòu)造方法
    switch 分支語(yǔ)句結(jié)構(gòu)的引導(dǎo)詞
    synchronized 表明一段代碼需要同步執(zhí)行
    this 指向當(dāng)前實(shí)例對(duì)象的引用
    throw 拋出一個(gè)異常
    throws 聲明在當(dāng)前定義的成員方法中所有需要拋出的異常
    transient 聲明不用序列化的成員域
    try 嘗試一個(gè)可能拋出異常的程序塊
    void 聲明當(dāng)前成員方法沒(méi)有返回值
    volatile 表明兩個(gè)或者多個(gè)變量必須同步地發(fā)生變化
    while 用在循環(huán)結(jié)構(gòu)中
  • java所有的組成部分都需要名字。類(lèi)名亮航、變量名以及方法名都被稱為標(biāo)識(shí)符

表示符注意點(diǎn)

  1. 所有的標(biāo)識(shí)符都應(yīng)該以字母(A-Z或者a-z)荸实、美元符($)或者下劃線(_)開(kāi)始
  2. 首字母之后可以是字母、美元符缴淋、下劃線或數(shù)字的任何字符組合
  3. 不能使用關(guān)鍵字作為變量名或方法名
  4. 標(biāo)識(shí)符是大小寫(xiě)敏感

數(shù)據(jù)類(lèi)型

  • Java是一種強(qiáng)類(lèi)型語(yǔ)言

    要求變量的使用要嚴(yán)格符合規(guī)定准给,所有變量都必須先定義后才能使用

  • Java的數(shù)據(jù)類(lèi)型分為兩類(lèi)

    1. 基本類(lèi)型

      • 數(shù)值類(lèi)型

        • 整數(shù)類(lèi)型

          1. byte占1個(gè)字節(jié)范圍:-128~127
          2. short占2個(gè)字節(jié)范圍:-32768~32767
          3. int占4個(gè)字節(jié)范圍:-21474832147483647
          4. long占8個(gè)字節(jié)范圍
        • 浮點(diǎn)類(lèi)型

          1. float占4個(gè)字節(jié)
          2. double占8個(gè)字節(jié)
        • 字符類(lèi)型

          char占2個(gè)字節(jié)

      • boolean類(lèi)型

        占1位,其值只有true和false

    2. 引用類(lèi)型

      1. 類(lèi)
      2. 接口
      3. 數(shù)組

什么是字節(jié)

  • 位(bit):是計(jì)算機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)的最小單位重抖,11001100是一個(gè)8位二進(jìn)制數(shù)
  • 字節(jié)(byte):是計(jì)算機(jī)數(shù)據(jù)處理的基本單位露氮,習(xí)慣上用大寫(xiě)B(tài)來(lái)表示
  • 1B=8bit
  • 字符:是指計(jì)算機(jī)中使用的字母、數(shù)字仇哆、字和符號(hào)
  • 進(jìn)制

    • 二進(jìn)制(0b開(kāi)頭)
    • 十進(jìn)制
    • 八進(jìn)制(0開(kāi)頭)
    • 十六進(jìn)制(0x開(kāi)頭)
  • 常見(jiàn)轉(zhuǎn)義字符

    轉(zhuǎn)義字符 意義 ASCII碼值(十進(jìn)制)
    \b 退格(BS) 沦辙,將當(dāng)前位置移到前一列 008
    \f 換頁(yè)(FF),將當(dāng)前位置移到下頁(yè)開(kāi)頭 012
    \n 換行(LF) 讹剔,將當(dāng)前位置移到下一行開(kāi)頭 010
    \r 回車(chē)(CR) 油讯,將當(dāng)前位置移到本行開(kāi)頭 013
    \t 水平制表(HT) (跳到下一個(gè)TAB位置) 009
    \v 垂直制表(VT) 011
    \ 代表一個(gè)反斜線字符''' 092
    ' 代表一個(gè)單引號(hào)(撇號(hào))字符 039
    " 代表一個(gè)雙引號(hào)字符 034
    \0 空字符(NULL) 000
    \ddd 1到3位八進(jìn)制數(shù)所代表的任意字符 三位八進(jìn)制
    \uhhhh 1到2位十六進(jìn)制所代表的任意字符 二位十六進(jìn)制

類(lèi)型轉(zhuǎn)換

容量從低到高的類(lèi)型順序?yàn)?/p>

byte,short,char => int =>long => float => double

注意點(diǎn)

  • 不能對(duì)布爾值進(jìn)行轉(zhuǎn)換
  • 在把高容量轉(zhuǎn)換到低容量的時(shí)候,需要強(qiáng)制轉(zhuǎn)換
  • 不能把對(duì)象類(lèi)型轉(zhuǎn)換為不相關(guān)的類(lèi)型
  • 轉(zhuǎn)換的時(shí)候可能內(nèi)存溢出延欠,或者精度誤差
  • 操作比較大的數(shù)的時(shí)候陌兑,注意溢出問(wèn)題
  • JDK7新特性,數(shù)字之間可以用下劃線分割由捎,如1000000 = 100_0000

變量

  • 變量就是可以變的量

  • 每個(gè)變量都必須聲明其類(lèi)型

  • java變量是程序中最基本的存儲(chǔ)單元兔综,其要素包括*變量名、變量類(lèi)型和作用域

  • 變量作用域

    • 類(lèi)變量

    • 實(shí)例變量

    • 局部變量

      public class Variable {
          static int allClicks = 0;    //類(lèi)變量
          String str = "hello world";  //實(shí)例變量
          
          public void method () {
              int i = 0;  //局部變量
          }
      }
      
  • 變量的命名規(guī)范

    • 所有的變量狞玛、方法软驰、類(lèi)名,需見(jiàn)名知意
    • 類(lèi)成員變量:首字母小寫(xiě)和駝峰原則
    • 局部變量:首字母小寫(xiě)和駝峰原則
    • 常量:大寫(xiě)字母和下劃線
    • 類(lèi)名:首字母大寫(xiě)和駝峰原則
    • 方法名:首字母小寫(xiě)和駝峰原則

運(yùn)算符

算術(shù)運(yùn)算符

操作符 描述
+ 加法 - 相加運(yùn)算符兩側(cè)的值
- 減法 - 左操作數(shù)減去右操作數(shù)
* 乘法 - 相乘操作符兩側(cè)的值
/ 除法 - 左操作數(shù)除以右操作數(shù)
取余 - 左操作數(shù)除以右操作數(shù)的余數(shù)
++ 自增: 操作數(shù)的值增加1
-- 自減: 操作數(shù)的值減少1

注意

  • 前綴自增自減法(++a,--a): 先進(jìn)行自增或者自減運(yùn)算心肪,再進(jìn)行表達(dá)式運(yùn)算
  • 后綴自增自減法(a++,a--): 先進(jìn)行表達(dá)式運(yùn)算锭亏,再進(jìn)行自增或者自減運(yùn)算

關(guān)系運(yùn)算符

運(yùn)算符 描述
== 檢查如果兩個(gè)操作數(shù)的值是否相等,如果相等則條件為真硬鞍。
!= 檢查如果兩個(gè)操作數(shù)的值是否相等慧瘤,如果值不相等則條件為真。
> 檢查左操作數(shù)的值是否大于右操作數(shù)的值固该,如果是那么條件為真锅减。
< 檢查左操作數(shù)的值是否小于右操作數(shù)的值,如果是那么條件為真伐坏。
>= 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值怔匣,如果是那么條件為真。
<= 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值著淆,如果是那么條件為真劫狠。

位運(yùn)算符

操作符 描述 例子
如果相對(duì)應(yīng)位都是1拴疤,則結(jié)果為1,否則為0 (A&B)独泞,得到12呐矾,即0000 1100
| 如果相對(duì)應(yīng)位都是 0,則結(jié)果為 0懦砂,否則為 1 (A | B)得到61蜒犯,即 0011 1101
^ 如果相對(duì)應(yīng)位值相同,則結(jié)果為0荞膘,否則為1 (A ^ B)得到49罚随,即 0011 0001
? 按位取反運(yùn)算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1羽资,1變成0淘菩。 (?A)得到-61,即1100 0011
<< 按位左移運(yùn)算符屠升。左操作數(shù)按位左移右操作數(shù)指定的位數(shù)潮改。 A << 2得到240,即 1111 0000
>> 按位右移運(yùn)算符腹暖。左操作數(shù)按位右移右操作數(shù)指定的位數(shù)汇在。 A >> 2得到15即 1111
>>> 按位右移補(bǔ)零操作符。左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移脏答,移動(dòng)得到的空位以零填充糕殉。 A>>>2得到15即0000 1111

邏輯運(yùn)算符

操作符 描述 例子
&& 稱為邏輯與運(yùn)算符。當(dāng)且僅當(dāng)兩個(gè)操作數(shù)都為真殖告,條件才為真阿蝶。 (A && B)為假。
| | 稱為邏輯或操作符黄绩。如果任何兩個(gè)操作數(shù)任何一個(gè)為真赡磅,條件為真。 (A || B)為真宝与。
稱為邏輯非運(yùn)算符冶匹。用來(lái)反轉(zhuǎn)操作數(shù)的邏輯狀態(tài)习劫。如果條件為true,則邏輯非運(yùn)算符將得到false嚼隘。 !(A && B)為真诽里。

賦值運(yùn)算符

操作符 描述 例子
= 簡(jiǎn)單的賦值運(yùn)算符,將右操作數(shù)的值賦給左側(cè)操作數(shù) C = A + B將把A + B得到的值賦給C
+ = 加和賦值操作符飞蛹,它把左操作數(shù)和右操作數(shù)相加賦值給左操作數(shù) C + = A等價(jià)于C = C + A
- = 減和賦值操作符谤狡,它把左操作數(shù)和右操作數(shù)相減賦值給左操作數(shù) C - = A等價(jià)于C = C - A
* = 乘和賦值操作符灸眼,它把左操作數(shù)和右操作數(shù)相乘賦值給左操作數(shù) C * = A等價(jià)于C = C * A
/ = 除和賦值操作符,它把左操作數(shù)和右操作數(shù)相除賦值給左操作數(shù) C / = A墓懂,C 與 A 同類(lèi)型時(shí)等價(jià)于 C = C / A
(%)= 取模和賦值操作符焰宣,它把左操作數(shù)和右操作數(shù)取模后賦值給左操作數(shù) C%= A等價(jià)于C = C%A
<< = 左移位賦值運(yùn)算符 C << = 2等價(jià)于C = C << 2
>> = 右移位賦值運(yùn)算符 C >> = 2等價(jià)于C = C >> 2
&= 按位與賦值運(yùn)算符 C&= 2等價(jià)于C = C&2
^ = 按位異或賦值操作符 C ^ = 2等價(jià)于C = C ^ 2
| = 按位或賦值操作符 C | = 2等價(jià)于C = C | 2

條件運(yùn)算符(?:)

variable x = (expression) ? value if true : value if false

instanceof 運(yùn)算符

該運(yùn)算符用于操作對(duì)象實(shí)例捕仔,檢查該對(duì)象是否是一個(gè)特定類(lèi)型(類(lèi)類(lèi)型或接口類(lèi)型)匕积。

instanceof運(yùn)算符使用格式如下:

( Object reference variable ) instanceof  (class/interface type)

Java運(yùn)算符優(yōu)先級(jí)

類(lèi)別 操作符 關(guān)聯(lián)性
后綴 () [] . (點(diǎn)操作符) 左到右
一元 expr++ expr-- 從左到右
一元 ++expr --expr + - ~ ! 從右到左
乘性 * /% 左到右
加性 + - 左到右
移位 >> >>> << 左到右
關(guān)系 > >= < <= 左到右
相等 == != 左到右
按位與 左到右
按位異或 ^ 左到右
按位或 | 左到右
邏輯與 && 左到右
邏輯或 | | 左到右
條件 榜跌?: 從右到左
賦值 = + = - = * = / =%= >> = << =&= ^ = | = 從右到左
逗號(hào) 闪唆, 左到右

包機(jī)制

  • 為了更好地組織類(lèi),Java提供了包機(jī)制钓葫,用于區(qū)別類(lèi)名的命名空間

  • 包語(yǔ)句的語(yǔ)法格式為:

    package pkg1[.pkg2[,pkg3...]]
    
  • 一般利用公司域名倒置作為包名

Java流程控制

Scanner對(duì)象

  • 我們可以通過(guò)Scanner類(lèi)來(lái)獲取用戶的輸入

  • 基本語(yǔ)法

    Scanner s = new Scanner(System.in);
    
  • 通過(guò)Scanner類(lèi)的next()與nextLine()方法獲取輸入的字符串悄蕾,在讀取前一般需要使用hasNext()與hasNextLine()判斷是否還有數(shù)據(jù)

while循環(huán)和do-while循環(huán)

區(qū)別

  • while是先判斷后執(zhí)行,do-while是先執(zhí)行后判斷
  • do-while總是保證循環(huán)體會(huì)被至少執(zhí)行一次

增強(qiáng)for循環(huán)

  • 主要用于數(shù)組或集合的增強(qiáng)型for循環(huán)

  • 表達(dá)式如下

    for (聲明語(yǔ)句 : 表達(dá)式) {
      //code
    }
    
    //例子
    int [] numbers = {1, 2, 3, 4};
    for (int x:numbers) {
        System.out.print(x);
    }
    

Java的方法

方法的重載

  • 重載就是在一個(gè)類(lèi)中础浮,有相同的函數(shù)名稱帆调,但是形參不同的函數(shù)
  • 方法的重載規(guī)則:
    • 方法名必須相同
    • 參數(shù)列表必須不同(個(gè)數(shù)不同或類(lèi)型不同或參數(shù)排列順序不同)
    • 方法的返回類(lèi)型可以相同也可以不同
    • 僅僅返回類(lèi)型不同不足以成為方法的重載

可變參數(shù)

  • JDK 1.5開(kāi)始,Java支持傳遞同類(lèi)型的可變參數(shù)給一個(gè)方法

  • 在方法聲明中霸旗,在指定參數(shù)類(lèi)型后加一個(gè)省略號(hào)(...)

  • 一個(gè)方法只能指定一個(gè)可變參數(shù)贷帮,它必須是方法的最后一個(gè)參數(shù)。任何普通的參數(shù)必須在它之前聲明

    public static void fun(int...numbers){}
    

Java的數(shù)組

數(shù)組的聲明和創(chuàng)建

  • 首先必須聲明數(shù)據(jù)變量诱告,才能在程序中使用數(shù)組撵枢。下面是聲明數(shù)組變量的語(yǔ)法:

    dataType[] arrayName;     //首選的方法
    //or
    dataType arrayName[];     //效果相同,推薦上面
    
  • Java使用new操作符來(lái)創(chuàng)建數(shù)組精居,語(yǔ)法如下

    dataType[] arrayName = new dataType[arraySize]
    
  • 獲取數(shù)組長(zhǎng)度: arrayName.length

內(nèi)存分析

  • 存放new的對(duì)象和數(shù)組
  • 可以被所有的線程共享锄禽,不會(huì)存放別的對(duì)象引用

  • 存放基本變量類(lèi)型(包含這個(gè)基本類(lèi)型的具體數(shù)值)
  • 引用對(duì)象的變量(存放這個(gè)引用在堆里面的具體地址)

靜態(tài)區(qū)

  • 可以被所有的線程共享
  • 包含了所有的class和static變量

三種初始化

  • 靜態(tài)初始化

    int[] a = {1, 2, 3};
    
  • 動(dòng)態(tài)初始化

    int [] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    
  • 數(shù)組的默認(rèn)初始化

    數(shù)組是引用類(lèi)型,它的元素相當(dāng)于類(lèi)的實(shí)例變量靴姿,因此數(shù)組一經(jīng)分配空間沃但,其中的每個(gè)元素也被按照實(shí)例變量同樣的方式被隱式初始化。

面向?qū)ο?/h1>

認(rèn)識(shí)面向?qū)ο?/h2>
  • 面向?qū)ο蟮谋举|(zhì)就是:以類(lèi)的方式組織代碼佛吓,以對(duì)象的方式組織(封裝)數(shù)據(jù)

  • 抽象

  • 三大特性

    • 封裝
    • 繼承
    • 多態(tài)
  • 認(rèn)識(shí)論角度考慮是:先有對(duì)象后有類(lèi)宵晚。對(duì)象,是具體的事物维雇。類(lèi)淤刃,是抽象的,是對(duì)對(duì)象的抽象吱型。

  • 代碼運(yùn)行角度考慮是:先有類(lèi)后有對(duì)象逸贾。類(lèi)是對(duì)象的模板

方法的調(diào)用

  • 靜態(tài)方法和非靜態(tài)方法

    靜態(tài)方法是和類(lèi)一起加載的,非靜態(tài)方法是需要對(duì)象new出來(lái)之后才加載铝侵。因此不能直接調(diào)用一個(gè)類(lèi)中的非靜態(tài)方法灼伤,但可直接調(diào)用靜態(tài)方法

    靜態(tài)方法前面使用static修飾

  • 值傳遞&引用傳遞

構(gòu)造器

  • 和類(lèi)名相同

  • 沒(méi)有返回值

  • 作用

    • new 的本質(zhì)是在調(diào)用構(gòu)造方法
    • 初始化對(duì)象的值
  • 注意點(diǎn)

    定義有參構(gòu)造之后,如果想要使用無(wú)參構(gòu)造咪鲜,需要顯示的定義一個(gè)無(wú)參的構(gòu)造狐赡。

    Alt+Insert可快速創(chuàng)建構(gòu)造函數(shù)

    this 表示當(dāng)前類(lèi)

封裝

繼承

extends

  • 子類(lèi)繼承了父類(lèi),就會(huì)擁有父類(lèi)的全部方法(私有的無(wú)法被繼承)嗜诀。

Super

  • super調(diào)用父類(lèi)的構(gòu)造方法猾警,顯示調(diào)用時(shí)必須在構(gòu)造方法的第一行
  • super必須只能出現(xiàn)在子類(lèi)的方法或者構(gòu)造方法中
  • super和this不能同時(shí)調(diào)用構(gòu)造方法
  • 和this的區(qū)別
    • 代表的對(duì)象不同
      • this:本身調(diào)用者這個(gè)對(duì)象
      • super:代表父類(lèi)對(duì)象的引用
    • 使用前提不同
      • this:沒(méi)有繼承也可以使用
      • super:只能在繼承條件下才能使用
    • 構(gòu)造方法不同
      • this():本類(lèi)的構(gòu)造
      • super():父類(lèi)的構(gòu)造

重寫(xiě) Override

需要有繼承關(guān)系,子類(lèi)重新父類(lèi)的方法

注意:

  1. 方法名必須相同
  2. 參數(shù)列表必須相同
  3. 修飾符:訪問(wèn)可以擴(kuò)大但不能縮小隆敢。public>protected>default>private
  4. 拋出的異常:范圍可以被縮小发皿,但不能擴(kuò)大。
  5. 不能重寫(xiě)的方法:static拂蝎、final穴墅、private

多態(tài)

  • 同一個(gè)方法可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式

  • 一個(gè)對(duì)象的實(shí)際類(lèi)型時(shí)確定的,但可以指向?qū)ο蟮囊玫念?lèi)型有很多(父類(lèi)温自、有關(guān)系的類(lèi))

  • 多態(tài)存在的條件

    1. 有繼承關(guān)系
    2. 子類(lèi)重寫(xiě)父類(lèi)方法
    3. 父類(lèi)引用指向子類(lèi)對(duì)象
  • 注意:多態(tài)時(shí)方法的多態(tài)玄货,屬性沒(méi)有多態(tài)

  • 子類(lèi)重寫(xiě)了父類(lèi)的方法,則執(zhí)行子類(lèi)的方法

Static

  • 對(duì)象中靜態(tài)代碼塊是在對(duì)象第一次構(gòu)造時(shí)執(zhí)行悼泌,且是第一個(gè)執(zhí)行

    public class className {
        {
            System.out.println("匿名代碼塊");  //第2個(gè)執(zhí)行   一般可賦初始值
        }
        static {
            System.out.println("靜態(tài)代碼塊");  //第1個(gè)執(zhí)行松捉,且只執(zhí)行一次,再new時(shí)不執(zhí)行
        }
        public className () {
            System.out.println("構(gòu)造方法");    //第3個(gè)執(zhí)行
        }
    }
    

抽象類(lèi) abstract

  • 不能new抽象類(lèi)馆里,只能靠子類(lèi)去實(shí)現(xiàn)它
  • 抽象類(lèi)中可以寫(xiě)普通方法
  • 抽象方法必須寫(xiě)在抽象類(lèi)中

接口 interface

  • 區(qū)別

    • 普通類(lèi):只能具體實(shí)現(xiàn)
    • 抽象類(lèi):具體實(shí)現(xiàn)和規(guī)范(抽象方法)都有
    • 接口:只有規(guī)范隘世!自己無(wú)法寫(xiě)方法。專業(yè)的約束鸠踪。約束和實(shí)現(xiàn)分離:面向接口編程丙者。
  • 接口時(shí)OO的精髓,是對(duì)對(duì)象的抽象营密,最能體現(xiàn)這一點(diǎn)的就是接口

  • 作用

    1. 是一種約束
    2. 可以定義一些方法械媒,讓不同的人實(shí)現(xiàn)
    3. 所有的方法都是public abstract
    4. 所有的變量都是public static final
    5. 接口不能被實(shí)例化,接口中沒(méi)有構(gòu)造方法
    6. implements可以實(shí)現(xiàn)多個(gè)接口
    7. 必須要重寫(xiě)接口中的方法

異常

  • try评汰、catch纷捞、finally可以進(jìn)行異常的捕獲和處理

  • throw可在程序類(lèi)拋出異常,throws則是在方法上拋出異常被去,讓外層去捕獲處理

  • 異常類(lèi)的結(jié)構(gòu)

    異常類(lèi)結(jié)構(gòu)圖
    異常類(lèi)型 說(shuō)明
    Exception 異常層次結(jié)構(gòu)的根類(lèi)
    RuntimeException 運(yùn)行時(shí)異常兰绣,多數(shù) java.lang 異常的根類(lèi)
    ArithmeticException 算術(shù)譜誤異常,如以零做除數(shù)
    ArraylndexOutOfBoundException 數(shù)組大小小于或大于實(shí)際的數(shù)組大小
    NullPointerException 嘗試訪問(wèn) null 對(duì)象成員编振,空指針異常
    ClassNotFoundException 不能加載所需的類(lèi)
    NumberF ormatException 數(shù)字轉(zhuǎn)化格式異常,比如字符串到 float 型數(shù)字的轉(zhuǎn)換無(wú)效
    IOException I/O 異常的根類(lèi)
    F ileN otF oundException 找不到文件
    EOFException 文件結(jié)束
    InterruptedException 線程中斷
    IllegalArgumentException 方法接收到非法參數(shù)
    ClassCastException 類(lèi)型轉(zhuǎn)換異常
    SQLException 操作數(shù)據(jù)庫(kù)異常
  • 經(jīng)驗(yàn)總結(jié)

    1. 處理運(yùn)行時(shí)異常時(shí),采用邏輯去合理規(guī)避踪央,同時(shí)輔助try-catch處理
    2. 在多重catch塊后面臀玄,可以加一個(gè)catch(Exception)來(lái)處理可能會(huì)被遺漏的異常
    3. 對(duì)于不確定的代碼,也可以加上try-catch畅蹂,處理潛在的異常
    4. 盡量去處理異常健无,切忌只是簡(jiǎn)單地調(diào)用printStackTrace()去打印輸出
    5. 具體如何處理異常,要根據(jù)不同的業(yè)務(wù)需求和異常類(lèi)型去決定
    6. 盡量添加finally語(yǔ)句塊去釋放占用的資源液斜。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末累贤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子少漆,更是在濱河造成了極大的恐慌臼膏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示损,死亡現(xiàn)場(chǎng)離奇詭異渗磅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)检访,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)始鱼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脆贵,你說(shuō)我怎么就攤上這事医清。” “怎么了卖氨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵会烙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我双泪,道長(zhǎng)持搜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任焙矛,我火速辦了婚禮放闺,結(jié)果婚禮上颇玷,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好箱蝠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吃粒,像睡著了一般巧娱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逾滥,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天峰档,我揣著相機(jī)與錄音,去河邊找鬼。 笑死讥巡,一個(gè)胖子當(dāng)著我的面吹牛掀亩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欢顷,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼槽棍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抬驴?” 一聲冷哼從身側(cè)響起炼七,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎布持,沒(méi)想到半個(gè)月后豌拙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳖链,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年姆蘸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芙委。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逞敷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灌侣,到底是詐尸還是另有隱情推捐,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布侧啼,位于F島的核電站牛柒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏痊乾。R本人自食惡果不足惜皮壁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哪审。 院中可真熱鬧蛾魄,春花似錦、人聲如沸湿滓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叽奥。三九已至扔水,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朝氓,已是汗流浹背魔市。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工主届, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人待德。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓岂膳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親磅网。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容