1. 程式人生 > >API-異常,StringBuilder,String,常量池

API-異常,StringBuilder,String,常量池

API:應用程式程式設計介面,即jdk文件手冊,裡面以類的形式提供了
    很多常用的功能。
常用的包與類:
    java.lang包:因為常用,所以不需要導包
                                 字串,執行緒
    java.util包: 陣列工具類,日期,集合等
    java.net包:  網路相關的型別 
    java.io包:    輸入輸出型別
    java.math包: 數學應用的相關型別
打包工具:javadoc
    (1)使用命令提示符介面:
               類資訊中沒有宣告包,即使用預設包
        javadoc -d  path  *.java
        path:生成api文件的位置
    
               類資訊中聲明瞭包  如:package com
        javadoc -d  path  nameOfPackage
                如:
           javadoc -d  .\doc  com    
        
                 原始檔在不同包下:
        javadoc -d  path  nameOfPackage1 nameOfPackage2....
                如:
           javadoc -d .\doc  com  demo
    (2)藉助eclipse
        export--java--javadoc-->
        
              選擇javadoc命令的路徑
              選中要生成文件的專案
              選擇生成文件的位置
===========================================
異常:
    在程式開發過程中出現的不正常情況,就是異常。比如,
    除數是0,引數為null,呼叫引數的成員變數或者方法,陣列下標越界
     
異常分為兩大型別:
  (1)exception:程式設計師可以解決的:空指標,除數是0,陣列下標越界
  (2)Error:程式設計師無法解決的:如記憶體溢位 
  
   Throwable是這兩種型別的父類 
exception的分類:
      按照編譯器是否檢查進行分類:
   
    非檢查性異常:也稱之為執行時異常,即,編譯器在檢查語法期間,不做
                            異常檢查。
    檢查性異常:  也稱之為編譯時異常,此時,編譯器會強制檢查語法中的異常情況
                            如有異常,在編譯期需要做異常處理  
                            
exception的結構:
    RuntimeException:
             NullPointerException
             ArrayIndexOutOfBoundsException
             ClassCastException
             IllegalArgumentExcetion
             NumberFormatException
    IOException:
             EOFException
             FileNotFoundException
異常的處理:
    (1)當異常出現時,終止程式
   (2)當異常出現時,我們使用處理機制進行處理異常。無序終止程式
   
       體驗度:儘可能的選擇異常處理機制。
異常處理機制:
         基本思想:
             在可能出現異常的程式碼塊區域,進行嘗試檢查,如果
             出現了異常資訊,我們將這些資訊封裝成某一異常型別的物件。
             然後進行捕獲與處理 
   
 try{
     可能出現異常的程式碼塊
   /*如果有異常,jvm會將異常資訊,封裝成物件
      將地址資訊賦值給catch中的形參
   */
 }catch(Exception e){
          進行處理e
 }                                                 
 
多catch語句塊情況:
    當我們在嘗試捕獲異常物件時,想對多種不同的異常物件分別處理時,
    需要使用多個catch語句塊    
    
  說明: 當在try中出現了異常資訊,那麼就不會再執行try中程式碼塊的
             後續部分。進入相應的catch程式碼塊中執行處理。
             
   多catch語句塊情況下,catch處理的異常種類書寫順序:                                     
    先寫子類異常型別,再寫父類異常     

throw:丟擲關鍵字,在本方法中出現的異常,不做try-catch處理。
             而是拋給呼叫者處理。需要使用throw關鍵字。
       
throws:宣告異常關鍵字,通常用於方法的定義上,用於通知呼叫者             

    當throw的異常物件為檢查性異常,方法上必須throws此異常型別
    如果throw的異常物件為非檢查性異常,方法上不必throws此異常型別
    
方法重寫時的throws的用法
     可行的:
           (1)可以相同
           (2)可以是部分
           (3)異常的子型別可行,可以是多個子型別   
    不行的:
           (1)不同的異常型別,不可以多宣告
           (2)異常的父型別不行     
finally:
   是為try-catch提供了統一的出口。不管try與catch語句塊是否
   發生了異常,最終都會執行finally裡的程式碼塊 。
    通常用於處理一些資源的關閉等操作:
            如讀取檔案時關閉操作,或者是刪除臨時檔案
  finally語句塊可選。


  StringBuilder:可變字串型別:

(字串:底層是字元陣列,及其對陣列的操作)
特點:
(1)此型別是final修飾的
(2)沒有重寫equals方法
(3)此型別提供的大多數方法都帶有返回值,
      即:  return this  返回同一個地址
構造器:
   StringBuilder() 
      構造了一個空的StringBuilder物件,初始容量為16。
   StringBuilder(String str)
      建立一個指定字串的StringBuilder物件
常用方法:
   int length():
      返回有效字元的長度。
   StringBuilder append(Type a):
      將引數a追加到StringBuilder物件裡,返回此物件
   StringBuilider insert(int index,Type a);
      將引數a插入到物件的下標index處 
   StringBuilder  delete(int start,int end);
       刪除此物件裡的部分字元,從start開始,到end結束,注意:包前不包後     
   StringBuilder replace(int start,int end,String str);
      使用str替換此物件從start開始到end結束的子串
   StringBuilder reverse():
      將StringBuilder物件的內容進行翻轉
      
StringBuffer:此類與StringBuilder用法一模一樣。
      但是:
         線上程安全上考慮:
         StringBuffer執行緒安全
         StringBuilder執行緒不安全
         在執行效率上:
         StringBuffer效率低
         StringBuilder效率高   
練習:測試兩種型別的效率高低。
================================================
String型別:(底層是字元陣列+對陣列的操作)

特點:
(1)是不可變的字串型別,(不可變:物件的內容不能更改)
(2)final修飾的型別
(3)字元下標(索引/index)從0開頭
(4)重寫了equals方法和toString方法
(5)預設使用的是unicode字符集,任意字元都佔兩個位元組。

構造器:
  String():
    建立一個空字元序列的字串物件
  String(byte[] bs)
    建立一個字串物件。使用預設字符集進行解碼的字串。
  String(byte[] bs,String charset)
    將位元組陣列使用指定字符集進行解碼成相應的字串物件
  String(char[] ch)
    將字元陣列轉換成字串物件
  String(String str)  
    指定一個字串字面量建立一個字串物件
常用方法:
  int length():
    返回字串物件的字元個數
  char charAt(int index):
    返回此字元序列中指定索引處的字元
  String concat(String another):
    將指定字串another拼接到此字元序列的末尾,返回新物件
  boolean stratsWith(String prefix)/endsWith(String suffix)
    檢視此字元序列是否以prefix為字首/以suffix為字尾
  byte[] getBytes():
    將此字串按照預設字符集編碼成位元組序列,返回一個新的位元組陣列
  byte[] getBytes(String charset)
    將此字串按照指定的字符集編碼成位元組序列,返回新的位元組陣列
  

查詢字串中的字元/子字串的位置
  int indexOf(int ch)
    返回字元ch在此字串中第一次出現的下標(索引/位置)
  int intexOf(int ch,int fromIndex):
    返回字元ch從此字串fromIndex下標開始,往後第一次出現的位置
  int indexOf(String str):
  int indexOf(String str,int fromIndex):  
       注意:返回-1,說明要找字元/子字串 不存在查詢序列中
  int lastIndexOf(int ch);
  int lastIndexOf(String str)
  
  int lastIndexOf(int ch,int endIndex)
  int lastIndexOf(String str,int endIndex)
    查詢字元/子字串截止到某一下標時,最後一次出現的位置。
 上述四個方法:
      查詢字元/子字串在此字元序列中最後一次出現的位置,找不到返回-1
      
擷取子字串的方法:
  String substring(int beginIndex)
         從此字元序列的beginIndex開始擷取,擷取到最後
  String substring(int beginIndex,int endIndex)
         從此字元序列的beginInde開始擷取,擷取到endIndex,包前不包後
  
字串轉成字元陣列的方法:
  char[] toCharArray()
        將此字元序列變成字元陣列  
 
字串中的字母轉成大寫/小寫
  String toUpperCase()
        將字串中的字母都變成大寫,返回新字串
  String toLowerCase() 
        將字串中的字母都變成小寫,返回新字串 
前後去空格的方法:
  String trim()
        去掉此字元序列的前與後的空格 
將任意引數變成字串物件
  static String valueOf(Type v);
    將引數v變成字串物件        
equals方法與==的區別
  ==:用來比較是不是同一個物件 
  equals:用來比較兩個物件的內容是否相同
  
String型別中重寫了equals方法


常量池:
   jvm在使用字串型別時,為了提高記憶體的使用率,當使用字面量(常量)
      進行給變數賦值時,在方法區內提供了用於儲存字面量物件的一個常量池。
      jdk1.7以後,由於方法區記憶體相對較小,將常量池的物件存在堆中
    
   原理:
     當使用字面量賦值時,先去方法區內的常量池中查詢是否有相同字面量的物件,
     如果有,就返回常量池中物件的地址,沒有的話,在常量池中建立此字面量的物件
     再返回。