牛客網刷題筆記 1
刷題
- 實驗室鎖門了,因為清明節,劍指Offer在教室,大話資料結構在教室,所有書都在教室。。。。除了電腦,所以刷刷題吧;記一下筆記;
1 多型是對於什麼的? (未完成)
下面函式到底輸出什麼呢?
public class Base
{
private String baseName = "base";
public Base()
{
callName();
}
public void callName()
{
System. out. println(baseName);
}
static class Sub extends Base
{
private String baseName = "sub";
public void callName()
{
System. out. println (baseName) ;
}
}
public static void main(String[] args)
{
Base b = new Sub();
}
}
我依稀記得一個道理,b是父類的引用,所以雖然用子類初始化,但是能用的也只有父類有的;也就是說引用b可以使用父類有的一切;但是不能呼叫子類裡特殊的部分;但是,他可以呼叫子類重寫的函式;這就是多型;
挺厲害的是吧,我們來模擬一下過程,由於繼承,所以建構函式先呼叫父類的,例項函式,先去找父類的,然後父類一看,誒,你是兒子,扔回兒子的函式中;這就形成了多型;但有一個問題,就是變數;變數這個貨是沒有多型性的;也就是說直接b.baseName 肯定是父類的,想得到子類的必須要使用get方法;就像上面callName想使用自己家的baseName發現啥也沒有;所以自然是null;
2 浮點型的比較
不可將浮點變數用“==”或“!=”與任何數字比較。
千萬要留意,無論是float還是double型別的變數,都有精度限制。所以一定要避免將浮點變數用“==”或“!=”與數字比較,應該設法轉化成“>=”或“<=”形式。
假設浮點變數的名字為x,應當將 if (x == 0.0) 轉化為 if ((x>=-EPSINON) && (x<=EPSINON))
或者 if ( fabs(x) <=EPSINON) // fabs(x)取x的絕對值
其中EPSINON是允許的誤差(即精度)。
一個例項
System.out.println(Math.pow(64, 1.0 / 3)); 輸出為3.9999999999,不是4!!!!!
3 後臺執行緒
將一個執行緒標記成daemon執行緒,意味著當主執行緒結束,並且沒有其它正在執行的非daemon執行緒時,該daemon執行緒也會自動結束。
4 靜態方法的呼叫 與靜態變數
簡單來說,即便物件是null,也可以呼叫類的靜態方法
靜態變數只能在類主體中定義,不能在方法中定義
5 變數放在那裡
用new建立的物件在堆區
函式中的臨時變數在棧去
java中的字串在字串常量區
6 垃圾回收
7 賦值
byte 最大是127;
boolean 不能是null
8 interface
只能用public+預設修飾詞;什麼private呀,protected呀,static都不能用
9 資料型別
- 基本資料型別(或叫做原生類、內建型別)8種:
整數:byte,short,int,long(預設是int型別)
浮點型別: float,double(預設是double型別)
字元型別:char
布林型別:boolean - 引用資料型別
陣列,類,介面;
ps: string,陣列都是物件啊,都已經有new關鍵字了!
擴充套件:
- 行為:
基本型別只是一個值,沒有任何行為
物件型別有自己的行為 - 記憶體分配:
基本型別在棧內分配
物件在堆內分配
物件引用儲存在棧內 - 引用與值:
基本型別是值型別,僅表示一個值,儲存在棧內
引用型別分兩部分,物件引用儲存在棧內,物件儲存在堆內,
訪問變數,是使用的引用找物件
- 行為:
10 知識點
- final類的方法都不能是abstract,因為final類不能有子類
- throw用於丟擲異常。
throws關鍵字可以在方法上宣告該方法要丟擲的異常,然後在方法內部通過throw丟擲異常物件。 - web會話跟蹤:cookie,session,地址重寫,隱藏域
- 優先選用介面,儘量少用抽象類,抽象類和介面都不能被例項化。