JAVA SE 803 考試前突擊

考試的宗旨仍然是掌握基礎知識,不過鑑於Oracle的這個認證考試還有很多的你們來找茬的成份在,因此必定必定要細心爲上。 java

 

關於抽象類的坑點集合: express

  • 抽象類不是必須得有抽象方法,但有抽象方法的類必須是抽象類必須加上abstract
  • 抽象類裏面能夠有非抽象方法(有body),或抽象方法定義,即abstract void doit();
  • 接口是extends接口,別被坑了
  • 抽象類不能夠被直接實例化,只能實例化它的具體繼承類
  • 若是寫了@Override,卻在base class裏面找不到這個方法,系統就會出syntax error
  • abstract方法不能有body,非abstract必須有body
  • Abstract_A a = new Extend_A(); 記住這兒Extend_A被稱爲reference type,而Abstract_A被稱爲object type,即a中的方法是object type的(使用getClass時,老是獲得的右邊實例化後的對象的類型,而非定義類型,但內存地址又是reference type的。
  • 只要基類有定義構造函數的,new子類就會自動先去執行基類的構造函數
  • 繼承的方法的訪問scope必須大於或等於,即cannot reduce visibility of super class,這是JAVA的一個重要思想,就是不能讓基類的東西被擋住了
  • 接口能夠定義抽象方法,接口裏面還能夠有具體的變量賦值
  • 有抽象方法的類必須是抽象類,但抽象類不必定要求全部方法爲抽象方法 
  • 在JDK6中,抽象類裏面能夠實例化當前抽象類,但JDK7開始就不行拋異常 Cannot instantiate the type AbstractTry1
  • final和abstract不能同時使用,由於abstract必定要new,地址確定會變
  • getClass拿到的是=右側即initializer的類型,而非定義時的類型,即若是 myX = myY; 的話,getClass獲得的是myY的類型
  • With overriding, the signatures of two methods are identical but they reside in different classes. 方法的簽名是同樣的,但鏈向不一樣的類
  • 繼承類的異常不能比基類拋的異常小 String theString = "Hello World"; System.out.println(theString.charAt(11));
    會拋異常:java.lang.StringIndexOutOfBoundsException
關於數組的坑點集合:
  • 定義二維:int[] array2D[]; int [] [] array2D;
  • 能夠這麼定義:int[][] array2D = new int[2][];// 由於columns的長度不必定非要同樣長
  • {{xx},{yyy}} 這種數組的賦值只能用於初始階段 (initializer),
    正確:int[] arr = new int[]{1,2}; 
    正確:int[] arr = {1,2};
    錯誤:int[] arr = new int[2]; arr = {1,2}; // 報編譯錯:Array constants can only be used in initializers
    錯誤:int[] arr = new int[2]{1,2};  // int[2] => int[] 報編譯錯:Cannot define dimension expressions when an array initializer is provided
  • int grades[][] = new int[ROWS][COLS]; // 注意列表
關於數組的其它:
  • Arrays provide constant time random access which is an efficient way of accessing data
  • Arrays are more difficult to insert or remove elements than other data structures
  • An index to an invalid element is possible
關於數組的API:
  • System.arraycopy(s,start1,t,start2,length)(注意:s是原數組,t是目標數組,start1&start2是開始複製下標,length通常是s的長度,因爲arraycopy方法不給目標數組分配內存空間,因此必須要先爲t分配內存空間!)
  • equals, 是用一維的 deepEquals,是用在多維的
  • toString() 用於一維的,deepToString() 用在多維的,deepToString(object[] o),但對String[]的一堆也等同於toString()
  • 注意Array及ArrayList的API 如arrlist.Remove(xx) 只移除第一個
  • 這個會create a new array based on an existing array arr2 = Arrays.copyOf(arr1, 3); //3是指長度
  • Using the Arrays.copyOfRange method 這個也會create a new array based on a sub-range of elements in an existing array
    arr2 = Arrays.copyOfRange(arr1, 3, 5); // 3 4
  • Arrays.fill(arr1,1,3,5); // [0,5,5,0,0] 而不是[0,5,5,5,0] 這兒注意fill的第二個數值參數是exclusive的
  • 能夠用set來改值:lst2.set(0,"Birch")
關於循環的坑:
  • 這段代碼是能夠編譯經過且正常運行的
    55164449
    Java容許無限循環的存在,見這一篇Java無限循環問題, java識別到這是一個無限循環,就不會再讓下面有代碼了
  • 循環中不可修改循環變量,不然會出compile錯,ConcurrentModificationException。若是必定要在過程當中變動的話,換成iterator
其它大小不一的坑:
  • java的switch支持32位及如下的,包括Integer(包含byte, char, short, int,但double, long不行), enum, String
  • 重載中不必定須要徹底匹配類型,但不能ambiguous,或徹底找不到,好比m("00") 匹配m(Object), m(10)若是沒有m(int)的話,也匹配m(long),若是m(0.5d)但找不到m(double)而只有m(float)什麼的話,就會跑去找m(Object)
    85391920
  • java的數據類型就分爲四種,long是整數,因此上一條會匹配long ,如下爲32位機,會受機器位數影響
    實數:double (8字節)、float (4字節)
    整數:byte、short(2字節)、int (4字節)、long (8字節)
    字符:char (2字節)
    布爾值:boolean

    還有一些自定義的類型:
    java.math.BigDecimal extends Number
    java.math.BigInteger extends Number
  • 靜態變量無論是什麼狀況下,都是指向的是一個heap地址的啊...實例內的也是,和C#長得不同,但內存表面在這點上沒區別,親
  • field 是不一樣於local variable的
  • 這一題Q94的這一句求解釋 for ( expr1 ; expr2 ; expr3 ) { statement; } When expr2 evaluates to false, the loop terminates. It is evaluated only after each iteration through the loop。
  • 這樣能夠的:ArrayList<Integer> t3 = new ArrayList<>(1);
  • int a,b,c=10; 這種狀況只有c被賦值了,但仍能編譯經過
  • 同一變量名能夠被定義爲不一樣類型,如String str = null; int str = 1;
關於異常的坑:
  • 除非遇到System.exit(0), 不然不管有沒有try或有沒有進入到catch,都會執行finally
  • 相似c#的using的 try(xxx) {}中的xxx所涉及的類必須實現了autoclosable接口
  • catch (java.io.IOException | java.io.FileNotFoundException e)
  • 這樣會出錯,提示後者已經在前者是存在,反之同樣,因此|分隔的exception不能夠有繼承/實現關係
  • catch block不是必須得有的,try只要有catch或finally均可以
  • 實現它的類的Exception不能比基礎定義中的大,這個很容易想,就是不能超出定義的範圍
  • The catch clause argument is always of type Throwable 
關於API的坑:
  • Java有哪些exception? 如下是RuntimeException
    ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
  • StringBuilder的delete的end能夠是超過length()的數值,並且不會出錯 StringBuilder sb = new StringBuilder(); sb.append("test"); sb.delete(0, sb.length()+1222);
  • Arrays.sort(arr,null); 表示comparator爲null則用默認的天然排序
  • Arrays.asList(T...); 這個在學Arrays時可沒有留意到呢!
  • ArrayDeque extends Deque (這個好高深喔!)文章一
    14610507
  • arr1.toString() 獲得的字符串使用到的方法:Integer.toHexString(hashCode())
相關文章
相關標籤/搜索