1. 程式人生 > >Java 讀書筆記 5

Java 讀書筆記 5

初始化與清理

1.過載和區分過載
: 書上例子很好,洗衣服,洗車,洗狗;同樣都是洗,卻洗的是不一樣的東西,似乎用一個名字做不同的事情,理所應當;
而且呢,還告訴我們為什麼不一樣,因為給的引數不一樣,當來著是衣服的時候,就用洗衣服的方式來洗,如果是車,就用車的方式;
不可以通過返回值區分,你洗狗洗出來特乾淨,他就不乾淨,但是方法實際是相同的;
不可以通過訪問修飾符區分,你就給你家洗衣服,洗衣店誰家衣服都洗,但是方法還是一樣的;

2.基本型別與過載;
簡單來說呢,基本型別在過載時,由於型別不同過載就會出現問題;
上程式碼嘍

public class Test  {
    public
void testfloat(float a) { System.out.println("lll"); } public void testdouble(double a) { System.out.println("222"); } } Test test = new Test(); double a = 0; float b= 0; test.testfloat(a);//這樣寫報錯 大型別不能向下轉換,直接報錯 test.testfloat((float
) a); test.testdouble(b); 小型別轉化為大型別

其實想想就明白了,32位轉化為64位。又沒什麼損失,反過來的話,就會丟失精度;況且如果能夠來回轉的話,我估計你最後都不知道出來的是哪個型別的;

3.this關鍵字

  • 一般的this肯定這麼用的最多,這時其實不寫this也是一樣的啦;寫上this更加清晰,指的是本物件裡的某個屬性等於引數。
public class Hello { 

    String s = "Hello"; 

    public Hello(String s){ 
        System.out.println("s = "
+ s); System.out.println("1 -> this.s = " + this.s); this.s = s; System.out.println("2 -> this.s = " + this.s); } public static void main(String[] args) { Hello x=new Hello("HelloWorld!"); } }
  • 還有就是呼叫自己的其他建構函式,繼承什麼的題目裡經常會有的那種
public class Flower{ 
           Flower (int petals){} 
           Flower(String ss){} 
           Flower(int petals, Sting ss){ 
                //petals++;呼叫另一個建構函式的語句必須在最起始的位置 
                this(petals); 
               //this(ss);會產生錯誤,因為在一個建構函式中只能呼叫一個建構函式 
           } 
} 
  • 這次學到了這個
public class A { 
  public A() { 
    new B(this).print();     //將自身當成引數傳遞過去
  } 

  public void print() { 
    System.out.println("Hello from A!"); 
  } 
} 

public class B { 
  A a; 
  public B(A a) { 
    this.a = a; 
  } 

  public void print() { 
    a.print(); 
    System.out.println("Hello from B!"); 
  } 
} 
  • 匿名類 this一般代表整個匿名類,日後再說
public class A { 
    int i = 1; 

    public A() { 
        Thread thread = new Thread() { 
            public void run() { 
                for(;;) { 
                    A.this.run();       //匿名類
                    try { 
                        sleep(1000); 
                    } catch(InterruptedException ie) {     }

                } 
           } 
        }; //注意這裡有; 
        thread.start(); 
    } 

    public void run() { 
        System.out.println("i = " + i); 
        i++; 
    } 

    public static void main(String[] args) throws Exception { 
        new A(); 
    }
} 

初始化順序(對於類來說)

1.靜態變數初始化 //由於static不可初始化區域性變數,就沒有小函式的擔心啦;
2.普通變數初始化
3.變數都初始化後,方法開始執行