日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java入门学习笔记[狂神说Java]

發布時間:2025/4/5 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java入门学习笔记[狂神说Java] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面:
本文根據B站狂神說Java 與菜鳥教程 整理而來,僅供個人學習使用,如有侵權,請聯系刪除。

文章目錄

      • IDEA使用
      • Java基礎01:注釋
      • Java基礎02:數據類型
      • Java基礎03:類型轉換
      • Java基礎04:變量
      • Java基礎05:運算符
      • Java基礎06:包機制
      • Java流程控制01:用戶交互Scanner
      • Java流程控制02:Switch case語句
      • Java流程控制03:循環語句
      • Java方法01:方法的基本概念
      • Java數組01:數組基礎
      • Java數組02:Arrays類
      • Java數組02:手撕冒泡排序
      • Java面向對象01:OOP簡介
      • Java面向對象02:創建對象
      • Java面向對象03:封裝、繼承、多態?
      • Java面向對象04:抽象類
      • Java 面向對象05:接口interface?
      • Java 面向對象06:內部類
      • Java 面向對象07:異常exception
      • 參考資料

IDEA使用

新建一個空項目(這里沒有選擇新建Java項目),目的是把本節所有的語法內容放在該項目下,免得建太多項目。


此時會出現Project Structure提示,這里先關掉,后面再設置。

關掉之后,真的是空項目,空空如也。

新建module


module(模塊)里面再選擇Java,選擇JDK后下一步。


這里命名為基礎語法

創建完成后,需要在src文件夾下面進行java代碼的開發。在此之前,先找到項目結構,進行JDK的配置。

配置完成后,先點擊apply,再點ok。

右擊src文件,選擇新建,新建java class,然后隨便命名即可,這里命名為HelloWorld。這里面寫Java代碼。

下面是一個測試,輸入psvm會顯示 public static void main這一行;輸入sout會顯示System.out.println這一行。這樣就是一個main函數,可以直接運行。

public class Hello {public static void main(String[] args) {System.out.println("Hello,World");} }

運行的話,點擊第二行(是main函數所在的行)前面的綠色箭頭,這是執行按鈕。選擇Run。然后開始運行程序。

下面就是運行結果:輸出程序員最熟悉的Hello,World。

Java基礎01:注釋

Java中的注釋有3種:單行注釋//,多行注釋/**/,文檔注釋/** */。
文檔注釋使用方法:

JavaDoc是用來生成自己API文檔的。
參數信息:

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

舉例如下:加在類上的是類的注釋,加在方法上的是方法的注釋。

package com.baidu;/*** @author Lishizheng* @version 1.0* @since 1.8*/public class Doc {String name;/*** * @param name* @return* @throws Exception*/public String test(String name) throws Exception{return name;} }

Java基礎02:數據類型

Java是強類型語言:要求變量的使用要嚴格符合規定,所有變量都是先聲明后使用。

Java數據分為兩種類型:基本類型和引用類型。

float num5 = 50.1F;

float類型:定義的數據后面一般需要加F來表示float類型,不加的話默認為double類型。

字符:char 只能用單引號,不能用雙引號。char可以存儲1個英文字符,也可以存儲一個漢字。

boolean類型 只能賦值true和false,不能賦值0和1.

進制表示
二進制0b開頭,八進制0開頭,十六進制0x開頭。

public class HelloWorld {public static void main(String[] args) {/*** 這是JavaDoc:文檔注釋* 使用方法:輸入/**,然后按回車*/int a = 0x10;int b = 10;int c = 0b10;System.out .println(a); //十六進制System.out.println(b); // 十進制System.out.println(c); // 二進制} } //輸出:16 10 2

浮點數補充:最好避免使用float進行比較

Java基礎03:類型轉換

運算中,不同類型的數據先轉化為同一類型,然后進行運算。

從低到高 byte,shortchar ->int -> long -> float -> double

自動類型轉換
強制類型轉換

注意點:

  • 不能對boolean類型進行轉換
  • 不能把對象類型轉換為不相干的類型
  • 從高到低轉換的時候需要強制轉換
  • 轉換的時候可能存在內存溢出,或者精度問題。
  • 浮點數轉int

    System.out.println((int)2.31); //輸出2System.out.println((int) -45.14444); //輸出-45

    char轉int,是低轉高,不是強制轉換,而是自動轉換,所以不需要顯式表示出來。 字符’a’ +1 就是自動轉換為轉化為int型進行計算。

    //char 轉 int char a='a';System.out.println(a);int num = a + 1; // a的ASCII碼值是97 ,這里num是98System.out.println( num); //輸出98System.out.println((char)num); //輸出b

    操作大數的時候注意溢出問題,同時JDK7的新特性,數字內部可以使用下劃線分割,編譯器不輸出下劃線。

    int money = 10_0000_0000; //輸出1000000000System.out.println(money);

    Java基礎04:變量

    變量包括三要素:變量名,變量類型和作用域

    變量作用域:

  • 類變量 (靜態變量)
    需要關鍵字static,之后該類內的方法都可以使用該變量。
  • 實例變量
    從屬于對象;如果未初始化,編譯器會將其初始化為其類型的默認值。數值變量一般默認初始化為0或0.0,boolean變量默認初始化為false;除了基本類型,其余變量(比如string類型的變量) 默認初始化為null。
  • 局部變量
    作用域限于方法內
  • 常量
    使用關鍵字final 作為修飾符。

    格式為

    final 數據類型 常量名 =

    常量名一般用大寫字符。

    final double PI = 3.14;

    變量的命名規范

    • 所有變量、方法、類名:見名知意
    • 類成員變量、局部變量:首字母小寫和駝峰命名法:monthSalary
    • 常量:大寫字符和下劃線 :MAX_VALUE
    • 類名: 首字母大寫和駝峰命名法:Man,GoodMan
    • 方法名:首字母小寫和駝峰命名法:getNumber()

    Java基礎05:運算符

    自增自減運算符:

    a ++ :先賦值,后運算
    ++ a:先運算,后賦值

    public class HelloWorld {static final double PI = 3.14;public static void main(String[] args) {int a = 2;int b = a ++; //先賦值后運算int c = ++ a; //先運算后賦值System.out.println(b); //輸出2System.out.println(c); //輸出4} }

    位運算符:

    與:A&B ,
    或:A | B,
    取反: ~B,
    異或(相同為0,不同為1):A^B,其實異或是二進制中不進位加法
    左移:<<(左移還是右移看箭頭指向,指向左是左移,指向右是右移)
    右移:>>

    面試題:請用最高效的寫法求2的三次方的值。
    答:需要用位運算,答案是2 << 3 :表示2的二進制左移三位

    字符串連接符 : +
    如果 在 + 號兩側其中一側出現string類型,結果就是string。

    面試題:請問下面代碼輸出結果分別是什么?
    答:1020 ;30

    public class HelloWorld {public static void main(String[] args) {int a =10;int b = 20;// + 兩側出現string,便會當作字符串連接起來 System.out.println("" + a + b); //由于 + 的運算順序是自左向右,所以先計算a+b = 30,然后30和空字符串連接System.out.println(a + b + ""); } }

    條件運算符(三元運算符):

    x ? y : z

    表示如果x為真,則結果為y,否則結果為z

    舉例如下:
    成績 < 60 ? 沒飯吃:高薪工作
    解釋為,如果成績小于60,則沒飯吃,否則高薪工作。

    學會了?出去玩 : 繼續學。

    public class HelloWorld {public static void main(String[] args) {int score = 60;String res = score < 60 ? " 沒飯吃" : "高薪工作";System.out.println(res);} }

    Java基礎06:包機制

    為了更好地組織類,Java提供了包機制,用于區別類名的命名空間。

    一般利用 公司域名倒置 作為包名。

    比如 百度的域名是 www.baidu.com,如果作為包的話是這樣的:com.baidu.www

    為了能夠使用某一個包的成員、方法,需要在java程序中明確導入該包,使用“import”語句完成 此功能。

    Java流程控制01:用戶交互Scanner

    java.util.Scanner是Java5的新特性,我們可以通過Scanner類來獲取用戶的輸入。
    基本語法

    Scanner s = new Scanner(System.in);

    通過Scanner類的next()和nextLine()方法獲取輸入的字符串,在讀取前我們一般使用hasNext()與hasNextLine()判斷是否還有輸入的數據。

    import java.util.Scanner;public class Demo01 {public static void main(String[] args) {//創建一個掃描器對象,用于接收鍵盤數據Scanner scanner = new Scanner(System.in);System.out.println("使用next方法接收: ");if( scanner.hasNext()){//接收用戶輸入String str = scanner.next();System.out.println("輸出的內容為: "+ str);}scanner.close();} }

    next不能得到帶有空格的字符串;
    nextLine以回車為結束符,即輸入一行。

    例題:從控制臺輸入數據,并求和和計算平均值

    package com.baidu;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("請輸入數字,以非數字結束");int cnt = 0;double sum = 0;while(scanner.hasNextDouble()){double x = scanner.nextDouble();cnt ++;sum += x;}System.out.println(cnt+"個數的和為:" + sum);System.out.println(cnt + "個數的平均數是: " + sum/cnt);scanner.close();} }

    Java流程控制02:Switch case語句

    switch case 語句判斷一個變量與一系列值中某個值是否相等,每個值稱為一個分支。

    switch case 語句有如下規則:

    • switch 語句中的變量類型可以是: byte、short、int 或者 char。從 Java SE 7 開始,switch 支持字符串 String 類型了,同時 case 標簽必須為字符串常量或字面量。
    • switch 語句可以擁有多個 case 語句。每個 case 后面跟一個要比較的值和冒號。
    • case 語句中的值的數據類型必須與變量的數據類型相同,而且只能是常量或者字面常量。
    • 當變量的值與 case 語句的值相等時,那么 case 語句之后的語句開始執行,直到 break 語句出現才會跳出 switch 語句。
    • 當遇到 break 語句時,switch 語句終止。程序跳轉到 switch 語句后面的語句執行。case 語句不必須要包含 break 語句。如果沒有 break 語句出現,程序會繼續執行下一條 case 語句,直到出現 break 語句。
    • switch 語句可以包含一個 default 分支,該分支一般是 switch 語句的最后一個分支(可以在任何位置,但建議在最后一個)。default 在沒有 case 語句的值和變量值相等的時候執行。default 分支不需要 break 語句。
    • switch case 執行時,一定會先進行匹配,匹配成功返回當前 case 的值,再根據是否有 break,判斷是否繼續輸出,或是跳出判斷。
    package com.baidu;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {char grade = 'C';switch(grade){case 'A' :System.out.println("成績優秀");break;case 'B' :System.out.println("成績良好");break;case 'C':System.out.println("成績合格");break;case 'D':System.out.println("不及格");break;default:System.out.println("錄入成績有誤");}} }

    Java流程控制03:循環語句

    while循環
    對于 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。

    do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。

    package com.baidu;public class Demo01 {public static void main(String[] args) {//while 循環int a = 0;while( a < 0){System.out.println(a);a++;}System.out.println("=============");// do - while循環a = 0;do{System.out.println(a);a++;} while (a<0);} }/*輸出: ============= 0 */

    for循環
    for循環次數在執行前已經確定。
    for死循環的寫法

    for( ; ;){}

    練習題:求0~1000中5的倍數,輸出要求每行三個。

    package com.baidu;public class Demo01 {public static void main(String[] args) {int cnt = 0;for (int i = 0; i < 1000; i++) {if( i % 5 == 0){if(cnt!=0 && cnt % 3 == 0) System.out.println();System.out.print(i+" ");cnt++;}}} }

    練習題:使用for循環輸出99乘法表

    package com.baidu;public class Demo01 {public static void main(String[] args) {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "*" + i + "=" + i*j + " ");}System.out.println();}} }/*1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 Process finished with exit code 0*/

    增強 for循環

    Java5 引入了一種主要用于數組的增強型 for 循環。

    語法格式

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

    示例如下:輸出數組num中的元素。

    package com.baidu;public class Demo01 {public static void main(String[] args) {int num[] = {10 ,20 ,30 ,40 ,50};for(int x : num) System.out.println(x);} }

    BREAK關鍵字和CONTINUE關鍵字

    break

    • break 主要用在循環語句或者 switch 語句中,用來跳出整個語句塊。
    • break 跳出最里層的循環,并且繼續執行該循環下面的語句。

    continue

    • continue 適用于任何循環控制結構中。作用是讓程序立刻跳轉到下一次循環的迭代。
    • 在 for 循環中,continue 語句使程序立即跳轉到更新語句。
    • 在 while 或者 do…while 循環中,程序立即跳轉到布爾表達式的判斷語句。

    練習題:打印三角形

    package com.baidu;public class Demo01 {public static void main(String[] args) {for (int i = 1; i <= 5; i++) {//打印左邊空格for (int j = 5; j >=i; j--) {System.out.print(" ");}//打印左邊三角形for (int j = 1; j <= i; j++) {System.out.print("*");}//打印右邊三角形for (int j = 1; j < i; j++) {System.out.print("*");}System.out.println();}} } /**************************Process finished with exit code 0*/

    Java方法01:方法的基本概念

    參考:https://www.runoob.com/java/java-methods.html

    什么是方法?

    Java方法是語句的集合,它們在一起執行一個功能。

    • 方法是解決一類問題的步驟的有序組合
    • 方法包含于類或對象中
    • 方法在程序中被創建,在其他地方被引用

    方法的命名規則是怎樣的呢?

  • 方法的名字的第一個單詞應以小寫字母作為開頭,后面的單詞則用大寫字母開頭寫,不使用連接符。例如:addPerson。
  • 下劃線可能出現在 JUnit 測試方法名稱中用以分隔名稱的邏輯組件。一個典型的模式是:test_,例如 testPop_emptyStack。
  • 方法詳解
    方法一般定義如下格式

    修飾符 返回值類型 方法名(參數類型 參數名){...方法體...return 返回值; }

    比如 兩個數的加法可以寫成一個方法:

    public static int add(int a , int b){return a + b;}


    圖片來源:菜鳥教程

    方法調用

    當程序調用一個方法時,程序的控制權交給了被調用的方法。當被調用方法的返回語句執行或者到達方法體閉括號時候交還控制權給程序。

    面試題:Java是值傳遞還是引用傳遞? 值傳遞。

    方法重載
    重載:一個類的兩個方法擁有相同的名字,但是有不同的參數列表。

    重載的方法必須擁有不同的參數列表。不能僅僅依據修飾符或者返回類型的不同來重載方法。

    // 參數為intpublic static int add(int a , int b){return a + b;}//參數為 double public static double add(double a, double b){return a +b;}//參數個數不同public static int add(int a, int b,int c){return a + b + c;}

    命令行傳參

    D:\user\文檔\IDEA\Java入門學習\基礎語法\src> java com.baidu.Demo01 this is lishizheng args[0]: this args[1]: is args[2]: lishizheng

    可變參數

    JDK 1.5 開始,Java支持傳遞同類型的可變參數給一個方法。

    方法的可變參數的聲明如下所示:

    typeName... parameterName

    在方法聲明中,在指定參數類型后加一個省略號(…) 。

    一個方法中只能指定一個可變參數,它必須是方法的最后一個參數。任何普通的參數必須在它之前聲明。

    package com.baidu;public class Demo01 {public static void main(String[] args) {Demo01 demo01 = new Demo01();demo01.test(1,2);demo01.test(1,1,2,2);}// i是可變參數,參數個數不確定,但必須是同類型public void test(int a, int ... i){System.out.println(i[0]);} }

    下面是使用可變參數來求最大值:傳入的參數個數是未知的。

    package com.baidu;public class Demo01 {public static void main(String[] args) {Demo01 demo01 = new Demo01();demo01.printMax(1,2,3,4,5);}// 輸出參數中的最大值public void printMax (int ... num){if(num.length == 0){System.out.println("沒有傳遞參數");return ;}int res = num[0];for(int i:num){if(i > res) res = i;}System.out.println("最大值是:" + res);} }

    Java數組01:數組基礎

    Java 語言中提供的數組是用來存儲固定大小的同類型元素。

    數組聲明與創建

    首先必須聲明數組變量,才能在程序中使用數組。下面是聲明數組變量的語法:

    dataType[] arrayRefVar; // 首選的方法或dataType arrayRefVar[]; // 效果相同,但不是首選方法

    注意: 建議使用 dataType[] arrayRefVar 的聲明風格聲明數組變量。 dataType arrayRefVar[] 風格是來自 C/C++ 語言 ,在Java中采用是為了讓 C/C++ 程序員能夠快速理解java語言。

    ava語言使用new操作符來創建數組,語法如下:

    arrayRefVar = new dataType[arraySize];

    上面的語法語句做了兩件事:

    • 使用 dataType[arraySize] 創建了一個數組。
    • 把新創建的數組的引用賦值給變量 arrayRefVar。

    舉例:

    //先聲明,后創建的方式 int[] nums; nums = new int[10];

    數組變量的聲明,和創建數組可以用一條語句完成,如下所示:

    dataType[] arrayRefVar = new dataType[arraySize];

    另外,你還可以使用如下的方式創建數組。

    dataType[] arrayRefVar = {value0, value1, ..., valuek};

    數組的元素是通過索引訪問的。數組索引從 0 開始,所以索引值從 0 到 arrayRefVar.length-1。

    舉例

    int[] nums = new int[10]; //聲明并創建 double[] d = new double[10]; float[] f= new float[10]; String [] s = new String[10];

    數組是引用類型,它的元素相當于類的實例變量,因此數組一經分配空間,其中每個元素也被按照實例變量同樣的方式被隱式初始化。

    數組的4個基本特點:

  • 數組長度是固定的。數組一經創建,大小便不可改變。
  • 數組元素必須是相同類型,不允許出現相同類型。
  • 數組中元素可以是任何數據類型,包括基本類型和引用類型。
  • 數組變量屬于引用類型,數組也可以看成是對象,數組中的每個元素相當于該對象的成員變量。
    Java中對象是在堆中的,因此數組無論保存原始類型還是其他對象類型,數組對象本身是在堆中的
  • 數組的遍歷

    package com.baidu;public class ArrayDemo02 {public static void main(String[] args) {int[] a = {1,2,3,4};//for循環for(int i = 0; i< a.length ; i++)System.out.println(a[i]);// for -each循環for (int i : a) {System.out.println(i);}// 數組作為參數printArray(a);}//打印數組public static void printArray(int[] array){for (int i : array) {System.out.print(i +" ");}} }

    數組的使用:反轉數組

    package com.baidu;public class ArrayDemo02 {public static void main(String[] args) {int[] a = {1,2,3,4};// 數組作為參數printArray(a);int[] res = reverse(a);for (int i : res) {System.out.print(i + " ");}}//打印數組public static void printArray(int[] array){for (int i : array) {System.out.print(i +" ");}System.out.println();}// 翻轉數組public static int[] reverse(int[] array){int[] result = new int[array.length];for(int i = 0, j = result.length -1; i< array.length && j >= 0;i++,j--){result[j] = array[i];}return result;}} /* 1 2 3 4 4 3 2 1 Process finished with exit code 0*/

    多維數組

    多維數組可以看成是數組的數組,比如二維數組就是一個特殊的一維數組,其每一個元素都是一個一維數組,例如:

    double[][] d = new double[2][3];

    多維數組的動態初始化(以二維數組為例)

  • 直接為每一維分配空間,格式如下:
  • type[][] typeName = new type[typeLength1][typeLength2];

    二維數組

    package com.baidu;public class ArrayDemo03 {public static void main(String[] args) {int[][] num = {{1,2},{1,3},{2,3}};for(int i = 0; i<num.length; i++){for(int j = 0; j< num[i].length;j++)System.out.print(num[i][j] +" ");System.out.println();}} }

    Java數組02:Arrays類

    java.util.Arrays 類能方便地操作數組。

    Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行調用,而不用使用對象來調用(注意,是不用,不是不可以)。

    具有以下典型功能:

    • 給數組賦值:通過 fill 方法。
    • 對數組排序:通過 sort 方法,按升序。
    • 比較數組:通過 equals 方法比較數組中元素值是否相等。
    • 查找數組元素:通過 binarySearch 方法能對排序好的數組進行二分查找法操作。

    舉例:

    package com.baidu;import java.util.Arrays;public class ArrayDemo04 {public static void main(String[] args) {int[] a= {1,2,55,32, 6, 4,3};//調用 toString():數組轉換為字符串類型的數組System.out.println(Arrays.toString(a));//調用sort 進行排序Arrays.sort(a);System.out.println(Arrays.toString(a));//填充Arrays.fill(a,0);System.out.println(Arrays.toString(a));} } /* [1, 2, 55, 32, 6, 4, 3] [1, 2, 3, 4, 6, 32, 55] [0, 0, 0, 0, 0, 0, 0]Process finished with exit code 0 */

    舉例另一個方法:比如toString()方法,以字符串的形式輸出整個數組.

    package com.baidu;import java.util.Arrays;public class ArrayDemo04 {public static void main(String[] args) {int[] a= {1,2,55,32, 6, 4,3};System.out.println(Arrays.toString(a));} }/* [1, 2, 55, 32, 6, 4, 3]Process finished with exit code 0 */

    toString()方法源碼如下:

    查看源碼方法:鼠標放到toString上,按住ctrl加點擊即可進入。

    /*** @param a the array whose string representation to return* 要返回其字符串表示形式的數組* @return a string representation of <tt>a</tt>* @since 1.5*/public static String toString(int[] a) {if (a == null)return "null";int iMax = a.length - 1;if (iMax == -1)return "[]";StringBuilder b = new StringBuilder();b.append('[');for (int i = 0; ; i++) {b.append(a[i]);if (i == iMax)return b.append(']').toString();b.append(", ");}}

    Java數組02:手撕冒泡排序

    冒泡排序
    1.從頭到尾依次比較數組中相鄰的元素
    2.每輪把最大的數放到最后

    package com.baidu;import java.util.Arrays;public class ArrayDemo05 {public static void main(String[] args) {int [] a = { 2,4 , 4, 2 ,4 ,5, 999,4};System.out.println("length of a : "+ a.length);int[] b = sort(a);System.out.println(Arrays.toString(b));}/** 手撕冒泡排序* 1.從頭到尾依次比較數組中相鄰的元素* 2.每輪把最大的數放到最后* */public static int[] sort(int[] a ){int temp;//外層循環:比較幾輪(n個數,僅需要n-1輪)for (int i = 0; i < a.length - 1; i++) {//內層循環:每輪進行冒泡,最大的冒到最后int j = 0;for(; j <a.length -1 -i; j ++){if( a[j+1] < a[j]){temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}//System.out.println("每輪參與排序的個數:"+ j);}return a;} }

    Java面向對象01:OOP簡介

    • 面向過程:
      步驟清晰簡單,第一步做什么,第二步做什么
      適合處理簡單的問題
    • 面向對象:
      物以類聚,用的是分類的思想。面對復雜問題,首先思考問題會分為哪些類,然后對這些類進行單獨思考,最后,才對某個類下的細節進行面向過程的思考。
      面向對象適合處理復雜的問題,適合處理需要多人協作的問題。

    簡單理解面向對象和面向過程的區別:對于描述比較復雜的事物,為了從宏觀上把握、從整體上合理分析,我們需要使用面向對象的思路來分析整個系統;具體到微觀操作,需要面向過程的思路去處理。

    什么是面向對象編程?

    面向對象編程(Object-Oriented Programming,OOP)的本質是:以類的方式組織代碼,以對象的形式封裝數據

    抽象是核心,抽象能力也是程序員必備的能力。

    OOP的三大特性

    • 封裝
    • 繼承
    • 多態

    下面穿插著講解靜態方法和非靜態方法的區別,以及值傳遞和引用傳遞的區別,方便對后面面向對象的理解。

    回顧方法的調用

    • 靜態方法:有修飾符static,調用通過類名+方法名
    • 非靜態方法:沒有static,調用通過實例化一個類(創建對象),然后可調用方法。

    下面是非靜態方法的調用舉例:

    //非靜態方法
    //實例化這個類 new
    //對象類型 對象名稱 = 對象值

    package com.oop.demo01;public class Demo02 {public static void main(String[] args) {//非靜態方法//實例化這個類 new//對象類型 對象名稱 = 對象值Student student = new Student();student.say();} }package com.oop.demo01;public class Student {//非靜態方法public void say(){System.out.println("學生說話了");} }

    同一個類中,兩個方法a() 和b() 都不是static,則可以相互調用

    package com.oop.demo01;public class Demo02 {public static void main(String[] args) {// a方法可調用 b方法public void a(){b();}public void b(){} }

    同一個類中,如果方法a() 被static修飾,而方法b()沒有被static修飾,則a()無法調用b()。原因是含有static 的方法是和類一起加載的,此時不含static的方法b()還沒有加載,方法b()是在類實例化之后加載,所以不能調用,否則會報錯。

    package com.oop.demo01;public class Demo02 {public static void main(String[] args) {// a方法不可調用 b方法//和類一起加載public static void a(){b();}//實例化后才會加載//所以 a方法加載完之后,發現b方法還不存在,自然出錯。public void b(){} }

    報錯如下:


    簡言之:靜態方法只能調用靜態方法,非靜態方法可以調用靜態方法。

    值傳遞和引用傳遞

    Java是值傳遞,舉例如下:

    package com.oop.demo01;//值傳遞 public class Demo04 {public static void main(String[] args) {int a = 1;System.out.println(a); //輸出1change(a); //值傳遞,結果未改變System.out.println(a); // 輸出1,Java值傳遞}public static void change(int a){a = 10;} }

    引用傳遞:對象

    package com.oop.demo01;//引用傳遞:對象 public class Demo05 {public static void main(String[] args) {Person person = new Person();System.out.println(person.name); // nullchange(person); //引用傳遞,結果改變System.out.println(person.name); // azheng}//引用傳遞傳遞的是對象的地址public static void change(Person person){person.name = "azheng";} } //定義了一個Person類,有一個屬性:name class Person{String name; //默認值為null }

    總結:

    • 值傳遞:實參和形參在內存中指向的是不同的兩個地址;
    • 引用傳遞:實參和形參在內存中指向的是同一個地址。

    Java面向對象02:創建對象

    類與對象的關系

    • 類是一種抽象的數據類型,它是對某一類事物整體描述、定義,但是它不能代表某一具體事物。
      動物,植物,手機,電腦……
      Person類,Pet類,Car類等
    • 對象是抽象概念的具體實例

    創建對象

    對象是根據類創建的。在Java中,使用關鍵字 new 來創建一個新的對象。創建對象需要以下三步:

  • 聲明:聲明一個對象,包括對象名稱和對象類型。
  • 實例化:使用關鍵字 new 來創建一個對象。
  • 初始化:使用 new 創建對象時,會調用構造方法初始化對象。
  • Student類:

    package com.oop.demo01;//學生類 public class Student {//屬性String name;int age;//方法public void study(){System.out.println(this.name + "在學習 ");} }

    進行測試

    package com.oop.demo01;public class Application {public static void main(String[] args) {//類 實例化//類實例化的結果會返回一個自己的對象//student對象就是一個Student類的具體實例Student tom = new Student();Student alice = new Student();System.out.println("默認初始化:");System.out.println("name:" +tom.name);System.out.println( "age:" + tom.age);System.out.println("調用成員修改屬性:");tom.name = "tom";tom.age = 3;System.out.println("name: " +tom.name);System.out.println( "age: " + tom.age);} } /* 默認初始化: name:null age:0 調用成員修改屬性: name: tom age: 3Process finished with exit code 0 */

    構造函數

    使用new關鍵字創建對象的時候,除了分配內存空間外,還會給創建好的對象進行默認初始化,以及對類中構造器的調用

    類中的構造器也稱為構造方法,是在創建時對象時必須要調用的。一個類可以有多個構造器。

    構造器有以下兩個特點:

  • 名稱必須和類名相同
  • 必須沒有返回類型,也不能寫void
  • 作用:
    new本質上是調用構造器,初始化對象
    IDEA中快捷鍵alt + insert快速生成構造器

    package com.oop.demo01;public class Person {//一個類什么都不寫,他也會存在一個默認構造器//顯式定義構造器String name;int age;//無參構造public Person(){this.name = "lishizheng";}//有參構造//一旦定義了有參構造,無參構造就必須得顯式定義。public Person(String name){this.name = name;}//alt + insert 快速生成構造器public Person(int age) {this.age = age;}public Person(String name, int age) {this.name = name;this.age = age;} }/* * public static void main(String[] args) {Person person = new Person("azheng");Person person1 = new Person(10);System.out.println(person.name);System.out.println(person1.name + " " +person.age);}* * */

    Java面向對象03:封裝、繼承、多態?

    程序設計追求“高內聚,低耦合”
    高內聚:類的內部數據操作由自己完成;
    低耦合:僅暴露少量的方法給外部使用。

    封裝

    在面向對象程式設計方法中,封裝(Encapsulation)是指一種將抽象性函式接口的實現細節部分包裝、隱藏起來的方法。

    封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。

    要訪問該類的代碼和數據,必須通過嚴格的接口控制。

    封裝最主要的功能在于我們能修改自己的實現代碼,而不用修改那些調用我們代碼的程序片段。

    適當的封裝可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。

    封裝的優點

  • 良好的封裝能夠減少耦合。

  • 類內部的結構可以自由修改。

  • 可以對成員變量進行更精確的控制。

  • 隱藏信息,實現細節。

  • 實現Java封裝的步驟

    1) 修改屬性的可見性來限制對屬性的訪問(一般限制為private)
    2)對每個值屬性提供對外的公共方法訪問,也就是創建一對賦取值方法(get和set),用于對私有屬性的訪問。

    例如:

    package com.oop.demo02;public class Student {//屬性私有private String name;private int id;private char sex;//提供一些可以操縱這些屬性的方法//提供一些public的get、set方法//get 獲取數據public String getName(){return this.name;}// set 設置數據public void setName(String name){this.name = name;}//alt + insert自動生成get和set方法public int getId() {return id;}public void setId(int id) {this.id = id;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;} }

    繼承

    繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

    繼承是類與類之間的關系。除此之外,類和類之間的關系還有依賴、組合、聚合等。

    在 Java 中通過 extends 關鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下:

    class 父類 { }class 子類 extends 父類 { }

    為什么繼承?

    子類繼承父類之后,就具有父類當中的屬性和方法,子類就不會存在重復的代碼,維護性也提高,代碼也更加簡潔,提高代碼的復用性(復用性主要是可以多次使用,不用再多次寫同樣的代碼)。

    繼承類型

    需要注意的是 Java 不支持多繼承,但支持多重繼承。


    來源:菜鳥教程

    繼承的特性:

  • 子類擁有父類非private的屬性、方法
  • 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展
  • 子類可以用自己的方式實現父類的方法
  • Java的繼承是單繼承,但是可以多重繼承。單繼承就是一個子類只能繼承一個父類;多重繼承就是可傳遞,A -->B -->C
  • 提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的練習緊密,代碼獨立性差)。
  • 繼承關鍵字

    繼承可以使用 extends 和 implements 這兩個關鍵字來實現繼承,而且所有的類都是繼承于java.lang.Object,當一個類沒有繼承的兩個關鍵字,則默認繼承object(這個類在java.lang包中,所以不需要 import)祖先類。

    【1】extends關鍵字
    在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。

    知識點:
    super 與 this 關鍵字

    super關鍵字:我們可以通過super關鍵字來實現對父類成員的訪問,用來引用當前對象的父類。

    this關鍵字:指向自己的引用。

    package com.oop.demo03;//Java中所有的類,都默認直接或間接繼承自Object類 public class Person {protected String name = "lishizheng";public void print(){System.out.println("printPerson");}}//派生類,子類 public class Student extends Person{//Ctrl + H 可查看繼承樹,繼承關系private String name = "stu";public void print(){System.out.println("printStudent");}public void test1(){print(); //調用當前類方法this.print(); //調用當前類方法super.print(); //調用父類方法}public void test(String name){System.out.println(name);//System.out.println(this.name); //調用當前類屬性System.out.println(super.name); //調用父類屬性} }//測試類 public class Application {public static void main(String[] args) {Student student = new Student();student.test("who");student.test1();}}

    構造器

    子類是不繼承父類的構造器(構造方法或者構造函數)的,它只是調用(隱式或顯式)。如果父類的構造器帶有參數,則必須在子類的構造器中顯式地通過 super關鍵字調用父類的構造器并配以適當的參數列表。

    如果父類構造器沒有參數,則在子類的構造器中不需要使用 super 關鍵字調用父類構造器,系統會自動調用父類的無參構造器

    super注意點

  • super調用父類的構造方法,必須在子類構造方法最靠前的位置
  • super只能出現在子類的方法或者構造方法中
  • super和this不能同時調用構造方法
  • 【2】implements關鍵字
    使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)。

    重寫
    重寫(Override)是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫

    重寫的好處在于子類可以根據需要,定義特定于自己的行為。 也就是說子類能夠根據需要實現父類的方法。

    重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如: 父類的一個方法申明了一個檢查異常 IOException,但是在重寫這個方法的時候不能拋出 Exception 異常,因為 Exception 是 IOException 的父類,只能拋出 IOException 的子類異常。

    在面向對象原則里,重寫意味著可以重寫任何現有方法。

    舉例:B是父類,A是子類,A中重寫了父類B的方法test().

    package com.oop.demo04;//父類 //重寫都是方法的重寫,和屬性無關 public class B {public void test(){System.out.println("B.test()");} } //子類 public class A extends B{//方法重寫@Overridepublic void test() {System.out.println("A.test()");} }//測試類 public class Application {public static void main(String[] args) {//靜態方法的調用只和左邊定義的數據類型有關//因為靜態方法是類的方法//調用A類的方法testA a = new A();a.test();//非靜態方法可以重寫!!!//非靜態方法屬于對象B b = new A(); //調用A類的方法testb.test();}} /* A.test() A.test()Process finished with exit code 0*/

    重寫和重載的區別:
    方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載可以理解成多態的具體表現形式。

    (1)方法重載是一個類中定義了多個方法名相同,而他們的參數的數量不同或數量相同而類型和次序不同,則稱為方法的重載(Overloading)。

    (2)方法重寫是在子類存在方法與父類的方法的名字相同,而且參數的個數與類型一樣,返回值也一樣的方法,就稱為重寫(Overriding)。

    (3)方法重載是一個類的多態性表現,而方法重寫是子類與父類的一種多態性表現。


    來源:菜鳥教程

    方法的重寫規則

    • 參數列表與被重寫方法的參數列表必須完全相同
    • 返回類型與被重寫方法的返回類型可以不相同,但是必須是父類返回值的派生類(java5 及更早版本返回類型要一樣,java7 及更高版本可以不同)。
    • 訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明為 public,那么在子類中重寫該方法就不能聲明為 protected。
    • 父類的成員方法只能被它的子類重寫。
    • 聲明為 final 的方法不能被重寫。
    • 聲明為 static 的方法不能被重寫,但是能夠被再次聲明。
    • 子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為 private 和 final 的方法。
    • 子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為 public 和 protected 的非 final 方法。
    • 重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
    • 構造方法不能被重寫。
    • 如果不能繼承一個類,則不能重寫該類的方法。

    多態

    多態是同一個行為具有多個不同表現形式或形態的能力。

    多態就是同一個接口,使用不同的實例而執行不同操作。

    多態存在的三個必要條件

    • 繼承
    • 重寫
    • 父類引用指向子類對象:Parent p = new Child();

    當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。

    多態的好處:可以使程序有良好的擴展,并可以對所有類的對象進行通用處理。

    package com.oop.demo05;//父類 public class Person {public void run(){System.out.println("跑路");} }//子類 public class Student extends Person {@Overridepublic void run() {System.out.println("son");}public void eat(){System.out.println("eat");} }//測試類 public class Application {public static void main(String[] args) {//一個對象的實際類型是確定的//但是可以指向的引用類型不確定,可以是:父類的引用指向子類對象//Student能調用自己和父類的方法Student s1 = new Student();//Person 可以指向子類,但是不能調用子類獨有的方法Person s2 = new Student();//對象能執行哪些方法, 主要看左邊的類型s2.run(); //子類重寫了父類的方法,則執行子類的方法s1.run();s1.eat();} }

    加載順序:靜態代碼塊 > 匿名代碼塊>構造函數

    package com.oop.demo05;public class Person {//2{System.out.println("匿名代碼塊");}//1static {System.out.println("靜態代碼塊");}//3public Person() {System.out.println("構造方法");}public static void main(String[] args) {Person person = new Person();} }/* 靜態代碼塊 匿名代碼塊 構造方法Process finished with exit code 0*/

    Java面向對象04:抽象類

    在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類

    抽象類

    抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。

    關于抽象類的關鍵知識點???:

  • 抽象類不能被實例化。如果被實例化會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。

  • 抽象類中不一定包含抽象方法,當時有抽象方法的類一定是抽象類。

  • 抽象類中的抽象方法只是聲明,不包含方法體,即不給出方法的具體實現。

  • 構造方法,類方法(用static修飾的方法)不能聲明為抽象類。

  • 抽象類的子類必須給出抽象類中抽象方法的具體實現,除非該子類也是抽象類

  • 抽象類:Java中使用abstract class來定義抽象類

    舉例如下:

    下面代碼中Action類是抽象類,其中聲明了抽象方法doSomething();A類是Action的子類,但它不是抽象列,所以要在A類中要給出Action類中抽象方法的具體實現。

    package com.oop.demo06;//abstract 抽象類 //Java中類 extends,單繼承 //但是 接口可以多繼承public abstract class Action {//抽象方法:abstract//約束;有人幫我們實現//abstract ,抽象方法,只有方法名字,沒有方法的實現public abstract void doSomething(); }

    繼承自Action類的子類A:

    package com.oop.demo06;//抽象類中的所有方法,繼承了它的子類,都必須實現父類的方法 //除非該子類也聲明為abstractpublic class A extends Action {@Overridepublic void doSomething() {} }

    抽象方法

    如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定,那么你可以在父類中聲明該方法為抽象方法,使用abstract關鍵字來聲明,抽象方法沒有方法體。

    抽象方法舉例: public abstract void doSomething();

    聲明抽象方法會造成以下兩種結果:

  • 如果一個類中包含抽象方法,那么該類必須是抽象類。
  • 任何子類必須重寫(override)父類的抽象方法,或者聲明自己為抽象類。
  • Java 面向對象05:接口interface?

    接口(interface)在Java中是一個抽象類型,是抽象方法的集合,通常以interface來聲明。一個類通過繼承接口,來繼承接口的抽象方法。

    接口并不是類,編寫接口的方式和編寫類很相似,但是兩個是完全不同的概念。

    類描述對象的屬性和方法。
    接口包含類要實現的方法。

    除非實現接口的類是抽象類,否則該類要定義接口中的所有方法。

    接口無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類。

    接口與類的相似點???:

  • 一個接口可以有多個方法。
  • 接口文件保存在.java文件中,文件名使用接口名。
  • 接口的字節碼文件保存在.class結尾的文件中。
  • 接口相應的字節碼文件必須在與包名稱相匹配的目錄結構中。
  • 接口與類的區別???:

  • 接口不能用于實例化對象
  • 接口沒有構造方法
  • 接口中所有方法必須是抽象方法
  • 接口不能包含成員變量,除了public static final修飾的常量(全局靜態常量)。
  • 接口不是被類繼承了,而是要被類實現
  • 接口支持多繼承
  • 接口與抽象類的區別???:

  • 抽象類中的方法可以有方法體,接口中的方法沒有。
  • 抽象類中的成員變量可以是各種類型,接口中的成員變量必須是public static final類型。
  • 抽象類中可以有靜態代碼塊和靜態方法,接口中不能含有靜態代碼塊和靜態方法(靜態方法是用static修飾的方法)。
  • 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口
  • 接口特性

  • 接口中每個方法都是隱式抽象的,接口中的方法會被隱式指定為public abstract.只能是public,不能是protected等其他修飾符。

  • 接口中可以含有變量,但是接口中的變量會被隱式地指定為public static final變量,并且只能是public,不能是protected等其他修飾符,會報錯。

  • 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。

  • 接口舉例:

    package com.oop.demo07;//interface 關鍵字,接口都需要有實現類 public interface UserService {// 常量:public static finalint AGE = 99;//接口中定義的方法默認都是public abstractvoid add(String name);void delete(String name);void update(String name);void query(String name);}

    接口的實現

    當類實現接口的時候,類要實現接口中所有的方法;否則,類必須聲明為抽象的類。

    類使用implements關鍵字實現接口。在類聲明中,implements關鍵字放在class聲明后面。

    實現一個接口的語法,可以使用這個公式:

    ...implements 接口名稱[, 其他接口名稱, 其他接口名稱..., ...] ...

    接口的實現舉例:
    下面類UserServiceImpl實現了接口UserService和接口TimeService

    package com.oop.demo07;//抽象類 extends //類 可以實現接口 implements 接口 //實現了接口的類,必須重寫接口的方法, //利用接口,實現多繼承public class UserServiceImpl implements UserService,TimeService {//實現接口中的方法@Overridepublic void add(String name) {System.out.println("實現add方法");}@Overridepublic void delete(String name) {}@Overridepublic void update(String name) {}@Overridepublic void query(String name) {}@Overridepublic void timer() {}//測試public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();userService.add("lishizheng"); //輸出 :實現add方法} }/* 實現add方法Process finished with exit code 0 */

    重寫接口中聲明的方法時,需要注意以下規則:

  • 類在實現接口的方法時,不能拋出強制性異常,只能在接口中,或者繼承接口的抽象類中拋出該強制性異常。
  • 類在重寫方法時要保持一致的方法名,并且應該保持相同或者相兼容的返回值類型。
  • 如果實現接口的類是抽象類,那么就沒必要實現該接口的方法。
  • 在實現接口的時候,也需要注意一些規則:

  • 一個類可以實現多個接口。
  • 一個類只能繼承一個類,但是能實現多個接口。
  • 一個接口可以繼承自另一個接口,這和類之間的繼承比較類似。
  • Java 面向對象06:內部類

    內部類就是在一個類的內部再定義類。

    成員內部類

    如何調用成員內部類的方法?

    通過實例化外部類來實現。

    使用舉例:
    在外部類Outer內部,定義一個內部類Inner。

    package com.oop.demo08;public class Outer {private int id;public void out(){System.out.println("這是外部類的方法");}//成員內部類public class Inner{public void in(){System.out.println("這是內部類的方法");}}//測試public static void main(String[] args) {Outer outer = new Outer();//如何調用內部類的方法?//通過外部類來實例化內部類Outer.Inner inner = outer.new Inner();inner.in();} }/* 這是內部類的方法Process finished with exit code 0*/

    一個.java文件中可以有多個class類,但是只能有一個public類。

    局部內部類

    在方法中定義類。

    package com.oop.demo08;public class Outer {private int id = 10;public void out(){System.out.println("這是外部類的方法");}//局部內部類:方法里面定義類public void method(){class Inner1{public void test1(){}}}}

    匿名內部類

    調用的時候沒有類的名字。

    package com.oop.demo08;public class Test {public static void main(String[] args) {//沒有名字初始化類,不用將實例保存到變量中new Apple().eat();//匿名內部類new UserService(){@Overridepublic void sayHello() {}};} }class Apple{public void eat(){System.out.println("吃蘋果");} }interface UserService{void sayHello(); }

    Java 面向對象07:異常exception

    異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并且錯誤有時候是可以避免的。

    比如說,你的代碼少了一個分號,那么運行出來結果是提示是錯誤 java.lang.Error;如果你用System.out.println(11/0),那么你是因為你用0做了除數,會拋出 java.lang.ArithmeticException 的異常。

    異常通常有以下幾類:

  • 用戶輸入了非法數據。
  • 要打開的文件不存在。
  • 網絡通信時連接中斷,或者JVM內存溢出。。
  • 這些異常有的是由用戶錯誤引起的,有的是程序錯誤引起的,還有一些是由物理錯誤引起的。

    要理解Java異常處理是如何工作的,需要對以下概念有所理解:

  • 檢查性異常
    最具代表的檢查性異常是用戶錯誤的引起的異常。例如要打開一個不存在的文件時,一個異常就發生了。這些異常在編譯時不能簡單地被忽略。
  • 運行時異常
    運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。
  • 錯誤
    錯誤不是異常。
  • Exception 類的層次

    在Java中,異常被當作對象來處理。Java中定義了一個基類java.lang.Throwable作為所有異常的超類。


    來源:菜鳥教程

    Exception 類是 Throwable 類的子類。除了Exception類外,Throwable還有一個子類Error 。

    Error類用來指示運行時環境發生的錯誤。例如JVM內存溢出。一般地,程序不會從錯誤中恢復。而且,Java程序通常不捕獲錯誤。錯誤一般發生在嚴重故障時,它們在Java程序處理的范疇之外。
    Error和Exception的區別:
    Error通常是災難性的、致命性的錯誤,是程序無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止線程。
    Exception通常情況下是可以被程序處理的,并且應該盡可能地在程序中處理這些異常。

    Exception類有兩個主要的子類:IOException和RuntimeException.

    在RuntimeException子類中有如下異常:

    • ArrayIndexOutOfBoundsException(數組下標越界)
    • ArithmeticException(算術異常)
    • NullPointerException(空指針異常)
    • MissingResourceException(丟失資源異常)
    • ClassNotFoundException(找不到類異常)

    異常方法

    來源:菜鳥教程

    異常處理五個關鍵字

    try catch finally throw throws

    捕獲異常
    使用try 和 catch關鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發生的地方。

    try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的語法如下:

    try {// 程序代碼 }catch(ExceptionName e1) {//Catch 塊 }

    Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 后面的 catch 塊就會被檢查。

    如果發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是一樣。

    package com.exception;public class Test {public static void main(String[] args) {int a = 1;int b = 0;try { //try監控區域System.out.println(a/b);}//catch():括號中是想要捕獲的異常類型catch (ArithmeticException e){//捕獲異常System.out.println("程序出現異常:分母不能為0");}finally {//處理善后工作System.out.println("finally");}//finally 可以不用,它的作用是關閉IO、資源等。} } /* 程序出現異常:分母不能為0 finallyProcess finished with exit code 0*/

    多重捕獲塊

    一個 try 代碼塊后面跟隨多個 catch 代碼塊的情況就叫多重捕獲。

    多重捕獲塊的語法如下所示:

    try{// 程序代碼 }catch(異常類型1 異常的變量名1){// 程序代碼 }catch(異常類型2 異常的變量名2){// 程序代碼 }catch(異常類型3 異常的變量名3){// 程序代碼 }

    多重捕獲塊舉例:
    try/catch/catch的結構類似于if/else/else的邏輯,從上往下逐層判斷,滿足則進入對應的分支。

    package com.exception;public class Demo01 {public static void main(String[] args) {int a = 1;int b = 0;try {System.out.println(a/b);}catch (Error e1){System.out.println("Error");}catch (Exception e2){System.out.println("Exception");}catch (Throwable e3){System.out.println("Throwable");}} }

    捕獲多重異常寫法需注意:從小到大
    否則會報錯:

    捕獲異常快捷鍵Ctrl+Alt+T

    結果如下

    //快捷鍵使用舉例 package com.exception;public class Demo02 {public static void main(String[] args) {int a = 1;int b = 0;try {System.out.println(a/b);} catch (Exception e) {e.printStackTrace();//打印錯誤的棧信息 } finally {}} } /* java.lang.ArithmeticException: / by zeroat com.exception.Demo02.main(Demo02.java:8)Process finished with exit code 0 */

    throws/throw 關鍵字

    如果一個方法沒有捕獲到一個檢查性異常,那么該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。

    也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的。

    舉例如下:下面代碼會拋出ArithmeticException異常,原因是0作為除數。

    package com.exception;public class Demo02 {public static void main(String[] args) {int a = 1;int b = 0;new Demo02().test(a,b);}public void test(int a, int b) throws ArithmeticException{System.out.println("進行除法運算");System.out.println(a/b);} } /* 輸出結果如下:進行除法運算 Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.exception.Demo02.test(Demo02.java:11)at com.exception.Demo02.main(Demo02.java:7)Process finished with exit code 1 */

    一個方法可以聲明拋出多個異常,多個異常之間用逗號隔開。

    finally關鍵字
    finally 關鍵字用來創建在 try 代碼塊后面執行的代碼塊。

    無論是否發生異常,finally 代碼塊中的代碼總會被執行。

    在 finally 代碼塊中,可以運行清理類型等收尾善后性質的語句。

    自定義異常

    在Java中可以自定義異常,需要注意以下幾點:

  • 所有異常都必須是Throwable的子類
  • 如果希望寫一個檢查性異常類,則需要繼承Exception類。
  • 如果希望寫一個運行時異常類,則需要繼承RuntimeException類。
  • 一個異常類和其它任何類一樣,包含有變量和方法。
    可以如下定義一個異常:繼承Exception類,表明這是一個檢查性異常類

    public class MyException extends Exception { }

    自定義異常類舉例:
    下面是自定義異常類MyException,處理的異常是:如果傳入的參數大于10,就拋出異常,輸出對應的信息。

    package com.exception.demo03;//自定義異常類 public class MyException extends Exception {//傳遞數字 > 10 拋出異常private int detail;public MyException(int a) {this.detail = a;}//toString:異常的打印信息@Overridepublic String toString() {return "MyException{" +"detail=" + detail +'}';} } //測試類 class Test{//可能會存在異常的方法static void test(int a ) throws MyException {System.out.println("傳遞的參數為:"+a );if( a > 10){throw new MyException(a);//拋出}System.out.println("OK");}public static void main(String[] args) {try {test(11);} catch (MyException e) {System.out.println("MyException => "+e);}} }/* 測試結果為:傳遞的參數為:11 MyException => MyException{detail=11}Process finished with exit code 0*/

    關于異常在實際應用中的經驗總結

  • 處理運行時異常時,通過代碼邏輯合理規避之,同時輔助try-catch處理
  • 在多重catch塊后面,可以加一個catch(Exception)來處理可能被遺漏的異常
  • 對于不確定的代碼,也可以加上try-catch,處理潛在的異常。
  • 盡量去處理異常,切忌只是簡單地調用printStackTrace()去打印輸出。
  • 具體如何處理異常,要根據不同的業務需求和異常類型去決定。
  • 盡量添加finally語句塊去釋放占用的資源。
  • 參考資料

    [1]https://www.bilibili.com/video/BV12J41137hu?p=1
    [2]https://www.runoob.com/java/java-tutorial.html

    感謝您閱讀到最后,為了您的閱讀體驗,附上鏈接方便跳轉。

    文章目錄

        • IDEA使用
        • Java基礎01:注釋
        • Java基礎02:數據類型
        • Java基礎03:類型轉換
        • Java基礎04:變量
        • Java基礎05:運算符
        • Java基礎06:包機制
        • Java流程控制01:用戶交互Scanner
        • Java流程控制02:Switch case語句
        • Java流程控制03:循環語句
        • Java方法01:方法的基本概念
        • Java數組01:數組基礎
        • Java數組02:Arrays類
        • Java數組02:手撕冒泡排序
        • Java面向對象01:OOP簡介
        • Java面向對象02:創建對象
        • Java面向對象03:封裝、繼承、多態?
        • Java面向對象04:抽象類
        • Java 面向對象05:接口interface?
        • Java 面向對象06:內部類
        • Java 面向對象07:異常exception
        • 參考資料

    總結

    以上是生活随笔為你收集整理的Java入门学习笔记[狂神说Java]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    高清在线一区 | 国产精品 国产精品 | 午夜精品一区二区三区在线观看 | 麻豆免费视频观看 | 国产精品视频永久免费播放 | 国产精品网红直播 | 欧美少妇xx| 人人超碰在线 | 久久国产一二区 | 国产69精品久久久久久 | 国产香蕉97碰碰碰视频在线观看 | 亚洲区精品 | 免费看的黄色小视频 | 国产一区在线看 | 2020天天干天天操 | 人人精久 | 夜添久久精品亚洲国产精品 | 精品国产一区二区三区日日嗨 | 国产福利在线不卡 | 天天插日日射 | 国产精品人人做人人爽人人添 | 激情网在线观看 | 亚洲成人免费在线 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美日韩在线免费观看 | 国色天香在线 | 青青草久草在线 | 中文字幕一区二区三区四区久久 | 国产精品免费人成网站 | 中文字幕 国产视频 | 一区中文字幕在线观看 | 91九色成人蝌蚪首页 | 国产精品午夜在线观看 | 中文字幕视频网 | 欧美国产不卡 | 国内小视频在线观看 | 97精品国产手机 | 99精品欧美一区二区 | 99久久精品免费看国产四区 | 免费av高清| 中文字幕欲求不满 | 亚洲精品综合在线 | 91麻豆视频 | 久久伦理电影 | 五月天中文字幕mv在线 | 在线播放视频一区 | 色婷丁香 | 亚洲极色 | 欧美精品一区二区三区一线天视频 | 日韩色在线观看 | 免费观看的黄色片 | 欧美日韩在线观看一区二区三区 | 久精品视频在线 | 亚洲综合婷婷 | 日本h在线播放 | 欧美一级片免费在线观看 | 97超碰人人| 欧美日韩破处 | 激情一区二区三区欧美 | 欧美日韩破处 | 免费视频一级片 | 天天操综合网站 | 国产91国语对白在线 | 99久久婷婷国产综合亚洲 | 狠狠色狠狠色综合日日92 | 国产精品一区二区av | 日韩欧美在线影院 | 国产精品成人一区二区 | 色姑娘综合网 | 天天看天天操 | 国际av在线 | 欧美色婷婷 | 成人免费观看电影 | 狠狠躁夜夜躁人人爽超碰91 | 国产无套精品久久久久久 | aav在线| 国产精品一区二区三区观看 | 国产精品久久久久四虎 | 亚州国产精品 | 久久免费国产精品 | 日韩精品一区二区三区水蜜桃 | 中文字幕免费观看全部电影 | 日韩高清在线一区 | 成人免费在线播放视频 | 特黄特黄的视频 | 亚洲涩涩网站 | 中文字幕av影院 | 日本护士三级少妇三级999 | 午夜精品区| 精品中文字幕在线播放 | 欧美日韩精品免费观看视频 | 国产美女精品视频免费观看 | 成人av网站在线 | 成人久久精品视频 | 夜夜操狠狠操 | 天天草天天干天天射 | 91精品国自产在线观看欧美 | 99精品免费久久久久久日本 | 中文字幕中文字幕在线一区 | av福利在线免费观看 | 91麻豆精品国产91 | 久久r精品 | 欧美91精品久久久久国产性生爱 | 午夜电影av| 久草在线免费新视频 | 在线观看亚洲专区 | 91在线视频一区 | www.夜色.com| www久久精品| 欧美一区二区三区在线播放 | 亚洲成人黄色在线 | 国产在线色 | 日本性久久| 久久精品一区二区国产 | 色综合天天色综合 | 在线观看国产麻豆 | 黄色一级大片在线免费看国产一 | 91精品人成在线观看 | 国产亚洲在线观看 | 国产爽视频 | 91视频高清免费 | 久久精品1区2区 | 黄色99视频| 黄色资源在线观看 | a在线免费| 久久一及片 | 成人影视免费 | 在线观看黄色免费视频 | 又湿又紧又大又爽a视频国产 | 国产亚洲欧美精品久久久久久 | 五月婷婷综合久久 | 日韩在线免费视频观看 | 欧美极度另类 | 久久大香线蕉app | 国产精品成人国产乱一区 | 一级片免费观看 | 久久公开视频 | 久久人人艹 | 亚洲理论视频 | 精品国内自产拍在线观看视频 | 99久久日韩精品免费热麻豆美女 | 99热在| 二区中文字幕 | 久久久久久久久久久久久久av | 国产精品综合久久久久 | 国产精品永久免费在线 | 成人免费观看网站 | 欧美一级免费 | 亚洲精品看片 | 成人午夜毛片 | 亚洲午夜精品久久久久久久久 | 天天摸天天操天天舔 | www.天天干| 国产精品成人一区二区 | www欧美xxxx | 天天综合精品 | 天天操天天操天天操天天操 | 九九免费观看全部免费视频 | 五月天.com | 欧美精品久久久久久久免费 | 99精品电影 | 九九色综合 | 五月开心激情 | 最近免费观看的电影完整版 | 久久免费精彩视频 | 成年人在线观看 | 欧美性极品xxxx做受 | 成人毛片a | 国产一区视频导航 | 国产精品久久久久9999 | 欧美日韩xx | 久久精品女人毛片国产 | 国产三级精品三级在线观看 | 亚洲区另类春色综合小说校园片 | 丝袜制服天堂 | 91大神一区二区三区 | 亚洲黄色免费在线 | 波多野结衣在线观看视频 | 久久99精品久久久久蜜臀 | 久久国产手机看片 | 欧美另类sm图片 | 激情视频一区二区三区 | 亚洲精品乱码白浆高清久久久久久 | 婷婷丁香激情 | 黄色一级大片免费看 | 国产精彩视频一区二区 | 日韩精品中文字幕在线播放 | 国内精品视频一区二区三区八戒 | 欧美激情综合五月色丁香 | 欧美 亚洲 另类 激情 另类 | 亚洲三级网 | 婷婷在线色 | 天天艹日日干 | 啪啪凸凸| www.神马久久 | 97超碰国产在线 | 在线电影中文字幕 | 成人在线视频一区 | 午夜视频导航 | www久久国产 | 欧美伦理一区二区 | 激情综合婷婷 | 精品久久久久久久久中文字幕 | 欧美成人中文字幕 | 日本中文字幕一二区观 | 亚洲精品午夜国产va久久成人 | 91av在线视频免费观看 | 国产一区二区在线免费播放 | 久久久久 免费视频 | 精品国产一区二区三区av性色 | 一区 二区 精品 | 亚洲一区精品二人人爽久久 | 99精品国产一区二区 | 免费高清在线观看成人 | 91麻豆精品国产91久久久无需广告 | 亚洲婷婷伊人 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产一级免费在线观看 | 五月婷在线 | 亚洲男女精品 | 精品主播网红福利资源观看 | 91成人短视频在线观看 | 国产又粗又猛又色又黄视频 | 亚洲精品欧美专区 | 国产中年夫妇高潮精品视频 | 亚洲第一久久久 | 有码中文在线 | 中文字幕av日韩 | 五月婷婷开心中文字幕 | 成人av在线直播 | 在线激情电影 | 成年人免费在线观看网站 | 国产99区 | 成年人免费看片 | 97精品一区二区三区 | 久久99久久99 | 最新中文字幕在线观看视频 | 色妞色视频一区二区三区四区 | 欧美福利网址 | 伊人天天 | 国产小视频在线免费观看视频 | 久久免费看av | 久久天堂精品视频 | 一级片视频在线 | 亚洲精品免费视频 | 香蕉免费在线 | 国产免费叼嘿网站免费 | 色狠狠狠| 久久久亚洲电影 | 国产精品九九九九九九 | 国产精品成人免费 | 欧美日韩不卡在线视频 | 国产视频 久久久 | 亚洲精品视频在线观看免费视频 | 久久久久久久久久影院 | 天天摸天天操天天舔 | 国产精品夜夜夜一区二区三区尤 | 午夜 免费 | 亚洲91视频 | 波多野结衣视频一区 | 婷婷激情综合网 | 99久久久国产精品免费观看 | 91成版人在线观看入口 | 黄色福利| 日韩中文字幕一区 | 免费av的网站 | 黄色a三级| 久草精品国产 | 天天操福利视频 | 久久久免费毛片 | www操操操 | 免费看精品久久片 | av中文在线 | 天天天天天天天操 | 日韩av三区| 国产九九精品 | 九色琪琪久久综合网天天 | 91探花视频| 欧美激情综合色 | 国产精品国产毛片 | 欧美日韩国语 | 欧美 日韩 国产 中文字幕 | 一级成人免费视频 | 性色xxxxhd| 色夜视频 | 国产黄色理论片 | 久久久精品电影 | 成人免费大片黄在线播放 | 久久夜av| 在线播放精品一区二区三区 | 久久视频精品在线观看 | 国产视频在线观看一区 | av三级在线播放 | 808电影免费观看三年 | 久久久久日本精品一区二区三区 | 在线久热| 91精品国自产在线偷拍蜜桃 | www.天天色 | 国产做aⅴ在线视频播放 | 国内精品久久久久影院男同志 | 中国一 片免费观看 | 久久综合九色欧美综合狠狠 | 日韩av电影一区 | 江苏妇搡bbbb搡bbbb | 亚洲欧美日韩在线一区二区 | 免费黄色在线网址 | 在线看小早川怜子av | 亚洲国产99 | 深爱激情综合网 | 日韩久久久久久 | 久久久久麻豆v国产 | 97超碰国产在线 | 国产精品9区 | 国产在线观看99 | 香蕉视频网站在线观看 | 欧美成人性战久久 | 国产特级毛片 | 久草在线在线精品观看 | 国产aa免费视频 | 97在线免费| 日韩久久网站 | 在线观看视频一区二区 | 五月天色综合 | 一本色道久久精品 | 国产精品91一区 | av在线超碰 | 日韩精品1区2区 | 久久公开免费视频 | 免费视频网 | 亚洲国产色一区 | 成人网页在线免费观看 | 日韩欧美一区二区在线观看 | 中文字幕在线看视频国产中文版 | 性色av免费看 | 国产va在线| h视频日本 | 国产亚洲精品久久久久秋 | 91人人揉日日捏人人看 | 天天人人综合 | 久久美女免费视频 | 狠狠色丁香婷综合久久 | 欧美激情操 | 夜夜爱av | 91久久人澡人人添人人爽欧美 | 国产成人一区二 | 日韩精品视频在线观看网址 | 日本在线观看中文字幕 | 一区二区三区电影 | 在线免费观看视频一区 | 在线观看精品一区 | 久久久久国产视频 | 日本久久精品视频 | 久久久久久国产一区二区三区 | 天天综合色天天综合 | 久久99欧美| 久久久久久激情 | 日韩精品免费一线在线观看 | 国内精品免费 | 99久久精品无码一区二区毛片 | 中文电影网 | 欧美大片在线看免费观看 | 日韩成人邪恶影片 | 综合国产在线 | 国产色在线 | 国产精品成人一区二区三区 | 欧美成人精品三级在线观看播放 | 欧美aa在线观看 | 九九久久国产精品 | 欧美另类高潮 | 91视频在线看 | 男女男视频 | 在线色视频小说 | 五月激情丁香婷婷 | 日韩精品电影在线播放 | 亚洲永久国产精品 | 久久av中文字幕片 | 国产又粗又猛又黄又爽的视频 | 精品国产伦一区二区三区观看方式 | 欧美巨乳网 | 国精产品满18岁在线 | 最近日韩免费视频 | 黄色小网站免费看 | 精品国产一二三 | 狠狠干夜夜 | 国产精品成人久久久久久久 | 丁香综合激情 | 日韩电影精品一区 | 国产高清日韩欧美 | 91在线永久 | 超碰人人超 | 99久热在线精品视频观看 | 黄色激情网址 | 亚洲精品动漫成人3d无尽在线 | 网站你懂的| 91精品久久香蕉国产线看观看 | 九九导航 | 美女网站视频免费黄 | av一级网站 | 在线观看黄网站 | 成人av电影免费在线观看 | 精品国内自产拍在线观看视频 | 色婷婷啪啪免费在线电影观看 | av线上看| 中文字幕视频一区二区 | 深爱婷婷久久综合 | 日韩字幕 | 中文字幕久久精品亚洲乱码 | 久久香蕉影视 | 天天射狠狠干 | 激情影音 | 中文字幕中文字幕中文字幕 | 性色av一区二区三区在线观看 | 亚洲一区二区三区四区精品 | 欧美激情综合五月色丁香 | 国产91精品一区二区麻豆网站 | 国产精品麻豆视频 | 丁香综合五月 | 51久久夜色精品国产麻豆 | 色一级片 | 在线观看亚洲成人 | 成人久久精品视频 | 国产精品女人久久久久久 | 五月在线 | 在线免费观看视频a | 韩国精品一区二区三区六区色诱 | 国产精品美女久久久久久久网站 | 久久久影院一区二区三区 | 久久精品视频网址 | 欧美精品国产综合久久 | 成人在线网站观看 | 中文字幕在线视频网站 | 亚洲精品在线一区二区 | 久久艹艹 | 日韩av电影中文字幕 | 久久综合视频网 | 在线观看国产www | 免费在线观看av片 | 伊人五月天.com | 国产精品人成电影在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产一区二区三精品久久久无广告 | 最新国产视频 | 亚洲最新精品 | 久久精品精品电影网 | 午夜精品久久久久久99热明星 | 精品国产免费久久 | 成人av中文字幕在线观看 | 国产精品一区二区免费看 | 久久国产经典视频 | 国产精品美女久久久免费 | 五月婷丁香 | 色www精品视频在线观看 | 欧美三级高清 | 亚洲伦理中文字幕 | 成人香蕉视频 | 美女网站视频免费黄 | 天天色婷婷 | 免费av免费观看 | 亚洲狠狠丁香婷婷综合久久久 | 国产一级二级三级在线观看 | 国产一级高清 | 国产三级午夜理伦三级 | 四虎影视成人永久免费观看亚洲欧美 | 韩日电影在线 | 亚洲六月丁香色婷婷综合久久 | www.五月天婷婷.com | 国产五月婷 | 欧美特一级 | 国产精彩视频一区 | 波多野结衣一区二区 | 亚洲黄色av网址 | 色九九在线 | 色亚洲激情 | 少妇bbb好爽 | 婷婷伊人网 | 国产黄网在线 | 亚洲欧美视屏 | 久久不射网站 | 日韩精品三区四区 | 四虎在线观看精品视频 | 日本xxxx.com | 国产亚洲精品久久久久5区 成人h电影在线观看 | 99tvdz@gmail.com| 91亚洲视频在线观看 | 天天干亚洲 | 激情片av| 久久99精品波多结衣一区 | 丁香九月激情 | 99国产一区二区三精品乱码 | 91精品一区二区三区蜜臀 | 激情久久久久 | 免费看成人a | 成人免费视频网址 | 色99导航| 中文字幕制服丝袜av久久 | 久久天天躁夜夜躁狠狠躁2022 | 久草在线视频中文 | www狠狠操 | 在线视频18在线视频4k | 蜜臀av性久久久久av蜜臀妖精 | 在线观看av免费观看 | 免费高清在线观看成人 | 日日夜夜人人天天 | 97色在线观看免费视频 | 免费在线观看的av网站 | 在线观看免费成人av | 九色琪琪久久综合网天天 | 99热这里只有精品久久 | 国产精品一区二区三区在线看 | 国产一级大片免费看 | 99爱精品在线 | 免费看黄视频 | 在线观看精品国产 | 热九九精品 | 中文字幕在线观看资源 | 欧美日韩xxxxx | 深夜免费福利视频 | 久久不卡国产精品一区二区 | www.夜色.com| 偷拍区另类综合在线 | 97精品在线视频 | 久久香蕉电影网 | 久久久久久久久久毛片 | 国产一级淫片免费看 | 久久久国产网站 | 日批视频在线 | 欧美在线视频不卡 | 日韩剧 | 国产高清在线观看av | 黄污视频大全 | 欧美黑人巨大xxxxx | 中文字幕日韩一区二区三区不卡 | 99精品视频在线观看播放 | 中文字幕在线不卡国产视频 | 六月丁香色婷婷 | 欧美色图88| 久草资源在线 | 伊人在线视频 | 成人av电影在线 | 精品视频免费看 | 在线欧美国产 | 夜夜狠狠| 五月婷亚洲| 99视频这里有精品 | 久操视频在线免费看 | 国产在线精品福利 | 九色精品免费永久在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产高清视频在线免费观看 | 成人午夜免费剧场 | 日韩电影一区二区在线观看 | 中文字幕亚洲在线观看 | 夜夜视频 | 成人av免费在线看 | 久久深夜| 久久久影院官网 | 丁香六月国产 | 欧美激情第一页xxx 午夜性福利 | 精品久久久久久久久久久久久久久久 | av激情五月 | 欧美精彩视频在线观看 | 极品嫩模被强到高潮呻吟91 | 国产中文字幕视频 | 亚洲欧美在线视频免费 | 国产成人一区二区三区在线观看 | 97理论电影 | 久久免费视频这里只有精品 | 久久久久久久久久久影视 | 国产 一区二区三区 在线 | 国产精品免费麻豆入口 | 免费观看成人 | 国内精品福利视频 | 久草在线综合网 | 国产精品99爱| 久精品视频在线观看 | 国产日本三级 | 亚洲成人av在线播放 | 91香蕉久久| 伊人六月 | 日韩三区在线观看 | 久久久激情视频 | 五月天亚洲综合小说网 | 久久久久高清 | 免费黄a| 久久免费国产精品1 | 日本中文字幕视频 | 99精品免费在线观看 | 亚洲影视资源 | 天天操·夜夜操 | 中文不卡视频在线 | 久久99精品波多结衣一区 | 欧美日韩二区在线 | 超碰公开在线观看 | 免费在线观看午夜视频 | 81精品国产乱码久久久久久 | 色婷婷欧美| 久久涩视频 | 久久人人爽人人爽人人 | 亚洲第一伊人 | 久久婷婷一区二区三区 | 精品国产免费观看 | 国产日韩一区在线 | 在线精品一区二区 | 久久日本视频 | 黄色免费观看视频 | 五月天久久精品 | 亚洲1区 在线 | 黄色一级网 | 色婷婷狠狠操 | 亚洲欧美综合精品久久成人 | 中文字幕一区二区三区在线视频 | 九九热久久免费视频 | 国内精品久久久久影院男同志 | 911国产精品 | 蜜桃视频日本 | 在线精品在线 | 久草手机视频 | 91你懂的 | 久久情网 | 日韩天天操 | 人人讲下载| 中文十次啦 | 国产韩国日本高清视频 | 精品久久久久久久久亚洲 | 96精品高清视频在线观看软件特色 | 中文字幕在线观看视频免费 | 日韩av播放在线 | 国产日韩视频在线观看 | 日韩在线欧美在线 | 五月婷婷开心中文字幕 | 天堂网av在线 | 亚洲天堂网在线视频 | 最近日本韩国中文字幕 | 欧美色久| 国产资源站 | 久久嗨| 国产免费观看久久黄 | 视频91在线 | 在线观看你懂的网站 | 日韩字幕在线 | 香蕉视频最新网址 | 欧美日韩中文在线观看 | 国产另类xxxxhd高清 | 国产福利精品视频 | 激情综合网在线观看 | 天天爽天天做 | 91亚洲国产 | 婷婷五情天综123 | 福利视频一区二区 | 麻豆视频91| 国产精品麻豆视频 | 亚洲综合情 | 中文亚洲欧美日韩 | 欧美一级淫片videoshd | 国产丝袜高跟 | 日本一区二区三区免费看 | 久久久999免费视频 日韩网站在线 | 91福利视频一区 | 91av中文字幕 | 亚洲一级国产 | 日产中文字幕 | 91社区国产高清 | 亚洲欧美综合 | 久久国产精品一国产精品 | 国产精品久免费的黄网站 | 91av视频观看| 久草资源免费 | 激情欧美丁香 | 亚洲成av人影片在线观看 | 婷婷去俺也去六月色 | 久久久久久久久久久综合 | 国产日产高清dvd碟片 | 婷婷激情在线 | 1000部国产精品成人观看 | 黄色视屏av| 国产视频一区二区在线播放 | 久久久国产在线视频 | 国产一级片网站 | 欧美 日韩 性 | 国产精品中文字幕在线播放 | 精品国产伦一区二区三区免费 | 中文字幕亚洲高清 | 久久精品4| 欧美精品天堂 | av一本久道久久波多野结衣 | 欧美精品做受xxx性少妇 | 99免费视频 | 欧美久久成人 | 久久99最新地址 | 黄色在线看网站 | 国色天香在线观看 | 97国产人人 | 日韩激情中文字幕 | 婷婷久草 | 中文字幕精品三区 | 在线黄色国产电影 | 中文字幕激情 | a天堂一码二码专区 | 绯色av一区 | 国产精品婷婷午夜在线观看 | av中文字幕网址 | 亚洲动漫在线观看 | 婷婷色六月天 | 亚洲午夜激情网 | 人人添人人| 欧美精品视 | 国产在线观看a | 成人av在线亚洲 | 欧美一级性 | 中文av在线免费观看 | 69国产精品成人在线播放 | 麻豆91网站 | av中文字幕av | 免费午夜av | 精品国产99 | 亚洲精品小视频 | 欧美a级片免费看 | 欧美性生交大片免网 | 久久久久国产视频 | 在线观看一区视频 | 国产视频在线免费 | 日韩 在线 | 97国产大学生情侣白嫩酒店 | 欧美日高清视频 | 亚洲无吗视频在线 | 在线观看小视频 | 日本aaa在线观看 | av电影不卡 | 日韩精品无码一区二区三区 | 在线看免费 | 99色在线观看视频 | 精品福利在线视频 | 91精品国自产在线观看欧美 | 在线国产视频观看 | 久草视频在线资源 | 制服丝袜亚洲 | 狠狠躁夜夜a产精品视频 | 日韩在线观看一区 | 色.www | 婷婷久久丁香 | 久久久男人的天堂 | 久久免费视频3 | 国产精品9999久久久久仙踪林 | 国产剧情av在线播放 | 欧美一区二区三区免费观看 | 天天操天天干天天 | 91av观看 | www.综合网.com | 亚洲视频精选 | 国产精品免费大片视频 | 91在线视频精品 | 97碰视频| 免费色视频网站 | 欧美 日韩 性 | 日韩视频一区二区 | 婷婷精品国产欧美精品亚洲人人爽 | 一区二区中文字幕在线观看 | 国产一区二区免费 | 欧美日韩xx | 日韩免费在线看 | 片黄色毛片黄色毛片 | 久草在线高清 | 狠狠精品 | 国产欧美精品一区二区三区四区 | 中文字幕无吗 | 国产日韩精品欧美 | 最新日韩中文字幕 | 日批视频在线 | 中文在线www | 日韩在线免费播放 | 国产 欧美 日韩 | 欧美在线视频一区二区三区 | 久久老司机精品视频 | 99久久99久久精品国产片 | www视频免费在线观看 | 三级黄色免费 | 狠狠搞,com | 日日日天天天 | 亚洲最新av在线网站 | 欧美激情精品久久久久久变态 | 激情九九 | 国产精品久久久久久超碰 | 久久xxxx| 欧美va天堂va视频va在线 | 夜又临在线观看 | 亚洲欧美日韩在线看 | www·22com天天操| a级片网站 | 草免费视频 | 久久韩国免费视频 | 国产精品99久久久久久小说 | 久久视频网 | 亚洲我射av | 超碰公开在线 | 欧美性性网| 狠狠色狠狠色综合日日小说 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产污视频在线观看 | 天堂黄色片 | 亚州av网站大全 | 欧亚日韩精品一区二区在线 | 国产麻豆电影在线观看 | 91一区在线观看 | 中文字幕资源网 国产 | 久操视频在线 | 免费的国产精品 | 成人毛片网 | 99热官网| 81精品国产乱码久久久久久 | 国产一区电影在线观看 | 天天干天天摸天天操 | 91在线免费播放视频 | 国产一区二区精品91 | 久久国产精品99久久久久久进口 | 久久看毛片 | 成人av一区二区三区 | 久久免费a | 黄色av观看 | 99在线精品视频观看 | 麻豆极品| 成人免费视频网 | 99在线精品视频观看 | 超碰99在线 | 五月婷丁香 | av在线播放亚洲 | 日本一区二区免费在线观看 | 成人国产精品久久久久久亚洲 | 成人h电影在线观看 | 国产精品videossex国产高清 | 国产精品18久久久久久vr | 韩国一区二区三区视频 | 久久久精品影视 | 99精品在线视频播放 | 欧美日韩另类在线 | 奇米影视8888 | 日韩一区二区免费播放 | 中文字幕精品www乱入免费视频 | 热re99久久精品国产99热 | 久久爱992xxoo | 久久精品99国产精品酒店日本 | 国产无套视频 | 西西大胆免费视频 | 人人爽爽人人 | 99re久久资源最新地址 | 午夜在线观看影院 | 91一区啪爱嗯打偷拍欧美 | 国内精品美女在线观看 | 日韩精品久久一区二区 | 婷婷免费在线视频 | 激情综合色播五月 | 精品在线小视频 | 国产一区二区在线免费视频 | 日韩av电影网站在线观看 | 久久色在线播放 | 在线观看一区二区精品 | 欧美日韩色婷婷 | 国产探花 | 国内99视频 | 欧美一区二区在线 | 激情五月色播五月 | 欧美日韩激情视频8区 | 98福利在线| 久久九九国产精品 | 欧美午夜性生活 | 欧美精品亚洲精品 | 开心色激情网 | 青青河边草免费 | 综合色中色 | 99视频在线免费观看 | 久久国产免费看 | 黄色一及电影 | 免费在线观看中文字幕 | 五月婷婷天堂 | av电影在线观看完整版一区二区 | 国产在线一卡 | 国产高清成人 | 婷婷色综合 | 久久久久免费精品视频 | 97色狠狠| 久草网免费| av免费黄色 | 热久久国产精品 | 久久这里只有精品9 | 网址你懂的在线观看 | 久久精品国产v日韩v亚洲 | 91视频在线自拍 | 九九免费在线观看视频 | 97在线资源 | 色99导航| 97国产大学生情侣酒店的特点 | 美女网站视频免费黄 | 9999免费视频| 国产网红在线观看 | 日韩特黄一级欧美毛片特黄 | 国产香蕉av | 中文字幕在线观看一区 | 国产亚洲免费的视频看 | 久久婷婷丁香 | 国产成人一区二区三区在线观看 | 国产高清视频在线观看 | 99视频这里只有 | 中文字幕一区二区三区四区视频 | 黄色在线网站噜噜噜 | 日日干 天天干 | 天天操天天添天天吹 | 99热精品国产一区二区在线观看 | 亚洲综合成人婷婷小说 | 天天干夜夜爱 | 一区二区三区免费网站 | 欧美日韩国产色综合一二三四 | 在线看黄网站 | 欧美日韩高清一区二区 国产亚洲免费看 | 久久精品视频18 | 深爱婷婷| 国产91对白在线播 | 国产精品高清免费在线观看 | 久久av一区二区三区亚洲 | 中文字幕一区二区三区四区在线视频 | 日韩黄色免费 | 国产一级片免费播放 | 亚洲国产日韩av | 在线视频第一页 | 国产精品二区在线 | 久久久国际精品 | 精品自拍av| www.久久久.cum | 免费久久久久久 | 91最新视频 | 男女激情网址 | 操操操日日日干干干 | 久久五月婷婷丁香社区 | 欧美日韩一区二区三区在线观看视频 | 国产精品成人a免费观看 | 久久99国产精品免费网站 | av免费网站在线观看 | 国产精品久久久久久久久久久久 | 亚洲精品午夜一区人人爽 | 久久综合九色九九 | 一级α片免费看 | 国产精品九九久久99视频 | 亚洲国产免费看 | 四虎成人精品永久免费av | 久久视频精品 | 精品国产一区二区三区四区vr | 亚洲乱码中文字幕综合 | 国产精品久久久精品 | 亚洲高清免费在线 | 亚洲伦理一区 | 91最新地址永久入口 | 久保带人 | 91片在线观看 | 日韩精品免费在线观看 | 久久99久久99精品免费看小说 | 日韩中字在线 | 久久久久久久精 | 又粗又长又大又爽又黄少妇毛片 | 日韩欧美视频一区二区 | 欧美在线视频一区二区三区 | www.黄色| 伊人日日干 | 欧美在线视频一区二区三区 | 久久午夜羞羞影院 | 亚洲激情久久 | 国产成人高清av | 福利久久久 | 亚洲天堂网在线观看视频 | 欧美色一色 | 视频一区二区在线观看 | 伊人www22综合色 | 一级性av | 欧美精品色 | 天堂av高清 | www·22com天天操| 五月天欧美精品 | 99精品国产一区二区三区不卡 | 波多野结衣电影一区 | 在线观看中文字幕 | 91c网站色版视频 | 久久这里只有精品久久 | 黄色片网站大全 | 成人黄色小说在线观看 | 久久电影国产免费久久电影 | 久久精品一二区 | 狠狠综合久久 | 国产一级电影网 | 久久精品牌麻豆国产大山 | 国产精品一区二区精品视频免费看 | 福利视频一区二区 | 99久久久久免费精品国产 | 国产美女视频免费观看的网站 | 国产电影黄色av | 国产成a人亚洲精v品在线观看 | 亚洲一级片av | 午夜精品久久久久久久久久久久 | 国产精品久久久久亚洲影视 | 97精品国产一二三产区 | 国内亚洲精品 | 国产免费大片 |