1. 程式人生 > 其它 >回顧總結12

回顧總結12

常用類、Math類、Arrays類、System類、日期類

常用類

Math

常用方法

  1. bas:絕對值
  2. pow:求冪
  3. ceil:向上取整
  4. floor:向下取整
  5. round:四捨五入
  6. sqrt:開方
  7. random:隨機數[0~1)之間
  8. max:最大值
  9. min:最小值

Arrays

常用方法

arrays類包含了一系列靜態方法,用於管理或運算元組(排序和搜尋)

  1. toString:返回陣列的字串形式

  2. sort:自然排序,預設為升序
    還可以定製排序,通過傳入一個介面Comparator實現匿名內部類,如果返回大於0,升序,返回小於0,降序

  3. binarySearch:二分搜尋法進行查詢,要求有序,如果存在返回陣列所在下標,如果不存在,返回-(該資料應該所在的位置下標+1)

  4. copyOf(arr,newArr.length):當newArr.length > arr.length時,增加null,newArr.length < arr.length時,只拷貝前newArr.length個數據。

  5. fill(arr,填充值):陣列填充,把陣列用給的引數填充

  6. equals:陣列元素一樣時,返回true

  7. asList:將陣列轉換成List

    List asList = Arrays.asList(2,3,4,5,6,1);
    

    asList的編譯型別是List,執行型別是Arrays下的靜態內部類ArraysList

System

常用方法

  1. exit:退出當前程式,0表示正常退出

  2. arraycopy:複製陣列元素,比較適合底層呼叫,一般使用Arrays.copyOf方法完成陣列複製

    System.arraycopy(src,0,dest,0,3);
    //引數1:源陣列,被拷貝的
    //引數2:拷貝的源陣列的起始位置(索引下標)
    //引數3:目標陣列,拷貝到
    //引數4:拷貝的目標陣列的起始位置(索引下標)
    //引數5:拷貝個數
    
  3. currentTimeMillens:返回當前時間距離1970-1-1的毫秒數

  4. gc:執行垃圾回收機制

BigInteger和BigDecimal

BigInteger

比較大的整數

BigInteger bigIntrger = new BigInteger(String s)
    //s就是需要儲存的數字

BigDecimal

比較大的小數

BigDecimal bigDecimal = new BigDecimal(String s)
    //s就是需要儲存的數字

常用方法

  1. add:加
  2. subtract:減
  3. multiply:乘
  4. divide:除
  • BigDecimal的devide方法可能會丟擲異常,因為無限小數。所以我們可以為它指定精度,如bigDecimal1.divide(bigDecimal2, BigDecimal.ROUND_CEILING),會保留分子的精度

日期類

Date(日期)

第一代日期類

獲取當前系統時間

java.util包下

日期格式直接輸出是國外的方式,所以要對格式進行轉換,使用SimpleDateFormat類 ,把日期轉換成相應的字串形式輸出。

SimpleDateFormat物件是用來轉換日期格式的

Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");//分別輸出年月日,時分秒,星期
String format = sdf.format(d1);

Calendar(日曆)

第二代日期類

是一個抽象類,構造器是protected的,通過getInstance方法來獲取例項。主要提供大量欄位和方法

為特定瞬間與一組如YEAR、MONTH、DAY_OF_MONTH、HOUR等日曆欄位之間的轉換提供了一些方法,併為操作日曆欄位(如獲取下星期的日期)提供了一些方法

Calendar c = Calendar.getInstance();
c.get(Calendaer.YEAR);
c.get(Calendaer.MONTH)+1;//MONTH是從0開始計算
c.get(Calendaer.DAY_OF_MONTH);
c.get(Calendaer.HOUR);//12小時制,24小時制是HOUR_OF_DAY
c.get(Calendaer.MINURE);
c.get(Calendaer.SECOND);

Calendar沒有專門的格式化類,所以需要程式設計師自己來組合顯示

LocalDate、LocalTime、LocalDateTime

第三代日期,JDK8時加入

彌補前兩代日期的不足

歷史:JDK1.0中包含了一個java.util.Date類,但是它的大多數方法已經在JDK1.1引入Calendar類後被棄用了。Calendar存在的問題

  1. 可變性:像日期和時間這樣的類應該是不可變的。
  2. 偏移性:Date中的年份是從1900開始的,而月份都是從0開始
  3. 格式化:格式化只對Date有用,Calendar沒有
  4. 安全性:它們不是執行緒安全的,不能處理潤秒等(每隔兩天,多出1秒)

LocalDate(日期)

LocalDate只包含日期,可以獲取日期欄位(年月日)

LocalTime(時間)

LocalTime只包含時間,可以獲取時間欄位(時分秒)

LocalDateTime(時間日期)

LocalDateTime包含日期和時間,可以獲取日期和時間欄位(年月日 時分秒)

//1
LocalDateTime ldt = LocalDateTime.now();//返回當前日期時間的物件例項
ldt.getYear();
ldt.getMonth();
ldt.getMonthValue();
ldt.getDayOfMonth();
ldt.getHour();
ldt.getMinute();
ldt.getSecond();
//2
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dtf.format(ldt);

Instant時間戳

java.time.Instant類

可以和第一代的Date進行轉換

類似於Date,提供了一系列和Date類轉換的方式

Instant------------>Date:Date date = Date.from(instant)

Date------------>Instant:Instant instant = Date.toInstant()

//3
Instant now = Instant.now();
Date date = Date.from(now);
Instant instant = date.toInstant();

總結

第一代Date是通過new獲取的日期和格式類,不安全。第二代Calendar改進,通過靜態類呼叫getInstance方法獲取日期,但是沒能處理潤秒等的問題,而且沒有對應的格式化類。第三代LocalDate、LocalTime、LocalDateTime通過靜態類呼叫now方法獲取日期,處理了以上幾代的缺陷。有格式化類DateTimeFormatter,通過靜態類呼叫ofPattern方法進行日期的格式化操作

常用類作業

1. String_toCharArray

要求:將字串中指定部分進行反轉,比如將"abcdef"反轉為"aedcbf",編寫方法public static String reverse(String str, int start,int end)

思考:使用String的substring擷取子串,用一個String接收,然後定義一個相同長度的新的String,進行互動資料,最後把反轉過的String用StringBuffer的replace替換掉原有的資料。

優化:直接在原有的String上操作,只用生成一個新的String物件。先使用String的toCharArray把字串轉換成字元陣列,然後在數組裡操作。也不用新建陣列進行end-start次交換,在原有陣列上進行交換,能減少一半的次數。有兩個變數記錄開始和結束,每一次交換結束就前進一步,當差值不大於1的時候,說明交換完畢。然後新建一個String接收轉換後的陣列輸出即可。

public static void main(String[] args) {    String str1 = reverse("abcdef",1,4);    System.out.println(str1.toString());    }public static String reverse(String str,int start,int end){    char[] chars = str.toCharArray();    char temp = ' ';    for(;start < end;start++,end--){        temp = chars[start];        chars[start] = chars[end];        chars[end] = temp;    }}

2. 異常處理

要求:輸入使用者名稱、密碼、郵箱,如果資訊錄入正確,則提示註冊成功,否則生成對應的異常物件

  1. 使用者名稱長度為2或3或4
  2. 密碼長度為6,並且要求全是數字
  3. 郵箱中包含@和.符號,並且@要在.的前面

編寫一個驗證方法userRegister

public static void main(String[] args) {    Scanner scanner = new Scanner(System.in);    do {        System.out.print("請輸入使用者名稱");        String name = scanner.next();        System.out.print("請輸入密碼");        String pwd = scanner.next();        System.out.print("請輸入郵箱");        String email = scanner.next();        try {            userRegister(name,pwd,email);            System.out.println("註冊成功");            return;        } catch (Exception e) {            System.out.println(e.getMessage());            return;        }    }while(true);}public static void userRegister(String name ,String pwd ,String email){        //第一關 使用者名稱    if(!(name.length() >=2 && name.length() <= 4)){        throw new RuntimeException("賬戶名長度要在2到4之間");    }        //第二關 密碼 這裡出現了要判斷字元是否為數字,程式碼太長,不便於寫在這,        //我們封裝成一個方法,專門用來判斷是不是數字,然後在這裡呼叫它    if(!(pwd.length() == 6 && isDigital(pwd))){        throw new RuntimeException("密碼必須為數字組合");    }        //第三關 郵箱    int i = email.indexOf("@");    int j = email.indexOf(".");    if(!(i >0 && j > i)){        throw new RuntimeException("郵箱@和.的格式不對");    }}public static boolean isDigital(String pwd){    for (int i = 0; i < pwd.length(); i++) {        if(Character.isDigit(pwd.charAt(i))){            return true;        }    }        return false;}

3. String_split

要求:輸入形式為:"Willian Jefferson Clinton",輸出形式為:Clinton,Willian .J

public static void main(String[] args) {    printName("Willian Jefferson Clinton");}public static void printName(String str){    if(str == null){        System.out.println("不能為空");        return;    }    String[] names = str.split(" ");    if(!(names.length == 3)){        //(names.length != 3)        System.out.println("輸入的字串格式不對");        return;    }        //System.out.println(names[2]+","+names[0]+" ."+names[1].charAt(0));    String format = String.format("%s,%s.%c",names[2],names[0],names[1].toUpperCase().charAt(0));        System.out.println(format);   }