String、StringBuffer、StringBuilder
區別對比:
String在進行 str = str+“123”時,會先給“123”創建一個存儲空間,然后再創建一個存儲空間來來存儲str+“123”,最后再將str指向到新的字符串,所以無謂的浪費了空間,改變了指向的存儲位置。
StringBuffer,相當于一個緩沖區,可以直接對里面的內容進行修改,而不是像String那樣重新開辟空間進行操作。
StringBuilder與StringBuffer類似,是后者的簡化版,在單線程中使用比StringBuffer要方便,但是基于多線程安全,最好用StringBuffer。
異常Exception
關鍵字 throws 和 throw
throws
throws 是說將當前的異常向上逐級遞交拋出,最后頂級是JVM來處理
例如
public static void main(String args[]){ try{ tell(10,0); }catch(Exception e){ System.out.println(); } } public static void tell(int i ,int j) throws ArithmeticException { int temp = 0; temp = i/j; System.out.println(temp); }
這里就是將tell()中的異常拋給上面的main方法來處理,main中有try catch塊來處理,若main也throws出異常,則異常則交給JVM來處理。
throw
一般與catch聯用,需要進行實例化,如
try{ throw new MyException("error had happened"); }catch( MyException e){ System.out.println(e); }
一般在try中拋出異常后,需要在下面給出異常處理的catch塊。
封裝性
Static關鍵字
單繼承 關鍵字extends
子類實例化
ps:子類在實例化對象時,都是先去調用父類的構造方法,然后再調用子類的構造方法。
重寫 重載 super關鍵字
重寫與重載的區別對照
java抽象類
java 接口
ps:接口是允許多實現的,也就是說一個類可以implements多個接口類,間接的彌補了java中單繼承的不足。
第五點實例:
interface testabc { } interface testbcd { } interface abc extends testabc, testbcd { };
java多態應用
java多態的體現 一個是體現在重載和重寫上,還有一個點是體現在向上轉型和向下轉型。
如:
public static void main(String[] args) tell(new B()); tell(new C()); } void tell(A a){ a.say1(); } } class A { void say1(){ System.out.println("i m a"); } } class B extends A{ void say2() { System.out.println("i m b"); } } class C extends A{ void say3() { System.out.println("i m c"); } }
這里調用了class A的say1方法,傳入的是class B和classC的實例化對象,則會調用父類的say1 方法,這樣調用say1方法不論傳入B或者C都可以調用到父類的say1方法。