1. 程式人生 > 其它 >java_簡單學習筆記

java_簡單學習筆記

java_study筆記

前言:

所有筆記均總結自狂神的java基礎視訊

https://www.bilibili.com/video/BV12J41137hu?p=1

idea小技巧

  • psvm+回車直接給一個main方法
  • ctrl+d複製當前行到下一行
  • sout+回車直接輸出
  • 輸入的時候 new Scanner(System.in); 然後alt+回車
  • 100.for 直接生成一個for迴圈
  • 陣列名.for自動生成一個for-each迴圈
  • alt+insert生成構造器 同樣也可以生成get/set方法
  • ctrl+alt+t自動設定巢狀

java三大版本

  • javaSE:標準版(桌面程式,控制檯開發.....)
  • javaME:嵌入式開發
  • javaEE:企業版

JDK,JRE,JVM

JDK包含了JRE 開發時使用

JRE是java執行時的環境 包含了java的虛擬機器

JVM是java的虛擬機器

java記憶體分析

基礎語法

變數分類:

java是強語言型別

java的資料型別分為兩大類:

  • 基本型別
  • 引用型別

注意一下float+f long+l就行了

變數的型別

  • 類靜態變數,寫在類內方法外
static int a=0;
  • 例項變數,寫在類內方法外
int a=0;
  • 區域性變數,寫在方法內
int a=0;
  • 常量,可以是類的,可以是區域性,也可以是例項
final int a=0;

基本運算子

  • 算術運算子:
+,-,*,/,%,++,--
  • 賦值運算子
=
  • 關係運算符
>,<,<=,>=,==,!=,instanceof
  • 邏輯運算子
&&,||,!
  • 位運算子
&,|,^,~,>>,<<,>>>
  • 條件運算子
?:
  • 擴充套件賦值運算子
+=,-=,*=,/=
  • 很多運算會使用工具類 比如Math等等

包機制

定義一個包用的是package
匯入一個包用的是Import
//import base.*;
  • 包的本質就是一個資料夾 或者是一個名稱空間,一般用公司域名倒置用作包名
  • 有時候當我們需要用到某些包裡面的方法的時候,要匯入包

java Doc

  • javadoc命令是用來生成自己api文件的
  • 加在類上就是類註釋 加在方法裡面就是方法的註釋
@author 作者名
@version 版本號
@since	指明需要最早使用的jdk版本
@param	引數名
@return 返回值情況
@throws  異常丟擲情況

使用方法:

javadoc -encoding UTF-8 -charset UTF-8 Doc.java

java流程控制

使用者互動Scanner

  • java.utilScanner java5的新特性,可以通過Scanner類來獲取使用者的輸入
  • 基本語法
Scanner s=new Scanner(System.in);
  • 通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前我們一般需要 使用hasNext()與hasNextLine()判斷是否還有輸入的資料

  • sanner用完之後要關閉

 scanner.close()
  • next()和nextLine()的區別就是 一個不能讀空白分割 一個可以讀取整行,以換行符為結束符

if選擇結構

if(){
}
else if{
}
else{
}

switch多選擇結構

switch(expression){
case value1:
break;
case value2:
break;
default:
}
  • switch 語句中的變數型別可以是:
  • byte、short、int、char
  • 從java se7開始switch可以支援String 同時case標籤必須為字串常量或字面量
  • 注意break的使用 否則會出現case穿透現象

迴圈

  • while
while(){}
  • do while
  • 即使不能進入迴圈也能至少執行一次
do{

}while()
  • for
  • for 支援迭代的最有效的結構
for(;;){

}
  • 增強for迴圈
for(int x:number){
sout(numbers[i])
}

跳出迴圈

break

  • 終止迴圈,強制退出迴圈

continue----------

  • 終止某次迴圈

方法

System.out.println()

  • 格式
public 返回值 名字(形式引數){

}
public static 返回值 名字(形式引數){

}
  • 如果是靜態方法可以直接在其他的方法中被呼叫 是屬於類的 即類中的就可以隨便用 用.

值傳遞和引用傳遞

  • 過載就是在一個類中有相同的名稱但是引數不同
  • 方法名稱必須相同,引數列表必須不同 滿足兩個條件即可

命令列傳參

  • 依靠命令列引數傳遞給main
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("arg["+i+"]:"+args[i]);
        }
    }

在載入一個類的時候要到包的路徑 包.類才能引用

可變引數

  • 可以傳遞很多個值 也叫做不定向引數

用法:

  • 指定型別後面加一個...省略號
  • 一個方法中只能指定一個可變引數,他必須是方法的最後一個引數,任何普通的引數必須在它之前宣告
public static void main(String[] args) {
    demo02 de=new demo02();
    de.test(1,2,3,4,5);
}
public void test(int ...i){
    System.out.println(i[0]);
}

此時傳遞的引數可以是多個同一型別的引數 也可以是陣列,因為本質上可變引數就是一個數組

new int[]{1,2,3,4,5} 

陣列

陣列的宣告和建立

  • 陣列長度是固定的,一旦宣告不可改變
  • array.length 獲得陣列的長度

宣告方式:

型別[] 變數名;  //首選
或者
型別   變數名[];

陣列的建立:

int[] nums;
nums=new int[10];

陣列的三種初始化

  • 靜態初始化
int[] a={1,2,3};
Man[] mans={new Man(1,1),new man(2,2)}
  • 動態初始化
int[] b=new int[10];
b[0]=10;
  • 預設初始化
陣列也是一種引用型別,它的元素相當於類的例項變數,因此陣列一經分配空間,其中的每個元素也被按照例項變數同樣的方式被隱式初始化

陣列的使用

  • for-each迴圈
        for (int arrau : arraus) {
            System.out.println(arrau);
        }

多維陣列

  • 本質上就是陣列的巢狀 就是數組裡面有陣列

Arrays類

  • java.util.Arrays
  • Arrays.toString(a) 打印出陣列a

稀疏陣列

  • 對於有的陣列利用率比較低的就可以使用稀疏陣列

  • 本質還是一個二維陣列

面向物件

public class pat{
 public String name;
 public int age;
 
 public void say(){
 sout("交了一聲");
 }
}
  • 類=屬性+方法
  • 本質:以類的方式組織程式碼,以物件的組織封裝資料
  • 三大特性:繼承 封裝 多型

靜態方法的呼叫

  • 類名.方法名

非靜態方法的呼叫:

  • new一個物件 然後物件.方法名

static的區別 就是static是和類一起建立的 而非靜態的是和物件一起載入的 所以靜態與非靜態之間無法相互呼叫 靜態可以直接掉靜態 非靜態可以直接掉非靜態

值傳遞和引用傳遞

e.g:傳物件就是傳引用 傳數就是傳值

物件與類的關係

  • 類是一種抽象的資料型別,他是對某一類事物整體描述/定義,但是不能代表某一個具體的事物
  • 物件是抽象概念的具體例項

類的建構函式

  • 一個類即使什麼都不寫 也會有預設的東西 那是因為存在構造方法

  • 構造器可以用於初始化一些屬性,預設是無參構造

  • 如果定義了有參構造 就必須顯式定義有參構造

  • 構造器特性:1.和類名相同 2.沒有返回值

  • 構造器作用:1.new 本質在於呼叫構造方法 2.初始化物件的值

  • 注意點:1.定義有參構造之後,如果向使用無參構造,顯示的定義一個無參的構造

封裝

核心:set/get

  • 該露的露 該藏的藏,提高安全性,隱藏程式碼實現細節
  • 程式設計追求:高內聚,低耦合
  • 核心就是 即對於私有的屬性 我們要提供public的方法來進行呼叫

繼承

  • extends的意思是"擴充套件",子類是父類的的擴充套件
  • 繼承的本質是對一批類的抽象,從而實現對現實世界更好的建模
  • java中只有單繼承沒有多繼承
  • 子類繼承了父類 就擁有了父類的全部方法 私有的無法繼承、
  • java中所有的類 直接或者間接繼承object類
  • 預設會呼叫父類的無參構造 相當於一個super()

super

  • 和this差不多 不過是呼叫父類的一些方法和屬性(私有除外)
super注意點:
1.super呼叫父類的構造方法,必須在構造方法的第一個
2.super必須只能出現在子類的方法或者構造方法中
3.super和this不能同時呼叫構造方法

vs this:
代表的物件不同:
this:本身呼叫者這個物件
super:代表父類物件的應用
前提:
this:沒有繼承也可以使用
super:只能在繼承條件下才可以使用
構造方法:
this():本類的構造
super():父類的構造

方法重寫

  • 物件能執行那些方法主要看左邊 和右邊的關係不大

  • 重寫都是方法的重寫

  • 靜態方法和非靜態方法不一樣

  • 重寫的關鍵就是 public和static

重寫:需要有繼承關係,子類重寫父類的方法!
1.方法名必須相同
2.引數列表必須相同
3.修飾符:範圍可以擴大 
4.丟擲的異常:範圍 可以被縮小  但是不能被擴大
重寫,子類的方法和父類一致 方法體不同

為什麼要重寫:
1.父類的功能,子類不一定需要或者不一定滿足

多型

  • instanceof 判斷一個例項是否屬於某個類
  • 子類物件轉父類物件可以直接轉
  • 父類物件轉子類物件需要強制型別轉換
  • 方便方法的呼叫 減少重複的程式碼
注意事項:
1.多型是方法的多型
2.父類和子類,有聯絡 型別轉換異常 classcastException
3.存在條件: 繼承關係  方法需要重寫  父類引用指向子類物件!
Father f1=new Son();

無法多型的:
1.static 方法,屬於類,他不屬於例項
2.final  常量;
3.private方法

多型是什麼:

即同一方法可以根據傳送物件的不通而採用不同的行為方式

static關鍵字

用法:

package base.lei;

public class student {
    private static String name;
    private  int age;

    public static void main(String[] args) {
        student s1=new student();
        System.out.println(s1.age);
        System.out.println(s1.name);
        System.out.println(student.name);
        System.out.println(name);
    }

}

靜態程式碼快:

static{

}

匿名程式碼快:

{

}

靜態匯入包

import static java.lang.Math.random

抽象類

public abstract void Action{
  public abstract void dosomething(){
  }
}
  • abstract用在方法上邊是隻有方法的名字,沒有方法的實現,他的子類必須重寫父類的方法 除非子類也是abstract
  • 抽象類不能new 只能通過子類來約束
  • 抽象方法必須在抽象類中 抽象類可以實現普通方法

介面-interface

  • 只有規範!自己無法寫方法~專業的約束 約束和實現分離 介面就是規範 定義的就是一組規則
  • 介面中的所有定義都是抽象的 public abstract
  • 介面中所有定義的屬性都是靜態常量 public static final

implements

實現了介面的類,就需要重寫介面,可以用java實現多繼承

public interface userimp implements user{
alt+回車
} 

作用:

1.約束
2.定義一些方法,讓不同的人實現
3.public abstract
4.public static final
5.介面不能被是例項化~,介面中沒有構造方法~
6.implements可以實現多個介面
7.必須要重寫介面中的方法

內部類

  • 在一個類裡面再寫一個類就是內部類
  • 內部類可以獲得外部類的方法以及私有屬性私有方法!!!
  • 一個java類中可以有多個class類 但是隻能有一個public class
  • 直接new就是匿名物件

異常機制

Exception

需要掌握的三種異常:

  • 檢查性異常:最具代表的檢查異常就是使用者錯誤或者問題引起的異常,這是程式設計師無法預見的 例如要開啟一個不存在的檔案,異常發生且編譯時不能被忽略
  • 執行時異常:執行時異常是可能被程式設計師忽略的異常
  • 錯誤ERROR:錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略。例如 棧溢位時一個錯誤就發生了,他們在編譯也檢查不到

異常分為 error和exception

  • error都是虛擬機器的事 exception是使用者的事

java處理異常的關鍵字

try,catch,finally,throw,throws
try{}catch{}是必要的  可以不要finally,一般用來做善後工作
catch可以多個

列印棧資訊

e.printStackTrace(System.err);

throw

  • 主動丟擲異常

一般在方法中使用

throws

  • 假設方法中處理不了異常 那麼把方法網上拋

一般配合try catch然後解決

自定義異常

  • 自定義異常用來處理一些小問題
  • 只需要繼承繼承Expection類就行