JAVA入門3-1

 

課程地址:https://www.imooc.com/learn/110javascript

1、異常與異常處理

 1.1java中的異常

1.2使用try...catch...finally實現異常處理

處理:警告、錯誤日誌記錄等等java

多重catch數組

注意:

(1)順序:安全

(2)善後處理app

練習:框架

test2:dom

test3:性能

複製2學習

修改ui

三個例子主要看執行順序

1.3java中的異常拋出以及自定義異常

寫一個含參的構造器

增長一個無參的構造器

1.4java中的異常鏈

簡便的方法:

1.5經驗總結

 

小練習:借書系統

2、java中的字符串

2.1什麼是 Java 中的字符串

在程序開發中字符串無處不在,如用戶登錄時輸入的用戶名、密碼等使用的就是字符串。其實,在前面的章節中咱們就已經使用了字符串,例如咱們在控制檯中輸出的 "Hello World" 、 "imooc" 、"愛慕課"等。

在 Java 中,字符串被做爲 String 類型的對象處理。 String 類位於 java.lang 包中。默認狀況下,該包被自動導入全部的程序。

建立 String 對象的方法:

2.2Java 中字符串的不變性

String 對象建立後則不能被修改,是不可變的,所謂的修改實際上是建立了新的對象,所指向的內存空間不一樣。以下所示:

運行結果:

 

結合上面的代碼,關於字符串小夥伴們必須須要瞭解滴:

2.1.一、 經過 String s1="愛慕課"; 聲明瞭一個字符串對象, s1 存放了到字符串對象的引用,在內存中的存放引用關係以下圖所示:

而後經過 s1="歡迎來到:"+s1; 改變了字符串 s1 ,其實質是建立了新的字符串對象,變量 s1 指向了新建立的字符串對象,以下圖所示:

2.1.二、 一旦一個字符串在內存中建立,則這個字符串將不可改變。若是須要一個能夠改變的字符串,咱們可使用StringBuffer或者StringBuilder(後面章節中會講到)。

2.1.三、 每次 new 一個字符串就是產生一個新的對象,即使兩個字符串的內容相同,使用 」==」 比較時也爲 」false」 ,若是隻需比較內容是否相同,應使用 」equals()」 方法(前面條件運算符章節講過哦~~)

2.3Java 中 String 類的經常使用方法

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);
	}
}

2.4認識 Java 中的 StringBuilder 類

在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);
	}
}

2.5Java 中的 StringBuilder 類的經常使用方法

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());
	}
}

3、Java 中必須瞭解的經常使用類

3.1Java 中的包裝類

相信各位小夥伴們對基本數據類型都很是熟悉,例如 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);
	}
}

3.2Java 中基本類型和包裝類之間的轉換

基本類型和包裝類之間常常須要互相轉換,以 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);
	}
}

3.3Java 中基本類型和字符串之間的轉換

在程序開發中,咱們常常須要在基本數據類型和字符串之間進行轉換。

其中,基本類型轉換爲字符串有三種方法:

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));
	}
}

3.4使用 Date 和 SimpleDateFormat 類表示時間

在程序開發中,常常須要處理日期和時間的相關數據,此時咱們可使用 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);
	}
}

3.5Calendar 類的應用

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);
	}
}

3.6使用 Math 類操做數據

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、Java 中的集合框架(中)

5.1

相關文章
相關標籤/搜索