Java 方法、時間日期獲取比較格式化、正則表達式、異常處理

1.Java 方法

Java方法是語句的集合,它們在一起執行一個功能。

方法是解決一類問題的步驟的有序組合
方法包含于類或對象中
方法在程序中被創建,在其他地方被引用

以我們經常使用到的 System.out.println() 為例

println() 是一個方法。
System 是系統類。
out 是標準輸出對象。
方法的優點
1. 使程序變得更簡短而清晰。
2. 有利于程序維護。
3. 可以提高程序開發的效率。
4. 提高了代碼的重用性。
方法的命名規則
1. 必須以字母、'_'或'$'開頭。
2. 可以包括數字,但不能以它開頭。
方法的定義
一般情況下,定義一個方法包含以下語法:

修飾符 返回值類型 方法名(參數類型 參數名){
    ...
    方法體
    ...
    return 返回值;
}
Java方法.png
修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的訪問類型。

返回值類型 :方法可能會返回值。returnValueType 是方法返回值的數據類型。
有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void。

方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。

參數類型:參數像是一個占位符。當方法被調用時,傳遞值給參數。
這個值被稱為實參或變量。參數列表是指方法的參數類型、順序和參數的個數。
參數是可選的,方法可以不包含任何參數。

方法體:方法體包含具體的語句,定義該方法的功能。

注意: 在一些其它語言中方法指過程和函數。一個返回非void類型返回值的方法稱為函數;一個返回void類型返回值的方法叫做過程。

/** 返回兩個整型變量數據的較大值 */
public static int max(int num1, int num2) {
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}
方法調用

Java 支持兩種調用方法的方式,根據方法是否返回值來選擇。

//有返回值
int larger = max(30, 40);
//無返回值
System.out.println("Java 從入門到放棄! --楚簡約");
public class TestMax {
   /** 主方法 */
   public static void main(String[] args) {
      int i = 5;
      int j = 2;
      int k = max(i, j);
      System.out.println( i + " 和 " + j + " 比較,最大值是:" + k);
   }
 
   /** 返回兩個整數變量較大的值 */
   public static int max(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;
 
      return result; 
   }
}
構造方法

當一個對象被創建時候,構造方法用來初始化該對象。構造方法和它所在類的名字相同,但構造方法沒有返回值。
通常會使用構造方法給一個類的實例變量賦初值,或者執行其它必要的步驟來創建一個完整的對象。

不管你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個默認構造方法,它把所有成員初始化為0。

沒有自定義構造方法時,系統會調用默認構造方法。
一旦你定義了自己的構造方法,默認構造方法就會失效。

// 一個簡單的構造函數
class MyClass {
  int x;
 
  // 以下是構造函數
  MyClass() {
    x = 10;
  }
}

2.Java 時間日期獲取、比較、格式化

java.util 包提供了 Date 類來封裝當前的日期和時間。 Date 類提供兩個構造函數來實例化 Date 對象。

import java.util.Date;

第一個構造函數使用當前日期和時間來初始化對象。
Date( )

第二個構造函數接收一個參數,該參數是從1970年1月1日起的毫秒數。
Date(long millisec)
獲取當前日期時間
Java中獲取當前日期和時間很簡單
使用 Date 對象的 toString() 方法來打印當前日期和時間,如下所示:
import java.util.Date;
  
public class DateDemo {
   public static void main(String args[]) {
       // 初始化 Date 對象
       Date date = new Date();
        
       // 使用 toString() 函數顯示日期時間
       System.out.println(date.toString());
   }
}
以上實例編譯運行結果如下:
Fri Jul 07 15:39:42 CST 2017
日期比較

Java使用以下三種方法來比較兩個日期:

1.使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然后比較這兩個值。

2.使用方法 before(),after() 和 equals()。
例如,一個月的12號比18號早,
則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。

3.使用 compareTo() 方法,它是由 Comparable 接口定義的,Date 類實現了這個接口。
格式化日期 SimpleDateFormat

SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何用戶自定義日期時間格式來運行。例如:

SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

import java.util.*;
import java.text.*;
 
public class DateDemo {
   public static void main(String args[]) {
 
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
 
      System.out.println("Current Date: " + ft.format(dNow));
   }
}

yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是時、分、秒。
注意:有的格式大寫,有的格式小寫,例如 MM 是月份,mm 是分;HH 是 24 小時制,而 hh 是 12 小時制。

以上實例編譯運行結果如下:
Current Date: Sun 2014.07.18 at 14:14:09 PM PDT
使用printf格式化日期

printf 方法可以很輕松地格式化時間和日期。使用兩個字母格式,它以 %t 開頭并且以下面表格中的一個字母結尾。


日期轉換符.png

更多 printf 解析可以參見:Java 格式化輸出 printf 例子

import java.util.Date;
 
public class DateDemo {
 
  public static void main(String args[]) {
     // 初始化 Date 對象
     Date date = new Date();
 
     //c的使用  
    System.out.printf("全部日期和時間信息:%tc%n",date);          
    //f的使用  
    System.out.printf("年-月-日格式:%tF%n",date);  
    //d的使用  
    System.out.printf("月/日/年格式:%tD%n",date);  
    //r的使用  
    System.out.printf("HH:MM:SS PM格式(12時制):%tr%n",date);  
    //t的使用  
    System.out.printf("HH:MM:SS格式(24時制):%tT%n",date);  
    //R的使用  
    System.out.printf("HH:MM格式(24時制):%tR",date);  
  }
}

以上實例編譯運行結果如下:
全部日期和時間信息:星期一 九月 10 10:43:36 CST 2012  
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM格式(12時制):10:43:36 上午  
HH:MM:SS格式(24時制):10:43:36  
HH:MM格式(24時制):10:43  

休眠

Thread.sleep(1000*3);   // 休眠3秒
Calendar類

Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要復雜一些。

Calendar類是一個抽象類,在實際使用時實現特定的子類的對象,創建對象的過程對程序員來說是透明的,只需要使用getInstance方法創建即可。

//創建一個代表系統當前日期的Calendar對象
Calendar c = Calendar.getInstance();//默認是當前日期
//創建一個代表2020年6月12日的Calendar對象
Calendar c1 = Calendar.getInstance();
c1.set(2020, 6 - 1, 12);

Set設置

Calendar c1 = Calendar.getInstance();

調用public final void set(int year,int month,int date)
c1.set(2010, 6 - 1, 12);//把Calendar對象c1的年月日分別設這為:2010、6、12

調用public void set(int field,int value)
c1.set(Calendar.DATE,10);
Calendar類對象字段類型.png

Add設置

Calendar c1 = Calendar.getInstance();

把c1對象的日期加上10,也就是c1也就表示為10天后的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, 10);

把c1對象的日期減去10,也就是c1也就表示為10天前的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, -10);
Calendar類對象信息的獲得
Calendar c1 = Calendar.getInstance();
// 獲得年份
int year = c1.get(Calendar.YEAR);
// 獲得月份
int month = c1.get(Calendar.MONTH) + 1;
// 獲得日期
int date = c1.get(Calendar.DATE);
// 獲得小時
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 獲得分鐘
int minute = c1.get(Calendar.MINUTE);
// 獲得秒
int second = c1.get(Calendar.SECOND);
// 獲得星期幾(注意(這個與Date類是不同的):1代表星期日、2代表星期1、3代表星期二,以此類推)
int day = c1.get(Calendar.DAY_OF_WEEK);

3.正則表達式

正則表達式定義了字符串的模式。
正則表達式可以用來搜索、編輯或處理文本。
正則表達式并不僅限于某一種語言,但是在每種語言中有細微的差別。

java.util.regex 包主要包括以下三個類:

Pattern 類:
pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。
要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern 對象。
該方法接受一個正則表達式作為它的第一個參數。

Matcher 類:
Matcher 對象是對輸入字符串進行解釋和匹配操作的引擎。
與Pattern 類一樣,Matcher 也沒有公共構造方法。
你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。

PatternSyntaxException:
PatternSyntaxException 是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。

以下實例中使用了正則表達式 .runoob. 用于查找字符串中是否包了 runoob 子串:

import java.util.regex.*;
 
class RegexExample1{
   public static void main(String args[]){
      String content = "I am noob " +
        "from runoob.com.";
 
      String pattern = ".*runoob.*";
 
      boolean isMatch = Pattern.matches(pattern, content);
      System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
   }
}

實例輸出結果為:
字符串中是否包含了 'runoob' 子字符串? true

更多關于 Java正則表達式應用

4.異常處理

捕獲異常

使用 try 和 catch 關鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發生的地方。
try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的語法如下:

try
{
   // 程序代碼
}catch(ExceptionName e1)
{
   //Catch 塊
}

下面的例子中聲明有兩個元素的一個數組,當代碼試圖訪問數組的第三個元素的時候就會拋出一個異常。

// 文件名 : ExcepTest.java
import java.io.*;
public class ExcepTest{
 
   public static void main(String args[]){
      try{
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      }catch(ArrayIndexOutOfBoundsException e){
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}
以上代碼編譯運行輸出結果如下:
Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block
多重捕獲塊

一個 try 代碼塊后面跟隨多個 catch 代碼塊的情況就叫多重捕獲。
多重捕獲塊的語法如下所示:

try{
   // 程序代碼
}catch(異常類型1 異常的變量名1){
  // 程序代碼
}catch(異常類型2 異常的變量名2){
  // 程序代碼
}catch(異常類型2 異常的變量名2){
  // 程序代碼
}
throws/throw 關鍵字

如果一個方法沒有捕獲一個檢查性異常,那么該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。
也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的。
下面方法的聲明拋出一個 RemoteException 異常:

import java.io.*;
public class className
{
  public void deposit(double amount) throws RemoteException
  {
    // Method implementation
    throw new RemoteException();
  }
  //Remainder of class definition
}
finally關鍵字

finally 關鍵字用來創建在 try 代碼塊后面執行的代碼塊。
無論是否發生異常,finally 代碼塊中的代碼總會被執行。
在 finally 代碼塊中,可以運行清理類型等收尾善后性質的語句。
finally 代碼塊出現在 catch 代碼塊最后,語法如下:

try{
  // 程序代碼
}catch(異常類型1 異常的變量名1){
  // 程序代碼
}catch(異常類型2 異常的變量名2){
  // 程序代碼
}finally{
  // 程序代碼
}
通用異常

在Java中定義了兩種類型的異常和錯誤。

JVM(Java虛擬機) 異常:由 JVM 拋出的異常或錯誤。
例如:
NullPointerException 類,
ArrayIndexOutOfBoundsException 類,
ClassCastException 類。

程序級異常:由程序或者API程序拋出的異常。
例如 
IllegalArgumentException 類,
IllegalStateException 類。

最后附上全棧開發工程師困境, 我們都在不斷趕路,望不到出路,在失望中尋找偶爾的滿足 。
弱弱的對自己說一句"加油,堅持下來一切皆有可能" :


全棧開發工程師困境.png

我是楚簡約,感謝您的閱讀,

喜歡就點個贊唄,“?喜歡”,

鼓勵又不花錢,你在看,我就繼續寫~

非簡書用戶,可以點右上角的三個“...”,然后"在Safari中打開”,就可以點贊咯~


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,721評論 18 399
  • 轉自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,571評論 3 93
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,665評論 25 708
  • 庭前芍藥妖無格, 池上芙蕖凈少情。 惟有牡丹真國色, 花開時節動京城。 ——劉禹錫《賞牡丹》 今天,六朝古都洛陽,...
    張永剛閱讀 663評論 1 0
  • 爬到半山腰的時候,努爾丁往地上一坐。罵罵咧咧了起來,他說你們走吧,我不干了。他那兩個外國朋友也就坐著陪他,我開著玩...
    一沭閱讀 147評論 0 0