java面試複習重點:類的管理及常用工具,教你抓住面試的重點!

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修飾

抽象類和接口

  • 抽象類:在父子之間建立契約
    • abstract不能修飾構造函數
    • abstract不能和static final同時使用
    • 子類必須要重寫抽象類
  • 接口:在任意類之間建立契約

最後

歡迎關注公眾號:前程有光,領取一線大廠Java面試題總結+各知識點學習思維導+一份300頁pdf文檔的Java核心知識點總結!