Oracle爲Java提供了豐富的基礎類庫,Java 8 提供了4000多個基礎類庫,熟練掌握這些基礎類庫能夠提升咱們的開發效率,固然,記住全部的API是不可能也不必的,咱們能夠經過API文檔或直接網上搜索來逐漸熟悉大部分類的功能和方法,下面咱們來學習一些基礎類庫。java
Scanner類能夠很方便的獲取用戶的鍵盤輸入,是一個基於正則表達式的文本掃描器,能夠從文件、輸入流、字符串中解析出字符串和基本類型值,構造器也是以文件、輸入流、字符串爲數據源進行構造,主要有兩種方法:正則表達式
hasNextXxx():是否還有下一個Xxx類型輸入項。數組
//鍵盤輸入 Scanner scanner = new Scanner(System.in); //回車做爲分隔符 scanner.useDelimiter("\n"); while (scanner.hasNext()) { System.out.println(scanner.next()); }
默認使用空白(空格、tab空白、回車)來進行項之間的分隔符。咱們也能夠直接按照行來進行分隔,調用下面方法:安全
hasNextLineapp
nextLinedom
Scanner 還能夠讀取文件輸入工具
try { Scanner scannerfile=new Scanner(new File("123.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); }
學習
//鍵盤輸入 Scanner scanner = new Scanner(System.in); //回車做爲分隔符 scanner.useDelimiter("\n"); while (scanner.hasNext()) { System.out.println(scanner.next()); } try { Scanner scannerfile=new Scanner(new File("123.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); }
測試
Runtime runtime = Runtime.getRuntime(); System.out.println("處理器數量:" + runtime.availableProcessors()); System.out.println("可用最大內存數:"+runtime.maxMemory()); System.out.println("空閒內存:"+runtime.freeMemory()); System.out.println("總內存數:"+runtime.totalMemory());
Object 是全部類、數組、枚舉類的父類,任何類型均可以賦給Object,有如下經常使用的一些方法:ui
boolean equals(Object obj) 判斷指定對象與該對象是否相等。
void finalize() 垃圾回收器調用此方法來清理對象資源。
Class<?> getClass() 返回該對象運行時類。
int hashCode() 返回該對象的hash值。
Object還有控制線程的幾個方法,wait()、notify()、notifyAll()。
Java 7 以後新增了Objects方法,裏面提供了工具方法來操做對象,這些工具方法大可能是空指針安全的,使用更安全。
字符串就是一連串字符序列,Java提供了String、StringBuffer、StringBuilder 三個類進行字符串封裝和處理。其中StringBuffer、StringBuilder基本類似,只是StringBuffer線程安全而StringBuilder線程不安全。
String類是不可變類,一旦建立,就不可改變,直至被銷燬。String類的不可變性,後面有機會再詳解。
String類提供了不少構造器:
String也提供了大量的方法來操做字符串對象,咱們學習一些經常使用的方法:
String s = new String("abcdefg"); //獲取字符串中指定位置的字符 System.out.println(s.charAt(1)); //比較字符串的大小 System.out.println(s.compareTo("adasd")); //將該字符串與str鏈接在一塊兒 s.concat("higk"); System.out.println(s); //與StringBuffer對象比較,值相等則返回true System.out.println(s.contentEquals(new StringBuffer("abcd"))); //將字符數組連綴成字符串 System.out.println(String.copyValueOf(new char[]{'a', 'b'})); //將字符數組的子數組連綴成字符串 System.out.println((String.copyValueOf(new char[]{'a', 'b', 'c', 'd', 'e'}, 2, 3))); //將字符串與指定對象比較 System.out.println(s.equals("abcdefg")); //忽略大小寫字符串與指定對象比較 System.out.println(s.equalsIgnoreCase("ABcdefg")); //將string對象轉換成Byte數組 byte[] bytes = s.getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } char[] s1 = new char[]{'晚', '安', '!', '世', '界'}; String s2 = new String("。!?"); //將字符串從srcBegin開始,到srcEnd結束複製到字符串數組串中,dstBegin爲字符串數組的初始位置 s2.getChars(0, 2, s1, 2); for (int i = 0; i < s1.length; i++) { System.out.println(s1[i]); } //查詢字符在字符串中第一次出現的位置 System.out.println(s.indexOf('b')); //查詢字符在字符串中從fromIndex後第一次出如今的位置 System.out.println(s.indexOf('b', 2)); //查詢子字符串在字符串中第一次出現的位置 System.out.println(s.indexOf("bc")); //查詢子字符在字符串中從fromIndex後第一次出如今的位置 System.out.println(s.indexOf("bc", 2)); //查詢字符在字符串中最後一次出現的位置 System.out.println(s.lastIndexOf('b')); //查詢字符在字符串中從fromIndex後最後一次出如今的位置 System.out.println(s.lastIndexOf('b', 2)); //查詢子字符串在字符串中最後一次出現的位置 System.out.println(s.lastIndexOf("bc")); //查詢子字符在字符串中從fromIndex後最後一次出如今的位置 System.out.println(s.lastIndexOf("bc", 2)); //字符串長度 System.out.println(s.length()); //替換字符串 s.replace('a', 'b'); System.out.println(s); //對象是否以某字符串結尾 System.out.println(s.startsWith("ab")); //String 對象是以某字串結尾 System.out.println(s.endsWith("fg")); //獲取從beginIndex位置開始到結束的子字符串 String substring = s.substring(4); System.out.println(substring); //獲取從beginIndex位置開始到endIndex結束的子字符串 String substring1 = s.substring(4, 6); System.out.println(substring1); char[] chars = s.toCharArray(); //轉換成char數組 for (int i = 0; i <chars.length ; i++) { System.out.println(chars[i]); } //將字符串轉換成小寫 String lowerCase = s.toLowerCase(); System.out.println(lowerCase); //將字符串轉換成大寫 String upperCase = s.toUpperCase(); System.out.println(upperCase);
因爲String的不可變性,頻繁操做String時會產生大量的臨時變量,這時咱們可使用StringBuilder和StringBuffer,兩個類的用戶基本一致,在不須要線程安全時,建議使用StringBuilder。
StringBuilder sb=new StringBuilder(); //追加 sb.append("java"); System.out.println(sb); //插入 sb.insert(0,"hello "); System.out.println(sb); //替換 sb.replace(5,6,","); System.out.println(sb); //反轉 sb.reverse(); System.out.println(sb); //長度與容量 System.out.println(sb.length()+ sb.capacity());
//返回小於目標數的最大整數 System.out.println(Math.floor(-1.57)); //返回大於目標數的最小整數 System.out.println(Math.ceil(1.57)); //四捨五入 System.out.println(Math.round(2.3)); //取絕對值 System.out.println(Math.abs(-4.6)); //取最大數 System.out.println(Math.max(1,3));
Random random = new Random(); //生成一個int範圍內的隨機數 System.out.println(random.nextInt()); //生成0-30範圍的隨機數 System.out.println(random.nextInt(30)); //生成0.0-1.0 的隨機數 System.out.println(random.nextDouble());
ava提供了Date和Calendar來處理日期和時間,但Date不只不支持國際化,並且不一樣屬性也使用了先後矛盾的偏移量,Java 8 又提供了全新的日期時間庫。
Date 如今在用的有兩個構造器:
Date() :生成一個表明當前日期時間的date對象
Date(long date):指定的long型整數來生成一個Date對象
Date 還在使用的方法也不多:
Date date = new Date();
Date date1 = new Date(System.currentTimeMillis()+100);
//測試該日期是否在指定日期以後
System.out.println(date.after(date1));
//比較日期大小
System.out.println(date.compareTo(date1));
Date類設計的並很差,對日期的操做推薦使用Calendar。
Calendar calendar = Calendar.getInstance(); Date date2 = calendar.getTime(); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date2);
Calendar 類提供了大量訪問、修改日期時間的方法,經常使用方法以下:
//給指定的字段增長或者減去時間量,若是指定量超過最大值,則進位 calendar.add(Calendar.YEAR,1); //獲取指定的字段值 System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH)); System.out.println(calendar.get(Calendar.DATE)); //設置日期值 calendar.set(2003,10,2,10,50,10); //給指定的字段增長或者減去時間量,若是指定量超過最大值,不進位 calendar.roll(Calendar.YEAR,13);
Java 8 提供了java.time 包來處理日期和時間,經常使用的類:
Clock:獲取指定時區的當前日期、時間。
Duration:表明持續時間,能夠方便的獲取一段時間。
Instant:表明具體時刻,能夠精確到納秒。
LocalDate:該類表明不帶時區的日期。
LocalTime:該類表明不帶時區的時間。
LocalDateTime:該類表明不帶時區的日期、時間。
MonthDay:該類表明月日。
Year:表明年。
YearMonth:表明年月。
正則表達式是強大的字符串處理工具,能夠對字符串進行查找、提取、分隔、替換等操做。
Java提供了Pattern和Matcher來使用正則表達式
//將字符串編譯成Pattern對象 Pattern pattern = Pattern.compile("a*b"); //使用Pattern建立Matcher對象 Matcher matcher = pattern.matcher("aaaaab"); System.out.println(matcher.matches()); //只能使用一次,效率不高 Pattern.matches("a*b", "aaabbb"); String s = "XXX:13892329111,XXX:18922121231,XXX:13824322341"; Matcher matcher1 = Pattern.compile("1\\d{10}").matcher(s); //返回目標字符串中是否包含匹配的字串 while (matcher1.find()) { //返回上一次匹配的字串 System.out.println(matcher1.group()); }
//將日期轉換成固定格式 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); System.out.println(simpleDateFormat.format(date)); //日期字符串 String str = "14###三月##21"; SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("y###MMM##d"); //將日期字符串解析成日期,主要格式要匹配的上,否則會報錯 System.out.println(simpleDateFormat.format(simpleDateFormat1.parse(str)));
咱們能夠經過常量來建立格式化器,也可使用不一樣風格的枚舉值來建立
DateTimeFormatter[] formatters=new DateTimeFormatter[]{ //常量建立 DateTimeFormatter.ISO_DATE_TIME, DateTimeFormatter.ISO_LOCAL_DATE, DateTimeFormatter.ISO_DATE, //枚舉值建立 DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM), //模式字符串 DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd") }; LocalDateTime localDate = LocalDateTime.now(); for (int i = 0; i <formatters.length ; i++) { //兩種方式格式化日期 System.out.println(formatters[i].format(localDate)); System.out.println(localDate.format(formatters[i])); }
DateTimeFormatter 也能夠將字符串直接轉成日期,用法與SimpleDateFormat 相同。