天天看點

黑馬程式員:jdk1.5新特性1 (靜态導入、可變參數、增強for循環、享元模式)

靜态導入: import static java.lang.Math.*;

          //import static java.lang.Math.max;

         導入Math包下 所有的靜态方法。這樣程式裡的靜态方法就可以直接使用

      import static java.lang.Math.*;

       public class StaticImport {

 public static void main(String[] args) {

         System.out.println(max(5, 2));;

  System.out.println(abs(4 - 7));;

           }

        }

可變參數:

  一個方法接受的參數個數不固定例如:

   System,out.print(add(2,4));

   System,out.print(add(2,3,7));

可變參數的特點:

  1 隻能出現在參數清單的最後

  2 位于變量類型和變量名之間

  3 調用可變參數時 ,編譯器為該可變參數隐含建立一個數組,

    在方法體中 以數組的形式通路可變參數。

  public static int add(int x,int... args)

 {   int sum=x;

     for(int i=0;i<args.length;i++)

       {

          sum+=args[i];

       }

         return sum;

 }

  public static void main(Striang[] args)

{

   System.out.println(add(1,5,8));

   System.out.println(add(1,4));

}

 overlode和 override的差別:

overlode重載,是一個類中定義的多個同名函數,他們有不同的參數類型或參數個數

override重寫,子類繼承父類後 重寫父類的某個方法。如果一個方法打算在子類中被重寫,那麼就不要在父類中 做具體實作 而是聲明為抽象方法。否則很容易違背裡氏代換原則及無法實作面向對象設計的最根本目的開閉原則。

overlode和override展現并實作了java的多态性。

增強的for循環

for(type 變量名:集合變量名){...}

注意事項:

 1 疊代變量必須在()中定義

 2 集合變量可以是數組或實作了Iterable接口的集合類

例子:

  public static int add(int x,int... args)

 {      int sum=x;

       for(int arg:args)

       {

          sum +=arg;

       }

        return sum;

 }

  public static void main(Striang[] args)

{

   System.out.println(add(1,5,8));

   System.out.println(add(1,4));

}

基本資料類型的自動拆箱和裝箱及享元模式

  自動裝箱  Integer num1=12;   将基本資料類型自動轉化為對應的包裝類,并指派給對象

  自動拆箱  System.out.print(num1-4); 将包裝類的對象自動轉化為基本資料類型。

享元模式:很多很小的對象,它們有很多相同的屬性,那麼把它們變成一個對象,那些不同的屬性作為方法的參數傳遞,稱為外部狀态,相同的屬性稱為内部狀态

  (對基本資料類型進行裝箱,如果在1個位元組内(Integer 是 在-128 ~ 127之間),編譯器會将資料緩存起來,如果再次調用這個資料可以直接使用。因為一些比較小的資料使用頻率很高并且不怎麼改變,多次建立,浪費記憶體空間。)

基本資料類型的對象緩存:

Integer num1=12;

Integer num2=12;

System.out.print(num1==num2);   //true

Integer num3=130;

Integer num4=130;

System.out.print(num3==num4);   //false

Integer num5=Integer.valueOf(12);

Ingeger num6=Integer.valueOf(12);

System.out.print(num5==num6);    //true

繼續閱讀