課程地址:https://www.imooc.com/learn/110javascript
處理:警告、錯誤日誌記錄等等java
多重catch數組
(1)順序:安全
(2)善後處理app
練習:框架
test2:dom
test3:性能
複製2學習
修改ui
三個例子主要看執行順序
寫一個含參的構造器
增長一個無參的構造器
簡便的方法:
在程序開發中字符串無處不在,如用戶登錄時輸入的用戶名、密碼等使用的就是字符串。其實,在前面的章節中咱們就已經使用了字符串,例如咱們在控制檯中輸出的 "Hello World" 、 "imooc" 、"愛慕課"等。
在 Java 中,字符串被做爲 String 類型的對象處理。 String 類位於 java.lang 包中。默認狀況下,該包被自動導入全部的程序。
建立 String 對象的方法:
String 對象建立後則不能被修改,是不可變的,所謂的修改實際上是建立了新的對象,所指向的內存空間不一樣。以下所示:
運行結果:
結合上面的代碼,關於字符串小夥伴們必須須要瞭解滴:
2.1.一、 經過 String s1="愛慕課"; 聲明瞭一個字符串對象, s1 存放了到字符串對象的引用,在內存中的存放引用關係以下圖所示:
而後經過 s1="歡迎來到:"+s1; 改變了字符串 s1 ,其實質是建立了新的字符串對象,變量 s1 指向了新建立的字符串對象,以下圖所示:
2.1.二、 一旦一個字符串在內存中建立,則這個字符串將不可改變。若是須要一個能夠改變的字符串,咱們可使用StringBuffer或者StringBuilder(後面章節中會講到)。
2.1.三、 每次 new 一個字符串就是產生一個新的對象,即使兩個字符串的內容相同,使用 」==」 比較時也爲 」false」 ,若是隻需比較內容是否相同,應使用 」equals()」 方法(前面條件運算符章節講過哦~~)
String 類提供了許多用來處理字符串的方法,例如,獲取字符串長度、對字符串進行截取、將字符串轉換爲大寫或小寫、字符串分割等,下面咱們就來領略它的強大之處吧。
String 類的經常使用方法:
結合代碼來熟悉一下方法的使用:
運行結果:
友情提示:
1. 字符串 str 中字符的索引從0開始,範圍爲 0 到 str.length()-1
2. 使用 indexOf 進行字符或字符串查找時,若是匹配返回位置索引;若是沒有匹配結果,返回 -1
3. 使用 substring(beginIndex , endIndex) 進行字符串截取時,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符
針對如此繁雜的方法,推薦你們一個學習技巧:好記性不如爛筆頭!多看的同時必定要多敲哦~~
public class HelloWorld { public static void main(String[] args) { // Java文件名 String fileName = "HelloWorld.java"; // 郵箱 String email = "laurenyang@imooc.com"; // 判斷.java文件名是否正確:合法的文件名應該以.java結尾 /* 參考步驟: 一、獲取文件名中最後一次出現"."號的位置 二、根據"."號的位置,獲取文件的後綴 三、判斷"."號位置及文件後綴名 */ //獲取文件名中最後一次出現"."號的位置 int index = fileName.lastIndexOf("."); // 獲取文件的後綴 String prefix =fileName.substring(index+1,fileName.length()); // 判斷必須包含"."號,且不能出如今首位,同時後綴名爲"java" if ( index!=-1 && index > 0 && prefix.equals("java") ) { System.out.println("Java文件名正確"); } else { System.out.println("Java文件名無效"); } // 判斷郵箱格式是否正確:合法的郵箱名中至少要javascript:;包含"@", 而且"@"是在"."以前 /* 參考步驟: 一、獲取文件名中"@"符號的位置 二、獲取郵箱中"."號的位置 三、判斷必須包含"@"符號,且"@"必須在"."以前 */ // 獲取郵箱中"@"符號的位置 int index2 = email.indexOf("@"); // 獲取郵箱中"."號的位置 int index3 = email.indexOf('.'); // 判斷必須包含"@"符號,且"@"必須在"."以前 if (index2 != -1 && index3 > index2) { System.out.println("郵箱格式正確"); } else { System.out.println("郵箱格式無效"); } } }
咱們繼續來看 String 類經常使用的方法,以下代碼所示:
運行結果:
那麼,「==」 和 equals() 有什麼區別呢?
==: 判斷兩個字符串在內存中首地址是否相同,即判斷是不是同一個字符串對象
equals(): 比較存儲在兩個字符串對象中的內容是否一致
PS:字節是計算機存儲信息的基本單位,1 個字節等於 8 位, gbk 編碼中 1 個漢字字符存儲須要 2 個字節,1 個英文字符存儲須要 1 個字節。因此咱們看到上面的程序運行結果中,每一個漢字對應兩個字節值,如「學」對應 「-47 -89」 ,而英文字母 「J」 對應 「74」 。同時,咱們還發現漢字對應的字節值爲負數,緣由在於每一個字節是 8 位,最大值不能超過 127,而漢字轉換爲字節後超過 127,若是超過就會溢出,以負數的形式顯示。(關於編碼,咱們在後面課程中會詳細介紹,小小期待哦~~)
public class HelloWorld { public static void main(String[] args) { // 定義一個字符串 String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd"; // 出現次數 int num = 0; // 循環遍歷每一個字符,判斷是不是字符 a ,若是是,累加次數 for (int i = 0; i < s.length(); i++ ) { // 獲取每一個字符,判斷是不是字符a if ( s.charAt(i) == 'a' ) { // 累加統計次數 num++; } } System.out.println("字符a出現的次數:" + num); } }
在Java中,除了可使用 String 類來存儲字符串,還可使用 StringBuilder 類或 StringBuffer 類存儲字符串,那麼它們之間有什麼區別呢?
String 類具備是不可變性。如
從運行結果中咱們能夠看到,程序運行時會額外建立一個對象,保存 "helloworld"。當頻繁操做字符串時,就會額外產生不少臨時變量。使用 StringBuilder 或 StringBuffer 就能夠避免這個問題。至於 StringBuilder 和StringBuffer ,它們基本類似,不一樣之處,StringBuffer 是線程安全的,而 StringBuilder 則沒有實現線程安全功能,因此性能略高。所以通常狀況下,若是須要建立一個內容可變的字符串對象,應優先考慮使用 StringBuilder 類。
那麼如何定義 StringBuilder 類的對象呢? 咱們來看下面的代碼:
運行結果: imooc
public class HelloWorld { public static void main(String[] args) { // 建立一個StringBuilder對象,用來存儲字符串 StringBuilder hobby=new StringBuilder("愛慕課"); System.out.println(hobby); } }
StringBuilder 類提供了不少方法來操做字符串:
例如:在下面的示例代碼中,建立了 StringBuilder 對象,用來存儲字符串,並對其作了追加和插入操做。這些操做修改了 str 對象的值,而沒有建立新的對象,這就是 StringBuilder 和 String 最大的區別。
public class HelloWorld { public static void main(String[] args) { // 建立一個空的StringBuilder對象 StringBuilder str =new StringBuilder(""); // 追加字符串 str.append("jaewkjldfxmopzdm"); // 從後往前每隔三位插入逗號 for(int i=str.length()-3;i>0;i=i-3){ str.insert(i,","); } // 將StringBuilder對象轉換爲String對象並輸出 System.out.print(str.toString()); } }
相信各位小夥伴們對基本數據類型都很是熟悉,例如 int、float、double、boolean、char 等。基本數據類型是不具有對象的特性的,好比基本類型不能調用方法、功能簡單。。。,爲了讓基本數據類型也具有對象的特性, Java 爲每一個基本數據類型都提供了一個包裝類,這樣咱們就能夠像操做對象那樣來操做基本數據類型。
基本類型和包裝類之間的對應關係:
包裝類主要提供了兩大類方法:
1. 將本類型和其餘基本類型進行轉換的方法
2. 將字符串和本類型及包裝類互相轉換的方法
咱們以 Integer 包裝類爲例,來看下包裝類的特性。
Integer 包裝類的構造方法:
以下代碼所示:
Integer包裝類的經常使用方法:
public class HelloWorld { public static void main(String[] args) { // 定義int類型變量,值爲86 int score1 = 86; // 建立Integer包裝類對象,表示變量score1的值 Integer score2=new Integer(score1); // 將Integer包裝類轉換爲double類型 double score3=score2.doubleValue(); // 將Integer包裝類轉換爲float類型 float score4=score2.floatValue(); // 將Integer包裝類轉換爲int類型 int score5 =score2.intValue(); System.out.println("Integer包裝類:" + score2); System.out.println("double類型:" + score3); System.out.println("float類型:" + score4); System.out.println("int類型:" + score5); } }
基本類型和包裝類之間常常須要互相轉換,以 Integer 爲例(其餘幾個包裝類的操做雷同哦):
在 JDK1.5 引入自動裝箱和拆箱的機制後,包裝類和基本類型之間的轉換就更加輕鬆便利了。
那什麼是裝箱和拆箱呢?咱們分別來看下
裝箱:把基本類型轉換成包裝類,使其具備對象的性質,又可分爲手動裝箱和自動裝箱
拆箱:和裝箱相反,把包裝類對象轉換成基本類型的值,又可分爲手動拆箱和自動拆箱
public class HelloWorld { public static void main(String[] args) { // 定義double類型變量 double a = 91.5; // 手動裝箱 Double b =new Double(a); // 自動裝箱 Double c = a; System.out.println("裝箱後的結果爲:" + b + "和" + c); // 定義一個Double包裝類對象,值爲8 Double d = new Double(87.0); // 手動拆箱 double e = d.doubleValue() ; // 自動拆箱 double f = d ; System.out.println("拆箱後的結果爲:" + e + "和" + f); } }
在程序開發中,咱們常常須要在基本數據類型和字符串之間進行轉換。
其中,基本類型轉換爲字符串有三種方法:
1. 使用包裝類的 toString() 方法
2. 使用String類的 valueOf() 方法
3. 用一個空字符串加上基本類型,獲得的就是基本類型數據對應的字符串
再來看,將字符串轉換成基本類型有兩種方法:
1. 調用包裝類的 parseXxx 靜態方法
2. 調用包裝類的 valueOf() 方法轉換爲基本類型的包裝類,會自動拆箱
PS:其餘基本類型與字符串的相互轉化這裏再也不一一列出,方法都相似
public class HelloWorld { public static void main(String[] args) { double m = 78.5; //將基本類型轉換爲字符串 String str1 =Double.toString(m); ; System.out.println("m 轉換爲String型後與整數20的求和結果爲: "+(str1+20)); String str = "180.20"; // 將字符串轉換爲基本類型 Double a =Double.parseDouble(str) ; System.out.println("str 轉換爲double型後與整數20的求和結果爲: "+(a+20)); } }
在程序開發中,常常須要處理日期和時間的相關數據,此時咱們可使用 java.util 包中的 Date 類。這個類最主要的做用就是獲取當前時間,咱們來看下 Date 類的使用:
使用 Date 類的默認無參構造方法建立出的對象就表明當前時間,咱們能夠直接輸出 Date 對象顯示當前的時間,顯示的結果以下:
其中, Wed 表明 Wednesday (星期三), Jun 表明 June (六月), 11 表明 11 號, CST 表明 China Standard Time (中國標準時間,也就是北京時間,東八區)。
從上面的輸出結果中,咱們發現,默認的時間格式不是很友好,與咱們平常看到的日期格式不太同樣,若是想要按指定的格式進行顯示,如 2014-06-11 09:22:30 ,那該怎麼作呢?
此時就到了 java.text 包中的 SimpleDateFormat 類大顯身手的時候了!!可使用 SimpleDateFormat 來對日期時間進行格式化,如能夠將日期轉換爲指定格式的文本,也可將文本轉換爲日期。
3.4.1. 使用 format() 方法將日期轉換爲指定格式的文本
代碼中的 「yyyy-MM-dd HH:mm:ss」 爲預約義字符串, yyyy 表示四位年, MM 表示兩位月份, dd 表示兩位日期, HH 表示小時(使用24小時制), mm 表示分鐘, ss 表示秒,這樣就指定了轉換的目標格式,最後調用 format() 方法將時間轉換爲指定的格式的字符串。
運行結果: 2014-06-11 09:55:48
3.4.2. 使用 parse() 方法將文本轉換爲日期
代碼中的 「yyyy年MM月dd日 HH:mm:ss」 指定了字符串的日期格式,調用 parse() 方法將文本轉換爲日期。
必定要注意哦:
一、 調用 SimpleDateFormat 對象的 parse() 方法時可能會出現轉換異常,即 ParseException ,所以須要進行異常處理
二、 使用 Date 類時須要導入 java.util 包,使用 SimpleDateFormat 時須要導入 java.text 包
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class HelloWorld { public static void main(String[] args) throws ParseException { // 使用format()方法將日期轉換爲指定格式的文本 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm"); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 建立Date對象,表示當前時間 Date now = new Date(); // 調用format()方法,將日期轉換爲字符串並輸出 System.out.println(sdf1.format(now) ); System.out.println(sdf2.format(now)); System.out.println(sdf3.format(now)); // 使用parse()方法將文本轉換爲日期 String d = "2014-6-1 21:05:36"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 調用parse()方法,將字符串轉換爲日期 Date date =sdf.parse(d); System.out.println(date); } }
Date 類最主要的做用就是得到當前時間,同時這個類裏面也具備設置時間以及一些其餘的功能,可是因爲自己設計的問題,這些方法卻遭到衆多批評,不建議使用,更推薦使用 Calendar 類進行時間和日期的處理。
java.util.Calendar 類是一個抽象類,能夠經過調用 getInstance() 靜態方法獲取一個 Calendar 對象,此對象已由當前日期時間初始化,即默認表明當前時間,如 Calendar c = Calendar.getInstance();
那麼如何使用 Calendar 獲取年、月、日、時間等信息呢?咱們來看下面的代碼:
其中,調用 Calendar 類的 getInstance() 方法獲取一個實例,而後經過調用 get() 方法獲取日期時間信息,參數爲須要得到的字段的值, Calendar.Year 等爲 Calendar 類中定義的靜態常量。
Calendar 類提供了 getTime() 方法,用來獲取 Date 對象,完成 Calendar 和 Date 的轉換,還可經過 getTimeInMillis() 方法,獲取此 Calendar 的時間值,以毫秒爲單位。以下所示:
運行結果:
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class HelloWorld { public static void main(String[] args) { // 建立Calendar對象 Calendar c = Calendar.getInstance(); // 將Calendar對象轉換爲Date對象 Date date = c.getTime(); // 建立SimpleDateFormat對象,指定目標格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 將日期轉換爲指定格式的字符串 String now = sdf.format(date); System.out.println("當前時間:" + now); } }
Math 類位於 java.lang 包中,包含用於執行基本數學運算的方法, Math 類的全部方法都是靜態方法,因此使用該類中的方法時,能夠直接使用類名.方法名,如: Math.round();
經常使用的方法:
經過案例咱們來認識一下他們的使用吧!!
運行結果:
PS: Math 類還提供了許多其餘方法,各位小夥伴們能夠注意關注 wiki ,查閱更多信息
public class HelloWorld { public static void main(String[] args) { // 定義一個整型數組,長度爲10 int[] nums = new int[10]; //經過循環給數組賦值 for (int i = 0; i < nums.length; i++) { // 產生10之內的隨機數 int x =(int) (Math.random ()*10); nums[i] = x;// 爲元素賦值 } // 使用foreach循環輸出數組中的元素 for (int num : nums ) { System.out.print(num + " "); } } }
5.1