Java學(xué)習(xí)筆記

Java程序結(jié)構(gòu)

  • 注釋
    //單行注釋
    //凡是某一行“//”符號(hào)右邊的文字都是注釋
    
    /*多行注釋*/
    //Java是用/**/進(jìn)行多行注釋
    
    /**文件注釋*/
    //文件注釋的規(guī)則與多行注釋類似,它的語(yǔ)法是/**…*/。
    /**通常在設(shè)計(jì)類或方法時(shí),為了更詳細(xì)地解說(shuō)用途,可以使用文件注釋。編寫(xiě)文件注釋后,可以使用  javadoc.exe工具程序,
    將此文件注釋處理成Java API文件,所產(chǎn)生的文件是HTML文件
    */
    
  • 面向?qū)ο笤O(shè)計(jì)

    Java是純面向?qū)ο蟪绦蛘Z(yǔ)言,所有的Java程序代碼都是在類內(nèi),一個(gè)完整的Java程序至少需要有一個(gè)類

  • 類區(qū)塊

    類區(qū)塊是用左大括號(hào)“{”和右大括號(hào)“}”括起來(lái),一個(gè)類區(qū)塊內(nèi)可以有其他方法(或稱函數(shù))區(qū)塊

  • 公有類

    一個(gè)Java程序只能有一個(gè)公有類(public class),同時(shí)這個(gè)類的名稱需與Java程序名稱相同

  • main()方法

    ????每個(gè)獨(dú)立的Java程序必須要有main()方法,這是Java程序執(zhí)行的起點(diǎn)。設(shè)計(jì)main()方法時(shí),必須是public static void類型,參數(shù)則是字符串?dāng)?shù)組“String[ ] args”(void代表方法沒(méi)有返回值)

  • IO交互
    // 輸入(input)
    import java.util.Scanner;
    Scanner 變量名 = new Scanner(System.in);
    變量名.next數(shù)據(jù)類型(首字母大寫(xiě));
    
    // 輸出(output)
    System.out.println("內(nèi)容")    // 換行
    System.out.print("內(nèi)容")   // 不換行
    
  • 命令的結(jié)尾

    Java程序內(nèi)每條命令的結(jié)尾是分號(hào)“;”

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

  • 變量
    //數(shù)據(jù)類型 變量1,變量2,變量n
     int age,count...
    
  • 常量
    /*
    字面常量
    數(shù)據(jù)類型 常量=值
    */
    int salary=3500;
    
    /*
    具名常量
    final 數(shù)據(jù)類型=值
    */
    final double PI=3.14;
    
  • 基本數(shù)據(jù)類型
    // 數(shù)值型
        // 整數(shù)
          - byte(1)
          - short(2)
          - int(4)
          - long(8)
        // 浮點(diǎn)數(shù)
          - float(4)
          - double(8)
        // 字符
          - char(2)
    // 非數(shù)值型
      // 布爾
          - boolean(1)
    
  • 引用數(shù)據(jù)類型
    1. 類(class)
    // 通過(guò)API:Application Programming Interface查看各種類信息
    - class
    1. Sting類:字符串
        - 在java.lang包下,不需要import,不可變類型
        - Java程序中雙引號(hào)字符串,都是String類的對(duì)象
        - String構(gòu)造方法創(chuàng)建對(duì)象
           String 變量 new String(參數(shù))     // 地址不同,每次新建地址
        - String賦值創(chuàng)建
          String 變量 = “abc”     // 內(nèi)容相同則地址相同
        - 字符串的比較
           ==比較的是地址     // s1==s2
           equals(參數(shù))方法比較的是值     // s1.equals(s2)
        - 字符串的長(zhǎng)度     // 變量.length()
        - 字符串的索引     // 變量.charAt(元素番號(hào))
    2. String Builder
        - 內(nèi)容是可變的,不會(huì)產(chǎn)生新的變量
          StringBuilder sb = new StringBulider()
          sb.appen("abc")      // 返回的是對(duì)象本身
          public String toString()     // 把StringBuilder轉(zhuǎn)換成String
          public StringBuilder(String s)     // 構(gòu)造方法實(shí)現(xiàn)String轉(zhuǎn)StringBuilder
        - reverse方法反轉(zhuǎn)
          return new StringBuilder(s).reverse().toString()
    3. 集合ArrayList<E類型:泛型>
        - 提供一種存儲(chǔ)空間可變的存儲(chǔ)模型,存儲(chǔ)的數(shù)據(jù)容量可以發(fā)生變化
        - ArrayList的構(gòu)造方法
          public ArrayList()     // 創(chuàng)建一個(gè)空的集合對(duì)象
          ArrayList<String> array = new ArrayList<>()
          public boolean add(E e)     // 將制定的元素追加到末尾
          array.add("abc")
          public void add(int index, E e)     // 在指定位置插入指定元素
        - 其他方法
          remove()
          get()
          set()
          size()
    
    1. 接口(interface)
    - interface
    - 特點(diǎn)
      - 就是一種公共的規(guī)范標(biāo)準(zhǔn),通用接口
      - java的接口更多的體現(xiàn)在對(duì)行為的抽象
      - 接口用interface關(guān)鍵字修飾
        public interface 接口名(){}
      - 類實(shí)現(xiàn)接口用implements表示
        public class 類名 implements接口名(){}
      - 接口不能實(shí)例化,可參照多態(tài)方式通過(guò)實(shí)現(xiàn)類對(duì)象實(shí)例化,這叫接口多態(tài)
       // 多態(tài)的形式
          - 具體類多態(tài),抽象類多態(tài),接口多態(tài)
       // 多態(tài)的前提
          - 有繼承或?qū)崿F(xiàn)關(guān)系,有方法重寫(xiě),有父(類或接口)引用指向(子或?qū)崿F(xiàn))類對(duì)象
       // 接口的實(shí)現(xiàn)類
          - 要么重寫(xiě)接口中的所有抽象方法
          - 要么是抽象類
       // 接口的成員特點(diǎn):
          - 成員變量:
            - 只能是常量,默認(rèn)修飾符public static final 變量
          - 構(gòu)造方法:
            - 接口沒(méi)有構(gòu)造方法,因?yàn)榻涌谥饕菍?duì)行為進(jìn)行抽象的,是沒(méi)有具體存在
            - 一個(gè)類如果沒(méi)有父類,默認(rèn)繼承自O(shè)bject類
          - 成員方法:
            - 只能是抽象方法,默認(rèn)修飾符public abstract 方法名(){}
       // 類和接口的關(guān)系:
          - 類和類的關(guān)系
            - 繼承關(guān)系,只能單繼承,但可以多層繼承
          - 類和接口的關(guān)系
            - 實(shí)現(xiàn)關(guān)系,可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn),還可以在繼承一個(gè)類的同時(shí)實(shí)現(xiàn)多個(gè)接口
          - 接口和接口的關(guān)系
            - 繼承關(guān)系,可以單繼承,也可以多繼承
      // 抽象類和接口的區(qū)別:
          - 成員區(qū)別
            - 抽象類
              - 常量,變量,有構(gòu)造方法,有抽象方法,也有非抽象方法
            - 接口
              - 常量,只有抽象方法
          - 關(guān)系區(qū)別
            - 類與類
              - 繼承,單繼承
            - 類與接口
              - 實(shí)現(xiàn),可以單實(shí)現(xiàn),也可以多實(shí)現(xiàn)
            - 接口與接口
              - 繼承,單繼承,多繼承
      // 設(shè)計(jì)理念區(qū)別
            - 抽象類
              - 對(duì)類抽象,包括屬性,行為
            - 接口
              - 對(duì)行為抽象,主要是行為
    
    1. 數(shù)組(array[ ])
    - array[ ]
    - 定義數(shù)組
      - 動(dòng)態(tài)定義
        // 數(shù)據(jù)類型 [ ] 數(shù)組名 = new 數(shù)據(jù)類型(3)
        int [ ] arr = new int [3]
      - 靜態(tài)定義
        // 數(shù)據(jù)類型 [ ] 數(shù)組名 = {元素1,元素2,n}
        int [ ] arr = {1,2,3}
      - 二維數(shù)組
        // 數(shù)據(jù)類型 [ ] [ ] 數(shù)組名
    - 遍歷數(shù)組     // 遍歷不到通常用-1表示
      - for循環(huán)遍歷
        for(i=0,i<arr.length,i++) {
            輸出arr[i]}
      - foreach循環(huán)
        for(int i:arr){
            輸出i
    }
    - 常見(jiàn)錯(cuò)誤
      - 索引越界
        - 超過(guò)length的長(zhǎng)度
      - 空指針
        - 數(shù)據(jù)為null
    - 多個(gè)數(shù)組指向相同內(nèi)存地址時(shí),一變?nèi)?
  • 數(shù)據(jù)類型的轉(zhuǎn)換

    自動(dòng)類型轉(zhuǎn)換:
    變量1 = 變量2,變量2的范圍小于變量1,可自動(dòng)
    變量1 = 變量2,變量2的范圍大于變量1,報(bào)錯(cuò)

    強(qiáng)制類型轉(zhuǎn)換:
    目標(biāo)變量 = (數(shù)據(jù)類型)源變量

運(yùn)算符

  • 單元運(yùn)算符

    只需要一個(gè)運(yùn)算符就可以運(yùn)算,這類運(yùn)算符稱為單元運(yùn)算符
    ????自增i++,先運(yùn)算后加
    ????自增++i,先加后運(yùn)算
    ????自減i--,先運(yùn)算后減
    ????自減--I,先減后運(yùn)算

  • 二元運(yùn)算符

    需要有兩個(gè)運(yùn)算符才可以運(yùn)算的符號(hào)稱為二元運(yùn)算符

    賦值運(yùn)算符
    變量1 = 變量2 // 變量2賦值給變量1
    變量1 == 變量2 // 不是賦值是比較,判斷變量2是否等于變量1

    算數(shù)運(yùn)算符
    加法(+) ????// 復(fù)合運(yùn)算為:+=
    減法(-) ????// 復(fù)合運(yùn)算為:-=
    乘法(*) ????// 復(fù)合運(yùn)算為:*=
    除法(/) ????// 取商,復(fù)合運(yùn)算為:/=
    求余(%) ????// 取余,復(fù)合運(yùn)算為:%=

    比較運(yùn)算符
    大于(>)
    小于(<)
    大于等于(>=)
    小于等于(<=)
    等于(==)
    不等于(!=) ????// !也叫反向運(yùn)算符

    邏輯運(yùn)算符
    或(&) ????//a&b,a和b都false才false,否則true
    ????????????// &&為短路或,a真則不看b
    與(|) ????//a|b,a和b都true才true,否則false
    ????????????// ||為短路與,b真才真
    非(!) ????//!a,結(jié)果和a的結(jié)果正好相反
    異或(^) ????//a^b,a和b結(jié)果不同則true,相同為false

  • 三元運(yùn)算符

    需要三個(gè)運(yùn)算符進(jìn)行運(yùn)算,這類運(yùn)算符稱為三元運(yùn)算符
    表達(dá)式? X:Y ????//true則返回X,false則返回Y
    例如:a>b? a:b

流程控制

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

從上到下,從左到右,順序執(zhí)行。比如:賦值語(yǔ)句

  • 分支結(jié)構(gòu)

根據(jù)條件表達(dá)式的返回值執(zhí)行不同的分支。比如:if分支,switch分支

// if語(yǔ)句
// 單分支
if(關(guān)系表達(dá)式) {
語(yǔ)句體;
}
// 雙分支
if(關(guān)系表達(dá)式){
真語(yǔ)句體;
} else {
假語(yǔ)句體;
}
// 多分支
if(關(guān)系表達(dá)式){
語(yǔ)句體1;
} else if{
語(yǔ)句體2;
} ...else {
語(yǔ)句體n+1;
}

// switch語(yǔ)句
switch (表達(dá)式){
case 值1:
     語(yǔ)句體1;
      break;
case 值2:
      語(yǔ)句體2;
      break;
default:
      語(yǔ)句體n+1;
      [break;]
}

// case穿透:如果case中沒(méi)有break,會(huì)穿透下一個(gè)case語(yǔ)句
  • 循環(huán)結(jié)構(gòu)
// for循環(huán)
for(初始化語(yǔ)句;判斷語(yǔ)句;控制語(yǔ)句){
  循環(huán)體語(yǔ)句;
  }

for(int i=1;i<=5;i++) {
  System.out.println("test1");
}

for(;;){      //死循環(huán)
}

// while循環(huán)
while(條件判斷){
循環(huán)體;
}
int j=1;
while(j<=5) {
  System.out.println("test1");
  j++;
}
while(true){    //死循環(huán)
}

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

do{     //死循環(huán)
} while(true);

跳轉(zhuǎn)控制語(yǔ)句

  • continue
    • 跳過(guò)本次循環(huán)

終止循環(huán)語(yǔ)句

  • break
    • 終止循環(huán)

Random

import java.util.Random;
Random 變量 = new Random();
變量n= 變量.nextInt(10) + 1        // 隨機(jī)生成1-10

方法?函數(shù)

//定義方法
public static void 方法名([形參]) {    // 形參:數(shù)據(jù)類型 變量,多個(gè)參數(shù)用,分隔  例如:int a, int b
方法體;
}
- 定義的方法與main方法同級(jí)
- 兩個(gè)明確
  - 參數(shù)
    - 明確幾個(gè)參數(shù),明確參數(shù)的類型
  - 返回值
    - 明確返回值類型

### 調(diào)用方法
/*
方法名([實(shí)參]);
  - 要在main方法中調(diào)用自定義方法
  - 關(guān)鍵字參數(shù)要用:例如a:10,b:20
*/

### 返回值
return 數(shù)據(jù)    // 有返回值要定義同類型變量接收
public static 返回類型 方法名(形參) {}
    - 方法的返回類型與return的返回類型相同

### 方法重載
- 在同一個(gè)類中方法名要相同,參數(shù)不同
    - 參數(shù)個(gè)數(shù)不同
    - 參數(shù)類型不同

### 注意事項(xiàng)
- 方法不能嵌套
- return的返回值和方法返回類型要相同
- 方法中的變量不會(huì)修改全局變量的值
- 對(duì)于引用類型的參數(shù),形參的改變影響實(shí)參的值    // 比如:方法的參數(shù)是arr數(shù)組,方法修改arr

文件操作

  • File類

// 構(gòu)造方法
File(String pathname)
File(String 路徑,String 文件)
File(File 目錄,String文件)

// 創(chuàng)建功能
  - 創(chuàng)建文件
    File f1 =new File(文件路徑)
    f1.createNewFile()
  - 創(chuàng)建目錄
    File f2 =new File(目錄)
     f2.mkdir()
  - 創(chuàng)建多層目錄
     File f3 =new File(多層目錄)
     f2.mkdirs()

// 成員方法
public boolean isDirectory()    // 判斷是否為目錄
public boolean isFile()    // 判斷是否為文件
public boolean isExists()    // 判斷是否存在
public String getAbsolutePath()    // 返回絕對(duì)路徑
public String getPath()    // 返回目錄名
public String getName()    // 返回文件或路徑名
public String [ ] list()    // 返回目錄和文件名的數(shù)組
public File [ ] listFiles()    // 返回目錄和文件名的File對(duì)象數(shù)組

// 刪除功能
public boolean delete()    // 刪除抽象路徑名表示的文件或目錄
  • IO流

- 字節(jié)流(binary)
  - 抽象基類
  FileInputStream    // 輸入流的所有類的超類
  FileOutputStream    // 輸出流的所有類的超類

// 寫(xiě)數(shù)據(jù)
FileOutputStream(String name)    // 創(chuàng)建文件輸出流以指定的名稱寫(xiě)入文件
FileOutputStream fso = new FileOutStream(文件名);    // 追加寫(xiě):在文件名后加,true
fso.write(內(nèi)容信息);
fso.close();
- 3種方式
void write(int b)    // 一次寫(xiě)一個(gè)字節(jié)
void write(byte[ ] b)    // 一次寫(xiě)一個(gè)字節(jié)數(shù)組
getBytes()    // 返回字符串對(duì)應(yīng)的字節(jié)數(shù)組
void write(byte [ ] b, int off, int len)    // 將len字節(jié)從指定的字節(jié)數(shù)組開(kāi)始,從偏移量off開(kāi)始一次寫(xiě)一個(gè)字節(jié)數(shù)組

// 讀數(shù)據(jù)
FileInputStream(String name)    // 從指定的名稱讀入文件
FileInputStream fso = new FileInputStream(文件名);
fso.read();
fso.close();
- 3種方式
void read(int b)    // 一次讀一個(gè)字節(jié)
void read(byte[ ] b)    // 一次讀一個(gè)字節(jié)數(shù)組
void read(byte [ ] b, int off, int len)    // 將len字節(jié)從指定的字節(jié)數(shù)組開(kāi)始,從偏移量off開(kāi)始一次寫(xiě)一個(gè)字節(jié)數(shù)組

// 復(fù)制數(shù)據(jù)
FileInputStream f1 =new FileInputStream(文件名);
FileOutputStream f2 =new FileOutputStream(文件名);
byte [ ] bys = new byte[1024];
int len;
while((len=f1.read(bys))!= -1){
  f2.write(bys, off=0, len);
}
f1.close();
f2.close();
  • 字節(jié)緩沖流

// 字節(jié)緩沖輸入流
BufferInputStream b1 = new BufferInputStream(new FileInputStream(文件名));
// 字節(jié)緩沖輸出流
BufferOutputStream b1 = new BufferOutputStream(new FileOutputStream(文件名));
- 編碼解碼
  - String s = "中國(guó)"
  - 編碼
    - byte[ ] bys = s.getBytes(charsetName:"GBK");
  - 解碼
    - String ss = new String(bys, charsetName:"GBK")

// 字符流(text)
- 抽象基類
InputStreamReader    // 輸入流的所有類的超類
OutputStreamWriter    // 輸出流的所有類的超類

// 寫(xiě)數(shù)據(jù)

        - OutputStreamWriter(String name)

            - 創(chuàng)建文件輸出流以指定的名稱寫(xiě)入文件
            - FileOutputStream fso = new FileOutStream(文件名);

                - 追加寫(xiě):在文件名后加,true

            - fso.write(內(nèi)容信息);
            - fso.close();

        - 5種方式

            - void write(int b)

                - 寫(xiě)一個(gè)字符

            - void write(char[ ] b)

                - 寫(xiě)一個(gè)字符數(shù)組

            - void write(char [ ] b, int off, int len)

                - 寫(xiě)字符數(shù)組的一部分

            - void write(String b)

                - 寫(xiě)一個(gè)字符串

            - void write(byte [ ] b, int off, int len)

                - 寫(xiě)字符串的一部分

    - 讀數(shù)據(jù)

        - FileInputStream(String name)

            - 從指定的名稱讀入文件
            - FileInputStream fso = new FileInputStream(文件名);
            - fso.read();
            - fso.close();

        - 3種方式

            - void read(int b)

                - 一次讀一個(gè)字節(jié)

            - void read(byte[ ] b)

                - 一次讀一個(gè)字節(jié)數(shù)組

            - void read(byte [ ] b, int off, int len)

                - 將len字節(jié)從指定的字節(jié)數(shù)組開(kāi)始,從偏移量off開(kāi)始一次寫(xiě)一個(gè)字節(jié)數(shù)組

    - 復(fù)制數(shù)據(jù)

        - FileInputStream f1 =new FileInputStream(文件名);
        - FileOutputStream f2 =new FileOutputStream(文件名);
        - byte [ ] bys = new byte[1024];
        - int len;
        - while((len=f1.read(bys))!= -1){
f2.write(bys, off=0, len);
}
        - f1.close();
        - f2.close();

異常

體系:Throwable(所有異常的超類)
Error

  • 硬件或系統(tǒng)級(jí)別的嚴(yán)重錯(cuò)誤,java無(wú)法捕獲

Exception

  • RuntimeException

編譯期是不檢查的,出現(xiàn)問(wèn)題后,在修改代碼
運(yùn)行時(shí)異常

  • 非RuntimeException

編譯期就必須處理的,否則程序不能通過(guò)編譯
編譯時(shí)異常

  • try...catch

try {
  可能出錯(cuò)的代碼;
catch (異常類名 變量名){    // 變量名:是一個(gè)對(duì)象,可以使用.方法
  異常的處理代碼;
   }
}

### Throwable成員方法
public String getMessage()    // 返回Throwable的詳細(xì)消息字符串
public String toString()    // 返回此可拋出的簡(jiǎn)短描述
public void printStackTrace()    // 把異常的錯(cuò)誤信息輸出在控制臺(tái)

### throws 異常類名;
- 跟在方法的括號(hào)()后面
- 主動(dòng)拋出異常,誰(shuí)調(diào)用誰(shuí)處理該異常

### 自定義異常
public class 異常類名 extends Exception{
  無(wú)參構(gòu)造方法()
  帶參構(gòu)造方法()
}
  - 調(diào)用自定義異常時(shí),要用throw new 自定義異常("提示信息")拋出異常,調(diào)用方法()后throws 異常
public void checkScore(int score) throws fException{
    if (score<0 || score>120){
       throw new fException("分?jǐn)?shù)有誤");
    } else {
        System.out.println("分?jǐn)?shù)正常");
    }
}

throw和throws的區(qū)別

  • throw
    • 用在方法體內(nèi),跟的是異常對(duì)象名
    • 表示拋出異常,由方法體內(nèi)的語(yǔ)句處理
    • 執(zhí)行throw一定拋出了某種異常
  • throws
    • 用在方法申明后面,跟的是異常類名
    • 表示拋出異常,由方法的調(diào)用者來(lái)處理
    • 表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生

面向?qū)ο?/h2>

  • 類的特點(diǎn)
  • 類是對(duì)象的數(shù)據(jù)類型
  • 具有相同屬性和方法的一組對(duì)象的集合
  • 類是對(duì)現(xiàn)實(shí)生活中一類具有共同屬性和行為的事物的抽象
  • 類的定義
public class 類名 {
    成員變量;
    
    構(gòu)造方法(無(wú)參/有參);      // ALT+INSERT快捷鍵用于生產(chǎn)構(gòu)造方法

    成員方法;

    get();
    set();
}

  • 成員變量
  • 類中方法外的變量
  • String brand;
  • 成員方法
  • 類中的方法,不加static
  • public void 方法名() {}
  • 方法中定義的變量叫局部變量
  • 抽象類abstract

特點(diǎn):

  • 一個(gè)沒(méi)有方法體的方法應(yīng)該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類
public abstract class 類名(){
        public abstract void 方法名();
}
//抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類
//抽象類不能實(shí)例化
    - 可以參照多態(tài)通過(guò)子類對(duì)象實(shí)例化,這叫抽象類多態(tài)
//抽象類的子類
    - 要么重寫(xiě)抽象類中的所有抽象方法
    - 要么是抽象類
//抽象類的成員特點(diǎn):
    - 成員變量:
        - 可以是變量或常量
    - 構(gòu)造方法:
        - 有構(gòu)造方法但不能實(shí)例化,用于子類訪問(wèn)父類數(shù)據(jù)的初始化
     - 成員方法:
        - 可以有抽象方法,限定子類必須完成某些動(dòng)作
        - 也可以有非抽象方法,提高代碼復(fù)用性

對(duì)象

  • 對(duì)象的特點(diǎn)

屬性

  • 每個(gè)對(duì)象的每個(gè)屬性都有特定的值

行為

  • 對(duì)象能夠執(zhí)行的操作
  • 對(duì)象是能摸得著看得到的真實(shí)存在的實(shí)體
  • 創(chuàng)建對(duì)象

類名 對(duì)象名 = new 類名
Phone p = new Phone();

  • 使用對(duì)象

使用成員變量

  • 對(duì)象名.變量名
  • p.brand

使用成員方法

  • 對(duì)象名.方法名()
  • p.call()

封裝

  • private關(guān)鍵字
  • 用來(lái)保護(hù)私有變量不被外界隨意修改
  • get方法,給外界訪問(wèn)
  • set方法,給外界修改
  • 比如:private String name;
  • this關(guān)鍵字
  • 在成員方法用this.變量可以訪問(wèn)成員變量,否則為局部變量(形參)
  • 代表所在類的對(duì)象引用
  • 構(gòu)造方法
// 用來(lái)創(chuàng)建對(duì)象,完成對(duì)象的初始化
public class Student {
public Student() {     // 如果沒(méi)有定義構(gòu)造方法,系統(tǒng)會(huì)生成默認(rèn)的
  }
}

繼承

  • 繼承的特點(diǎn)

可以使得子類具有父類相同的屬性和方法,還可以在子類中重新定義,追加屬性和方法
public class 子類名 extends 父類名()

父類:基類或超類
子類:派生類

優(yōu)點(diǎn):提供了代碼的復(fù)用性,提供代碼的維護(hù)性

缺點(diǎn):類之間產(chǎn)生了關(guān)系,耦合性增加,子類的獨(dú)立性降低

IS-A:是什么的一種,存在繼承關(guān)系

子類不能同時(shí)繼承多個(gè)類
想要多繼承要依次多層傳遞繼承

  • LEGB原則:
  • Local:局部作用域
  • Enclosing:嵌套作用域
  • Global:全局作用域
  • Built-in:內(nèi)置作用域
  • this關(guān)鍵字:

可以訪問(wèn)本類中的成員變量和方法

  • this.成員變量
  • this(構(gòu)造方法)
  • this.成員方法
  • super關(guān)鍵字:

可以訪問(wèn)父類中的成員變量和方法

  • super.成員變量
  • super(構(gòu)造方法)
  • super.成員方法
  • 子類中的所有構(gòu)造方法默認(rèn)都會(huì)訪問(wèn)父類的無(wú)參構(gòu)造方法
  • 子類初始化之前,先完成父類的初始化
  • 子類構(gòu)造方法的第一條語(yǔ)句默認(rèn)都是super()無(wú)參
  • 如果父類中沒(méi)有無(wú)參構(gòu)造方法
  • 通過(guò)super關(guān)鍵字取顯示的調(diào)用父類的帶參構(gòu)造方法
  • 或者在父類中定義一個(gè)無(wú)參的構(gòu)造方法
  • 方法重寫(xiě)

子類中出現(xiàn)了和父類中一模一樣的方法申明
@Override

  • 可以幫助檢查重寫(xiě)方法的方法申明的正確性

父類的私有方法不能被重寫(xiě)
父類的私有成員子類是不能繼承的
子類方法訪問(wèn)權(quán)限不能低于父類現(xiàn)有權(quán)限
public>默認(rèn)>私有

修飾符

- 包Package
  - java中的包可以看做就是文件夾,用于對(duì)類進(jìn)行分類管理
  - Package 包名;
  - Package com.Animal;
  - javac -d . 編譯文件,會(huì)自動(dòng)建包
  - javac com.Animal 編譯文件,手動(dòng)建包
  - 包里放class文件即編譯文件
- 導(dǎo)包import
  - import 包名.文件
  - import com.Animal
  • 權(quán)限修飾符

private

  • 訪問(wèn)權(quán)限在同一個(gè)類中

默認(rèn)

  • 比private同一個(gè)包中子類無(wú)關(guān)類

protect

  • 比默認(rèn)多了不同包的子類

public

  • 不同包的無(wú)關(guān)類,最大權(quán)限
  • final修飾符

修飾方法:

  • 表明是最終方法,不能被重寫(xiě)

修飾變量:

  • 表明是常量,不能修改再次賦值

修飾類:

  • 表明該類是最終類,不能被繼承

修飾局部變量:

基本類型變量

  • 基本類型的數(shù)據(jù)值不能發(fā)生改變

引用類型變量

  • 引用類型的地址值不能發(fā)生改變,但地址里面的內(nèi)容可以發(fā)生改變
  • static修飾符

特點(diǎn):

  • 被類的所有對(duì)象共享
  • 這也是判斷是否使用static關(guān)鍵字的條件
  • 也可以通過(guò)類名調(diào)用
  • 類.變量
  • 靜態(tài)成員方法只能訪問(wèn)靜態(tài)成員

多態(tài)

  • 特點(diǎn)
  • 同一個(gè)對(duì)象,在不同時(shí)刻表現(xiàn)出來(lái)的不同形態(tài)
  • 成員變量:

編譯看左邊,執(zhí)行看左邊

  • 成員方法:

編譯看左邊,執(zhí)行看右邊

因?yàn)槌蓡T方法有重寫(xiě)

  • 優(yōu)點(diǎn):

提高了程序的擴(kuò)展性
定義方法的時(shí)候,父類做參數(shù),但使用子類參與操作

  • 缺點(diǎn):

不能使用子類的特有功能
可以使用轉(zhuǎn)型解決此弊端

  • 向上轉(zhuǎn)型

從子到父:父類引用指向子類對(duì)象
Animal a = new Cat();

  • 向下轉(zhuǎn)型

從父到子:父類引用轉(zhuǎn)為子類對(duì)象
Cat c = (Cat)a;

  • 前提
  • 有繼承或?qū)崿F(xiàn)關(guān)系
  • 有方法重寫(xiě)override
  • 有父類引用指向子類對(duì)象
Cat a = new Cat()    // 貓是貓
Anaimal a = new Cat()    // 貓是動(dòng)物
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1.計(jì)算機(jī)的常識(shí): 計(jì)算機(jī)之父 -- 馮.諾依曼 計(jì)算機(jī)最大的獎(jiǎng)項(xiàng) -- 圖靈獎(jiǎng),沒(méi)有諾貝爾獎(jiǎng) Java之父 --...
    元素_1444閱讀 692評(píng)論 0 0
  • foochane :https://foochane.cn/article/2019121501.html 1 基...
    foochane閱讀 1,407評(píng)論 0 5
  • 1、不同的包package下的類名可以相同 2、標(biāo)識(shí)符:類名,不能以數(shù)字開(kāi)頭,區(qū)分大小寫(xiě)。字母、數(shù)字、下劃線、美元...
    零下的雨閱讀 527評(píng)論 0 0
  • 變量名第一個(gè)單詞首字母小寫(xiě),其余單詞首字母大寫(xiě) java 區(qū)分大小寫(xiě),price Price 是不同變量 變量名可...
    w4irdo閱讀 252評(píng)論 0 0
  • 1.十進(jìn)制-->二進(jìn)制:十進(jìn)制轉(zhuǎn)為二進(jìn)制主要是對(duì)十進(jìn)制數(shù)進(jìn)行除2運(yùn)算 2.二進(jìn)制-->十進(jìn)制:二進(jìn)制乘以2的過(guò)程 ...
    晨星資源閱讀 468評(píng)論 0 0

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