Java基礎筆記(三)

來源:互聯網
上載者:User

標籤: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基礎筆記(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.