@黃菠蘿的好兄弟 Java基礎知識學習筆記## 標題
2.1 java的識別符號、數據型別、變數個常數
1、識別符號命名規則:以字母、下劃線(_)或美元($)開頭;蹦年使用java關鍵字。(區分大小寫)
2、基本數據型別和參照數據型別;
整數型別:byte,short,int,long;
浮點型別:float,double;
字元型別:char;
布爾型別:boolean;
基本數據型別容納的值及範圍:
、uxxxx 1到4位元16進位制數所表示的字元:
常數的書寫格式:每個字母大寫,單詞與單詞間用下劃線連線。(static 型別 名稱)
參照數據型別:
類(class)
介面(interface)
陣列(eg:int[ ])
列舉(enum)
註解(annotation)
變數需先宣告再使用(格式):數據型別 變數名 = 變數初始值
eg:int count = 10;
//宣告瞭一個int型的變數,
初始值爲10
Int i ,j ,k;
//宣告瞭三個int變數,沒有賦初值。
定義型別變數後要注意其作用域:在main裡定義則main裡都可見,在一個回圈或函數裡定義則只在該區域可見。
JAVA中定義常數(格式):final<數據型別> 常數名(一般常數名字母都大寫,字母之間用下劃線連線,以區分常數變數,要符號起名規則。)
2.5數據的讀取和輸出
Scanner類常用方法
使用Scanner類的方法前要創其物件,匯入import java.util.Scanner
建立物件(標準輸入流掃描使用者鍵盤輸入的數):Scanner scanner = new Scanner(System.in);
把使用者輸入的資訊匯入string裡:String string = scanner.next();
(當在鍵盤輸入兩個字元,中間用分隔符分開,則只接收前面部分。)
列印:System.out.println( 「要列印的內容。」);//有ln是帶換行的
修改分隔符:scanner.useDelimiter(「\n」);解決使用者輸入中帶空格。
2.6 String 類
Java.lang.String包中(只有該包不同匯入,其他類需匯入):該類中的方法,用於支援字串的操作。
建立物件:
宣告物件加建立字串:String str = new String();
由字元陣列建立字串:char c[ ] = {‘h’,’e’,’l’,’l’,’o’}; String str = new String©;
直接用字串常數初始化字串:String str = 「這是一個字串」;
字串運算子+(自左向右):
Eg:
執行結果:
str1=你好,java
str2=java1020
str3=30java
字串比較:
字串是參照數據型別,所以字串的比較蹦年使用==,而要使用String類的成員方法equals()進行判斷。
Str1==str2 //比較的是兩個物件的參照是否相同(既地址是否相同)/
Str1.equals(str2)//比較兩個物件值是否相等。
Eg:
執行結果:
Str1==str2:false
Str1.equals(str2):true
2.7例題講解
使用for回圈打出一個鑽石凌形
分析:分上下兩部分處理(主要函數for)。
規律:行號 空格個數 個數
1 4 1
2 3 3
3 2 5
I 5-i 2i-1
(同理得下部分規律)
程式碼實現:
可實現
2.8 楊輝三角列印講解(應用二維陣列)
1、 找規律
三角形兩邊都是1.
本列元素等於上一行元素相加的和。
注:二維陣列建立時至少要指定第一維的長度。
解決空間浪費問題:
Int a[ ][ ] = new int [8][ ];
For(int I = 0; i <8 ; i++){
a[ i] = new int [i+1];// 每行需要幾個元素定義幾個(核心演算法)
}
<1>打應對角線的1.
Int a[ ][ ] = new int [8][ ];
for(int I = 0; i <8 ; i++){
a[ i] = new int [i+1];
a[i] = new int [i+1];
a[i][0] = 1;//左邊的第一列賦值一
a[i][i] = 1; //右邊的對角線賦一
<2>中間賦值
for(int I = 2; I <8 ; i++){
for(int j = 1 ; j < I ; j++){
a[i-1][j] + a[i-1] [j-1]; //下一行元素等於前行對應元素和其前一個元素之和
}
for(int I = 0 I <8 ; i++){ //打應出三角。
for(int j = 1 ; j < I ; j++){
System.out.print(a[i][j] +」\t」);
}
2.9 Arrays類和Random類
1、Arrays類(注意A大寫)
匯入:java.util,Arrays
Sort方法:sort()對指定陣列進行排序. ArraysSort.java.(靜態方法,不需物件呼叫)
bnarySearch對排好序的陣列進行二分搜尋,找到則返回該值得索引,否則返回負值.
形式:int find = -1 ;
find= Arrays.binarySearch(陣列名,要找的值)返回的是要找值的下標。
找到了會大於負一,沒有找到會等於負一,即不變值。
二分思想(爲什麼要排好序):先找中間中間數值進行比較看大小情況,決定在前半段還是在後半段找值,進而簡化搜尋。
比較陣列:《1》「 = =」這是比較兩個陣列的首地址是否相同,是則返回true ,否false
《2》Arrays.equals(陣列1,陣列2),相同true ,否false。
Random類
匯入:java.util.Random
亂數方法:
nextDouble():生成一個隨機的double值,範圍是【0,1.0)
nextInt():生成一個隨機的int值(在int範圍內正負都行)
nextInt(int n):生成一個隨機的int值,範圍是【0,n )
注意開區間不可取到
使用方法:
1、 匯入包
2、 建立物件
3、 呼叫物件.函數
2.10. 寫一個彩票程式,要求隨機產生並按照升序輸出1~30之間的7個數,且其中任意兩個數位不能重複。
分析思路:
使用Random類產生亂數
使用陣列儲存,不能重複,排序並輸出
核心演算法:
注意點:
(30)+1是因nextInt(n)不能到達30,加一可到。
其中 i-- 作用是防止產生兩個一樣的亂數,如若相同,則返回上一次重隨。
最後用Arrays.sort()排好序後輸出。
3.2 類與物件的建立
類是具有相同狀態或行爲的一個集合
行爲可以理解爲方法,狀態可以理解爲屬性
類是一個範圍,物件是具體的實體。
建立類的形式:
成員可設定許可權(存取符):public default protected private後面的是修飾內建的
定義類:
類名遵循變數名命名規則,且首字母必須大寫。
方法名習慣規則:多單詞第一個字母小寫,第二個單詞開頭大寫(駝峯法)
建立類後創鍵物件:
1、 宣告物件:類名 物件名;
2、 物件的範例化及初始化:類名 物件名 = new 類名();
3.3 構造方法和物件的使用
1、構造方法
在物件被建立時用於初始化物件,具有和它所在類完全一樣的名字;沒有返回值;任務是初始化一個物件的內部狀態。
構造方法的結構:存取修飾符 類名 (參數列表)
{
語句;
}
注:在我們沒有建立構造方法時,系統會預設生成一個無參空白構造方法,建立時不復存在。
3、 使用物件
格式:物件名 . 變數名
物件名 . 方法名(參數)
總結(完整的java類需要什麼):
例子:矩形類(求矩形面積)
(用static修飾的成員變數不一定只能在用static的方法中使用)
(類中的成員變數不一定能在所有的方法中使用,如加了static的成員變數)
3.4 方法的過載和存取修飾符
方法過載:
方法名相同;
參數列表(個數、型別、順序)不同;
注意:返回值不影響方法過載
例:
注:在呼叫時輸入的參數的型別不同:系統會呼叫不同的函數。
存取修飾符許可權問題:
public:任何類
protected:同一包中的所有類,不同包中的子類
private:僅自己
沒有定義時獲得預設的存取修飾符:可被同一包中的其他類存取
存取控製表:
注:不同包中,預設的類是不能匯入的,更不能存取。
注:非靜態的方法我們只能先去建立物件,然後再用物件.方法名()來呼叫。
4.1繼承
被繼承的類叫父類別或超類,繼承父類別的類叫子類或派生類。
繼承格式:
<存取符> class 子類名字 extends 父類別名字「
例子:
思考:因兩個類的基本屬性相同,可讓一個類做父類別,另外建立兩個子類,進行繼承和新增差異屬性。
1、Public class Person{
Private String naem;
Private int age;
Private String gender;
}
2、Class Teacher extends Person{
Private double salary;
Private String department;
}
3、Class Student extends Person{
Private int[ ] score;
Private String grade;
注:其中一處有public爲主類,一個檔案裡只能有一個主類
總結:1、只有public類,才能 纔能被另一個包中的類繼承;
2、引入另一個包中的public類,需要import;
3、private型別的屬性或方法不能被繼承
4、public型別的屬性或方法可被繼承(除構造方法)
5、defalut預設修飾的類可以被同一包中的類繼承
6、protected類可被包中的類和不同包中的子類繼承
7、被final關鍵字修飾的類是不能被繼承的
4.3 方法重寫
當子類與父類別的屬性同名是,用 super.屬性名 來參照父類別的屬性;
子類覆蓋父類別的方法時,用 super.方法名(參數列表)的方法來存取父類別綜合你的方法。
總結:使用final 修飾的方法是不允許被重寫的。
方法重寫:子類方法與父類別方法同名,且參數個數型別一致,返回型別相同或是其子類。
方法過載:在一個類內部,方法名相同,參數個數或型別不同,返回型別相同。
4.4 Object類
在java.lang.Object類,所有類的祖先
(如果一個類沒有指明任何父類別,則預設的自動繼承了java.lang.Object類,Object類是所有類的頂級父類別。)
注:且在java中都是直接或間接繼承了Object類。
(因爲不管你是否寫了extends,你所繼承的類都可能是繼承了Object類後的子類。)
Object類包含了所有java類的公共屬性和方法,這些屬性和方法在任何類中均可以直接使用,其中較爲重要的方法如下表所示:
!!!Equals方法:比較物件你內容(區分 == 比較的是地址)
!!!!tostring()方法:
Object類中定義了public String toString()方法,其中返回值是Strinbg型別,描述當前物件的有關資訊,在進行String與其他型別數據(參照型別)的連線操作時,將自動呼叫該物件類中tostring()方法,預設情況下tostring()方法放回的字串格式是「類名@雜湊碼」,一般情況下需要重寫toString()方法。
6.1 異常
程式中的錯誤分類(3類):
編譯錯誤 邏輯錯誤 執行時錯誤
1、 編譯錯誤
概念:是由於沒有遵循Java語言的語法規則而產生的。必須在編譯階段排除。
2、 邏輯錯誤
概念:是指程式編譯正常,可執行,但結果不是所期待的。
3、 執行時錯誤
概念:執行時錯誤是指程式執行過程中出現了一個不可能執行的操作
異常就是值由於程式中的錯誤而導致正常的程式流程中斷的一些事件。
(除數爲0,等等)
標準異常類:
所有異常類都是Exception類的子類,分佈在java.lang、java.io、java.util和java.net 包中。
類圖:
.
異常是一種程式在執行中出現的不可恢復執行的錯誤
Throwable類是所有error類exception類的父類別
Throwable類下的常用方法:「
Public String getMassage():
建立當前物件建立時的錯誤內容
Public String toString():
返回三個部分的內容:當前物件的類名:錯誤資訊的字串
Public void printStackTrace():
將跟蹤站中的資訊輸出:第一行是當前物件toString的返回值,其餘各行是跟蹤站中的資訊
Public Trowable filllnSrackTrace():
當前異常物件的發生位置,包括類,方法,所在檔案的行號記錄到跟蹤站的行號中
Error類:由系統保留,使用者不能使用
Exception類:使用者程式中可以直接使用,處理Exception型別的異常。
定義兩個建構函式:
Public Exception()
Public Exception (String s) //其中s輸入錯誤資訊的描述,在自定義異常中用到
6.2 處理異常的機制 機製
一:捕獲異常
概念:沿着方法的呼叫棧逐層回溯,尋找處理異常的程式碼,把當前異常物件交給這個方法進行處理。
二: 宣告拋出異常
當前方法不知道如何處理所出現的異常或者此時處理不合適,則可在定義方法時,宣告拋出異常。
優點:1、把各種不同類型的異常進行分類,使用java類來表示異常情況,這種類被成爲異常類。充分發揮類的可拓展性和可重用性的優勢。
2、異常流程的程式碼和正常流程的程式碼分離,提高了程式的可讀性,簡化了程式的結構。
3、可以靈活處理異常,如果當前方法有能力處理異常,就捕獲並處理它,否則只需要拋出異常,由方法呼叫者來處理異常。
關於例外處理關鍵字: try catch finally throw throws
捕獲異常常用結構:
1、
在執行完try語句中的程式碼段沒有異常,則直接直接執行catch後面的程式碼。
2、在try語句中產生了異常
注:catch()方法跟在try語句後面,它可以是一個或多個
catch()方法有一個參數,該參數是某種異常類的物件
finally語句後面的程式段總是被執行的,該語句起到提供統一介面的作用
範例例外處理:
Try {
情況實踐:
情況一(無異常):
情況二(異常匹配):
情況三(不匹配):
最後一行是異常的型別,可改爲該型別。
6.3 拋出異常
throw :用來明確地拋出一個「異常」。
格式:throw 異常類物件名;
throw (new 異常類名());
執行該語句時,程式終止執行後面的語句,在程式中尋找處理異常的程式碼,如果沒有程式中沒有處理異常的程式碼,則把異常交給java系統處理。
範例:
例2:
A>5時:
例3:多次異常
多個throw,只執行到第一個就終止了只拋出一個異常。
throws (實際應用一般和throw同用):
可以在捕獲異常後,拋出明確的異常給呼叫者
在方法首部的位置加上throws關鍵字,然後再加上異常型別。
Throws拋出的異常宣告範圍要比throw的大或相同。
注:捕捉到發生的異常可在方法中處理,也可以拋到呼叫該方法的方法中處理
在說明要拋出異常的方法時應加關鍵字throws <異常列表>
<異常列表>中可以有多個逗號分隔的異常
範例(求兩個數的除法,然後除數爲0拋出異常):
加入throws:
在throwsDemo紅色波浪線中可以點出處理的try 和catch
6.4自定義異常
自定義的異常類都選擇exception 爲父類別
格式:
範例(自定義異常):
兩個加數其中一個爲負數則產生異常。
7.1 泛型
分爲:
泛型類
泛型介面
泛型方法
沒有引入泛型之前的類(使用頂級父類別Object類)
使用泛型:
好處:在編譯期間檢測型別,捕捉型別不匹配的錯誤,而且型別的轉化都是隱式的。
形式:public class Generic {……} // T 可替換任意實際型別
宣告形式:Generic<實際型別> inOb;
泛型範例:
注:泛型的型別參數只能是類型別,不能是基本的數據型別。
同一種泛型可以對應多個版本,泛型的型別可以有多個,不同版本的泛型類範例是不相容的。
7.2 集合
概念:是將多個元素組成一個單元的物件,用於儲存、減少、操縱和傳輸數據。
集合框架包括:介面、實現和演算法。
介面表示集合的抽象數據型別,實現是集合介面的具體實現,演算法提供了對實現集合介面物件的通用的演算法。
優勢:
1、 集合框架強調了軟體的複用,通過提供有用的數據結構和演算法,使開發者能集中注意力於程式的重要部分上。
2、 集合框架通過提供有用的數據結構,入動態陣列、連線表、樹和雜湊表等對演算法的高效能、搞品質的實現使程式的執行速度和品質得到提高。
3、 集合框架必須允許不同類型的數據以相同的方式和高度互操作方式工作。
4、 集合框架是允許允許拓展和修改的。
5、 集合框架API易學易用。
6、 集合框架只要由一組用來操作物件的介面組成,不同介面描述一組不同數據型別。
主要集合框架(collection,map):
虛線框爲介面,實線框爲類,加粗框爲本章重點學習物件。
Collection介面:
用於表示任意物件的集合,該介面中宣告瞭所有集合都擁有的核心演算法,如:新增,刪除、查詢等
常用方法:
注:這些方法需在具體的實現類中進行重寫後才能 纔能使用。
7.3 List介面(繼承了collection介面,元素可重複)
以元素新增的次序進行排列。
特點:
1、 擴充套件了collection介面
2、 表示了一種有序的集合
3、 元素可以通過它們在列表中的位置進行插入和存取
4、 可以包含重複元素
5、 具體實現類常用的由ArrayList和LinkedList
常用方法:
ArrayList類:
Capacity爲容量,可增加。
其中的實現類(可直接呼叫):
Add方法:
特點:可重複,按新增順序排序。
Remove方法:
移除指定位置的數據
Set方法:
改變指定位置的數據
LinkedList類(內部實現基於鏈表,適合於鏈表中需要頻繁插入和刪除操作的使用):
範例:
首位部新增addFrist 和addLast
7.4 迭代器(iterator介面)
意義:使用者可以採用一致的操作方法操作collection,而不需要知道這個collection的具體實現型別。
Hasnext一般當作while的判斷語句。
Next方法一般放在回圈體內,對數據進行處理,與hasnext方法結合使用,可實現集合的遍歷。(越過下一個元素,返回剛剛越過的元素的參照)
一般遍歷步驟:
1、 通過iterator方法得到集合的迭代器
2、 通過呼叫hasNext方法判斷是否存在下一個元素
3、 呼叫next方法得到當前遍歷到的元素
相應語法結構:
8.1 檔案
概念:是相關記錄或放在一起的數據的集合。
File類:
File物件可以對檔案或目錄及其屬性進行基本操作
構造方法:
在工作目錄建立a.txt檔案方式:
Creatnewfile方法的作用是自動建立一個file物件,指定檔名的空檔案(需檔案不存在,如存在則不需)
注:在各級目錄間用雙//隔開
建立目錄(mkdir):
檔名處理:
檔案屬性測試:
檔案刪除 大小 修改時間:
Long lastmodified 返回是長整型,需轉換爲時間型。
Date物件 tostring方法顯示時間:
二者結合輸出修改時間: