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.變數都初始化後,方法開始執行