標籤:java
異常: 程式在運行時發生的不正常的情況
異常的分類:
Throwable:
Error:錯誤。由系統原因造成的,一般是系統資源分派衝突或者系統崩 潰等原因。
對於程式員來說Error是無法處理的。
Exception:異常。通常由程式造成的,一般 運算、io等等,可以處理的
預設是jvm進行異常處理。處理的方式列印異常名稱、異常資訊、異常發生的位置 當出現異常,程式中斷,異常下邊的代碼將不會被執行。
因為大部分異常java內部已經定義好了,所以當發生異常時,系統會自動 建立該異常的對象。因為main方法不能處理該異常,所以拋給了jvm。 jvm預設的處理方式將該異常資訊列印 printStackTrace();
throw:方法內部 手動拋出異常。
如果拋出的異常是受檢異常,需要通過throws在聲明處聲明
throw new 異常類([“異常資訊”])
throws:方法聲明部分 聲明該方法可能會拋出異常,
使用throws的方法不處理異常,誰調用誰處理
方法名() throws 異常類列表{ *
}
throw + 異常對象
throws+異常類列表
在throws拋出異常後,調用者必須處理:
1)使用try-catch處理
2)繼續通過throws拋出
try{ 可能出現異常的代碼 (資源分派) } catch(…){ 出現異常處理的代碼 } finally{ 不管是否出現異常,均會執行的代碼
(釋放資源) }
思考:如果try中包含return,finally語句中也包含return,執行順序? try - catch -finally: 如果try沒有異常:try-finally 如果try有異常:try-catch-finally 如果try沒有異常,且try中有return,try-finally-return 如果try有異常且try有return,try-catch-finally-return
——–>finally永遠都執行
如果try中包含return,finally在return之前執行。
異常處理: 受檢異常、非受檢異常
如果發生的異常是RuntimeException或其子類,那麼
1 在函數內部使用throw拋出異常對象,不用處理,編譯可以通過
2在函數後通過throws聲明拋出異常,不用處理,編譯通過
異常分為兩類: 編譯時間檢測的異常(受檢異常) 編譯時間不檢測的異常(非受檢異常 RuntimeException及子類)
基本類:
/*
* 封裝類: byte Byte
* short Short
* int Integer
* long Long
* char Character
* float Float
* double Double
* boolean Boolean
* 封裝類,方便使用。
* 可以用於基本類型和字串類型之間的轉換
* String Integer.toString(int i)
* String Double.toString(double d)
* 字串轉換成基本類型
* int Integer.parseInt(“123”)
* double Double.parseDouble(“1.2”)
* 進位轉換 Integer.toHexString() Integer.toOctalString()
* Integer.toBinaryString()
* Integer.parseInt(“”,”“)
* 裝箱:基本類型—》參考型別
* 拆箱:參考型別–》基本類型
*/
Integer i = 10; // 自動裝箱 new Integer(10)
i = i + 100;// 先自動拆箱 i.intValue()+100 再裝箱 new Integer()
// java預設情況下,會在常量池中建立 -128~127常量
Integer m = 127;
Integer n = 127;
System.out.println(m == n);// true
Integer a = 128; Integer b = 128; System.out.println(a == b);// false // 正數的hashCode()就是其本身,long類型可能會不同 System.out.println(a.hashCode()); System.out.println(b.hashCode()); Long l = new Long(12345678900000L); System.out.println(l.hashCode());
Date的使用:
Date date = new Date();// 獲得系統目前時間
System.out.println(date);
long time = date.getTime(); Date d2 = new Date(time); // 使用定義好的日期格式化工具類 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); System.out.println(df.format(date)); // 將字串轉換成Date對象 try { Date d3 = df.parse("15-03-04"); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 自訂格式格式化日期和時間 // 注意: 月MM 分 mm 秒:ss 毫秒:SSS SimpleDateFormat sdf = new SimpleDateFormat("yyy/MM/dd hh:mm:ss:SSS"); System.out.println(sdf.format(new Date()));
Calendar的使用:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(year);
String[] months = { “1月”, “2月”, “3月”, “4月”, “5月”, “6月”, “7月”, “8月” };
System.out.println(months[month]);// 0-11
String[] weeks = { “”, “Sunday”, “Monday”, “Tuesday” };
System.out.println(weeks[week]);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));// 24小時
String str = String.format("%d年", year); System.out.println(str); // %s String %c char %d int %f float double System.out.println(String.format("%.2f", 10 / 3.0));
StringBuffer:
StringBuffer類:字串的容器,裡面的內容是可以變 .安全執行緒
StringBuilder jdk1.5 線程不安全 效率高
儲存:
StringBuffer append()
StringBuffer insert(int offset,string s)
刪除:
StringBuffer delete(int start,int end)
StringBuffer deleteCharAt(int index)
修改:
StringBuffer replace(int start,int end,String str)
void setCharAt(int index,char ch)
獲得:
char charAt(int index)
int indexOf()
int lashIndexOf()
int length()
反轉:
StringBuffer reverse()
List
List介面:特點:儲存物件有序的,可以重複的
增加: void add(int index,Object o)
boolean addAll(int index , Collection c)
刪除:
Object remove(int index)
修改:
Object set(int index,Object o):返回原來的元素
查詢:
ListIterator listIterator()
List subList(int fromIndex,int toIndex)
Object get(int index)
ArrayList類:List介面的實作類別 通過下標操作,類似於數組。可以看作為可變長度的數組 數組有序的: FIFO 先進先出 (First In First Out)
ListIterator:父介面Iterator List特定的迭代器,可以鑲嵌和向後擷取資料,支援增刪改的操作 hasNext() next() hasPreivious() previous() previousIndex() add() set()
Set:
Set介面:無序的(儲存的順序和添加的順序不一致)。不能存放重複的元素
HashSet類:使用的資料結構是雜湊表,線程不安全的
保證加入集合的對象的唯一性: int hashCode() boolean equals(Object obj)
比較的過程:
首先調用對象的hashCode()方法,如果雜湊值不同,直接添加到集合中。
如果hashCode()相同,則會調用equals()方法判斷內容是否相同,如果返回false,表示內容不同,直接添加到集合中
如果返回true,則不可以添加到集合中
雜湊值相同不一定是同一個對象,同一個對象的雜湊值一定相同。
步驟:
1)自訂類,
2)重寫hashCode():自訂演算法
a、 eclipse自動產生
b、通常讓屬性的hashCode()的和返回,基本類型直接求和,參考型別通過調用hashCode()
3)重寫equals()方法
a、 eclipse自動產生
b、依次比較屬性的值是否全部都相等
TreeSet:底層使用的資料結構是二叉樹,線程不安全。會對存入集合的對象進行排序。
*
* 保證加入集合的對象是可排序的:
* 1)讓自訂的類實現Comparable介面,int compareTo()
* 2 )自訂比較子:
* 建立比較子,實現Comparator介面,介面int compare()
* 把比較子對象作為參數傳遞給集合的構造方法
執行個體:
class Dog implements Comparable {
private String name;
private int age;
public String getName() { return name;}public void setName(String name) { this.name = name;}public int getAge() { return age;}public void setAge(int age) { this.age = age;}public Dog(String name, int age) { super(); this.name = name; this.age = age;}public Dog() { super();}@Overridepublic String toString() { return "Dog [name=" + name + ", age=" + age + "]";}@Overridepublic int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result;}@Overridepublic boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Dog other = (Dog) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true;}@Overridepublic int compareTo(Object o) { Dog d = (Dog) o; if (this.age < d.age) return -1; else if (this.age > d.age) return 1; else return this.name.compareTo(d.name); // 年齡相同再繼續比較姓名}
}
// 自訂比較子
// 比較名字是否相等,如果名字相同再按照年齡排序
class MyCompare implements Comparator {
@Overridepublic int compare(Object o1, Object o2) { if (!(o1 instanceof Dog)) throw new ClassCastException("類型轉換出錯"); if (!(o2 instanceof Dog)) throw new ClassCastException("類型轉換出錯"); Dog d1 = (Dog) o1; Dog d2 = (Dog) o2; int n = d1.getName().compareTo(d2.getName()); return n == 0 ? d1.getAge() - d2.getAge() : n;}
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java基礎筆記(三)