java複習: 類的管理及常用工具類
包
- 寫在程式檔案的第一行
- 一個Java 原始檔中只能宣告一個包,
且宣告語句只能作為原始檔的第一條指令 - 匯入類能匯入非public類,但是不能用因為在其他包預設的許可權用不了
package Testp;
import Testpackage.*;
public class C {
public static void main(String[] args) {
A a=new A();
B b=new B();
}
}//Testpackage.*只能匯入
- 此時不將AB兩類放在同一個.class檔案不然有一個一定是非public類,C等下用不了這個非public
- 注意
.*是對於包來說的,當把AB分成兩個class檔案時就可以兩個全部匯入
了 - Java編譯器為所有程式自動匯入包 java.lang
- 無名包不能匯入.* 無名包中的類無法被匯入
- 靜態匯入的時候如果是import aa.;可以匯入類的所有成員包括靜態,如果是import static aa.A.;是匯入A中的所有靜態成員,非靜態的就會報錯,所以可以將A的所有成員改成靜態的
- 一個class檔案(.java)只能有一個pubic類如果一個包裡面有多個public類即建立多個class檔案
包裝器類
-
Byte 、Short 、Integer 、Long 、Float 、Double 、
Character 、Boolean -
包裝器類的2種建構函式
包裝器類名(基本型別值)
包裝器類名(基本型別值的字串)
- Character類建構函式只能是字元引數;
- Boolean包裝器對ture/false不區分大小寫
-
例子:
float f=(new Double(100.2)).floatValue();
int i=(new Double("100.2").intValue());//XXXvalue():包裝器類-基本型別
float f=Float.parseFloat("11.3f");
int d=Integer.parseInt("25");
//字串-基本型別
Double d=Double.valueof("25.4");//Character包裝器類沒有這個方法
//字串-包裝器
//基本型別、包裝器型別-字串
String s1=Double.toString(3.14);//toString有靜態方法也有例項方法
String s2=new Double(3.14).toString()
- 注意傳引數時候,不如果引數是包裝器類不能直接傳一個基本型別此時不支援自動裝箱拆箱
- 要用建構函式自動裝箱
- Double a=1.2;// Double a=new Double(1.2); 自動裝箱
- double b= a ; //自動拆箱
列舉
- enum列舉型別名字{列舉常量列表}
public class Ch_5_5_2 {
enum Season { 春季, 夏季, 秋季, 冬季; }
public static void main (String[] args) {
Season [] s= Season.values();
for (int i=0; i<s.length; i++)
{ switch(s[i]) {
case 春季: //case Season. 春季 編譯錯
System.out.println(“ 春困”); break;
case 夏季:
System.out.println(“ 夏打盹”); break;
case 秋季:
System.out.println(“ 秋乏”); break;
case 冬季:
System.out.println(“ 睡不夠的冬三月”); break; }
}
}
}
陣列的高階應用
- 要匯入
import java.util.Arrays;
- 排序方法和binarySearch前提是陣列不能為降序可以是無序或者升序
int i=Arrays.binarySearch(a1,3);
返回3這個元素出現第一次的下標Arrays.fill(c,4);
將陣列c填充滿4
字串的高階應用
-
StringBuilder:執行緒不同步不安全但執行效率更高
-
StringBuffer
正規表示式
-
正則匹配步驟:
Pattern p=Pattern.compile(reg1);//reg1為模式串正規表示式
Matcher m=p.matcher(str);//str是待匹配串
m.group();m.find;m.start()
String[ ] split(String regex)
regex 是分隔串,也可以是正規表示式
作用:分割字串,生成陣列
String s="aa,bb,cc,dd";
String[] sa=s.split(","); //以 , 作為s的分隔串,提取字串
for(String s1:sa)
System.out.println(s1);
String replaceFirst(String regex, String rp)
作用:用rp 替換regex 的首次出現String replaceAll(String regex, String rp)
作用:用rp 替換regex
隨機數類
//要匯入java.util.Random
Random r=new Random();
int x,i;
for(i=1;i<=10;i++){
x=r.nextInt(10)+1;//預設從0開始,要獲取從1-10的就要+1
System.out.println(x);
}
物件導向程式設計
物件和物件引用的記憶體管理
- 棧(自動管理機制)
- 棧空間中的資料被系統自動管理即在函式呼叫時自動建立資料空間,在函式執行結束時自動釋放資料空間
- 函式中定義的所有變數無論是基本型別還是引用型別均儲存於棧空間
- 堆(手動管理機制)
- 實現按需分配或釋放
- 所有物件均儲存於堆空間
- 建構函式
- 與類同名,不用定義返回值型別,也沒有return 語句,即使無返回值,也不能用void 宣告
- 使用new 例項化物件時,系統根據給出的
參數列呼叫對應的建構函式。這就是建構函式過載
- 構造程式碼塊
- 作用:對所有物件進行統一初始化
- 特點:
物件一建立就執行並且優於建構函式執行
class Person {
private String name;
private int age;
{ age=15; }//構造程式碼塊
Person() {
System.out.println("A:name="+name+",age="+age);}
Person(String n) {
name=n;
System.out.println("B:name="+name+",age="+age);
}
}
物件的銷燬
- 常量final
- 常量引用不可更改即指向某一物件不可更改,但是指向物件的內容可以修改
- 注意如果是string或者陣列等引用一定在堆裡面還要指向一個最終的資料
- a=b是a指向b指向的物件
- ==判別地址是否相同
- a.equals(b)判斷內容是否相同
- 物件陣列
- new String[10] 不是建立String 類物件(而是陣列 物件 ),因此未呼叫String 的建構函式。
- sa[0] 是String 引用,不是String 物件,sa[0]指向的那個才是string物件
繼承
- 對於超類的私有成員擁有但不能使用
- 構造物件時,會自動呼叫該類與超類的構造函
數,呼叫次序與派生次序相同 - 若超類有非private的
無參建構函式
,子類則自動呼叫
;若超類是有參建構函式
,則子類建構函式中必須顯式呼叫超類的建構函式
,否則編譯錯
單例模式
class Student{
String name;
int age;
private Student(){}
public static Student creat(){//一定是static這樣可以通過類名呼叫
Student a=new Student();//在方法中new
return a;
}
}
Student st=Student.creat();
System.out.println(st.age);
多型
- 意義:一名多義
- 過載(編譯時決定靜態繫結)同一個物件同一個方法的引數不同
- 狗1.嗅(主人氣味 q); 狗1.嗅(骨頭氣味 q); ……
- 注意
過載傳參
時,如果是基本型別資料可以強制轉換大的可以轉換成小的,但是小的不能轉換成大的
- 重寫(執行時決定 動態繫結)不同物件同一個行為的實質不同
- 狗 d=new 藏獒()/ new 哈士奇(); d.咬( );//重寫咬這個方法不同的new的物件呼叫這個方法是不同的,雖然這個方法是extents父類的
保證同名同參同返回型別許可權不能縮小
- 如果要禁止一個類派生子類那麼將類設定
為final
- 禁止子類重寫某個操作可以將操作設定為
final或者static
- 不希望被重寫的方法可以:
final/static/private
//類沒有private修飾
- 狗 d=new 藏獒()/ new 哈士奇(); d.咬( );//重寫咬這個方法不同的new的物件呼叫這個方法是不同的,雖然這個方法是extents父類的
抽象類和介面
- 抽象類:在父子之間建立契約
- abstract不能修飾建構函式
- abstract不能和static final同時使用
- 子類必須要重寫抽象類
- 介面:在任意類之間建立契約
最後
歡迎關注公眾號:前程有光,領取一線大廠Java面試題總結+各知識點學習思維導+一份300頁pdf文件的Java核心知識點總結!