浮點數的運算須要注意的問題:數組
BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigDecimal("0.8"); BigDecimal subtract = operand1.subtract(operand2); BigDecimal divide = operand1.divide(operand2); System.out.println(subtract);//結果爲0.2 System.out.println(1 - 0.8);//結果爲0.19999999999999996
對象的比較ide
BigDecimal d = new BigDecimal("0.1"); BigDecimal e = new BigDecimal("0.1"); BigDecimal f = e; System.out.println(d == e);//不是同一對象,因此爲false System.out.println(d.equals(e));//equals比較對象的值是否相同 System.out.println(e == f);//綁定爲同一對象 System.out.println(d != e);//結果爲true,由於的確沒有參考同一對象值
對象實例的複製函數
Clothes[] c1 = {new Clothes("blue", 'S'), new Clothes("red", 'L')}; Clothes[] c2 = new Clothes[c1.length]; for (int i = 0; i < c2.length; i++) { c2[i] = c1[i]; } c1[0].color = "yellow"; System.out.println(c2[0].color);//淺層複製,只是複製參考,沒有將對象複製過去,System.arraycopy和Arrays.copyOf()也不能夠,只能自行復制,內部元素單獨複製
字符串的編譯this
String t1 = "Ja" + "va";//都是常量,編譯時直接看爲"Java" String t2 = "Java"; System.out.println(t1 == t2);//結果爲true
數組的複製code
int[] arr1 = {1,2,3}; int[] arr2 = arr1;//指向同一數組,要想複製需另建新數組 arr2[1] = 20; System.out.println(arr1[1]);
static方法或區塊中不能夠出現this關鍵字,也不可引用非靜態的成員變量,非靜態的方法和區塊,能夠使用static數據成員或方法成員對象
public static int sum(int a, int... num){//不定長自變量,必須放在最後面,只能用一個,對象也適用 int sum = 0; for (int i : num) { sum += i; } return sum; }
Java中只有傳值調用繼承
class Customer{ String name; public Customer(String name) { this.name = name; } } Customer c1 = new Customer("張三"); some(c1); System.out.println(c1.name);//顯示李四 Customer c2 = new Customer("趙六"); other(c2); System.out.println(c2.name);//顯示趙六 static void some(Customer c){ c.name = "李四"; } static void other(Customer c){ c = new Customer("王五");//創建新對象指定給c參考,本來參考的對象會被清除 }
關於繼承的幾點總結
一、一方面能夠避免重複定義的行爲,同時也不能爲了不重複就是用繼承,不然會引發程序維護上的問題。
二、繼承須要結合多態靈活使用才能發揮出靈活的做用。
三、繼承一樣也可讓子類從新定義父類的方法,或者在父類中定義抽象方法從而將父類定義成抽象類(只能被繼承而不能被實例化)。
四、繼承的同時也能夠從新定義細節,使用super調用父類方法的內容。從新定義時對於父類方法的權限,只能擴大不能縮小。子類經過指定super中的參數來決定調用父類的某一個構造函數。
多態:即便用單一接口操做多種類型的對象。單一接口能夠是多種類型的父類,他們都屬於父類這種類型,因此能夠避免爲每一個類型重複定義方法,從而能夠提升代碼的維護性。接口
關於接口的幾點總結
一、接口用於定義行爲,使用interface關鍵字定義,接口中的方法不能直接操做,表示爲public abstract,類操做接口使用implements關鍵字,操做接口時能夠操做接口中的方法或是直接標示爲abstract。
二、繼承會有是一種的關係,接口操做表示擁有行爲,,判斷是方式爲右邊是否是擁有左邊的行爲。
三、類能夠操做兩個以上的接口,擁有兩個以上的行爲,類能夠同時繼承某個類,並操做某些接口。接口能夠繼承自另外一接口,能夠繼承兩個以上接口,繼承父接口的行爲,再在子接口中額外定義行爲。
四、接口能夠枚舉常數,只能定義爲public static final,能夠省略。ci