Java基礎之常用對象(二)

Calendar

1.Calendar概述

Calendar 類是一個抽象類,它爲特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日曆字段之間的轉換提供了一些方法,併爲操作日曆字段(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000)的偏移量。

2. 相關方法

獲得實例對象的方法:

static Calendar getInstance()
使用默認時區和語言環境獲得一個日曆。

static Calendar getInstance(Locale aLocale)
使用默認時區和指定語言環境獲得一個日曆。
static Calendar getInstance(TimeZone zone)
使用指定時區和默認語言環境獲得一個日曆。
static Calendar getInstance(TimeZone zone, Locale aLocale)
使用指定時區和語言環境獲得一個日曆。

獲取指定字段的方法:

int get(int field)
返回給定日曆字段的值。

日曆字段對應表:

關於時間:

static int AM
指示從午夜到中午之前這段時間的 AM_PM 字段值。
static int AM_PM
get 和 set 的字段數字,指示 HOUR 是在中午之前還是在中午之後。
static int PM
指示從中午到午夜之前這段時間的 AM_PM 字段值。
static int HOUR
get 和 set 的字段數字,指示上午或下午的小時。
static int HOUR_OF_DAY
get 和 set 的字段數字,指示一天中的小時。
static int MILLISECOND
get 和 set 的字段數字,指示一秒中的毫秒。
static int MINUTE
get 和 set 的字段數字,指示一小時中的分鐘。
static int SECOND
get 和 set 的字段數字,指示一分鐘中的秒。
protected long time
日曆的當前設置時間,以毫秒爲單位,表示自格林威治標準時間 1970 年 1月 1 日 0:00:00 後經過的時間。

關於年月日:

static int YEAR
指示年的 get 和 set 的字段數字。
static int DATE
get 和 set 的字段數字,指示一個月中的某天。
static int DAY_OF_MONTH
get 和 set 的字段數字,指示一個月中的某天。
static int DAY_OF_WEEK
get 和 set 的字段數字,指示一個星期中的某天。
static int DAY_OF_YEAR
get 和 set 的字段數字,指示當前年中的天數。

關於月份:

static int JANUARY
指示在格里高利曆和羅馬儒略曆中一年中第一個月的 MONTH 字段值。
static int FEBRUARY
指示在格里高利曆和羅馬儒略曆中一年中第二個月的 MONTH 字段值。
static int MARCH
指示在格里高利曆和羅馬儒略曆中一年中第三個月的 MONTH 字段值。
static int APRIL
指示在格里高利曆和羅馬儒略曆中一年中第四個月的 MONTH 字段值。
static int MAY
指示在格里高利曆和羅馬儒略曆中一年中第五個月的 MONTH 字段值。
static int JUNE
指示在格里高利曆和羅馬儒略曆中一年中第六個月的 MONTH 字段值。
static int JULY
指示在格里高利曆和羅馬儒略曆中一年中第七個月的 MONTH 字段值。
static int AUGUST
指示在格里高利曆和羅馬儒略曆中一年中第八個月的 MONTH 字段值。
static int SEPTEMBER
指示在格里高利曆和羅馬儒略曆中一年中第九個月的 MONTH 字段值。
static int OCTOBER
指示在格里高利曆和羅馬儒略曆中一年中第十個月的 MONTH 字段值。
static int NOVEMBER
指示在格里高利曆和羅馬儒略曆中一年中第十一個月的 MONTH 字段值。
static int DECEMBER
指示在格里高利曆和羅馬儒略曆中一年中第十二個月的 MONTH 字段值。
static int UNDECIMBER
指示一年中第十三個月的 MONTH 字段值。

static int MONTH
指示月份的 get 和 set 的字段數字。


關於星期:

static int MONDAY
指示星期一的 DAY_OF_WEEK 字段值。
static int TUESDAY
指示星期二的 DAY_OF_WEEK 字段值。
static int WEDNESDAY
指星期三的 DAY_OF_WEEK 字段值。
static int THURSDAY
指示星期四的 DAY_OF_WEEK 字段值。
static int FRIDAY
指示星期五的 DAY_OF_WEEK 字段值。
static int SATURDAY
指示 Saturday 的 DAY_OF_WEEK 字段值。
static int SUNDAY
指示星期日的 DAY_OF_WEEK 字段值。

static int WEEK_OF_MONTH
get 和 set 的字段數字,指示當前月中的星期數。
static int WEEK_OF_YEAR
get 和 set 的字段數字,指示當前年中的星期數。
static int DAY_OF_WEEK_IN_MONTH
get 和 set 的字段數字,指示當前月中的第幾個星期。


其他字段:

static int ALL_STYLES
指示所有風格名稱的 getDisplayNames 的風格說明符,比如 “January” 和 “Jan”。

protected boolean areFieldsSet
如果 fields[] 與當前的設置時間同步,則返回 true。

static int ERA
指示年代的 get 和 set 的字段數字,比如羅馬儒略曆中的 AD 或 BC。

static int FIELD_COUNT
get 和 set 可識別的不同字段的數量。

protected int[] fields
此日曆當前設置時間的日曆字段值。

protected boolean[] isSet
通知是否設置了該日曆某一指定日曆字段的標誌。

static int LONG
指示長名稱的 getDisplayName 和 getDisplayNames 的風格說明符,比如 “January”。

static int SHORT
指示短名稱的 getDisplayName 和 getDisplayNames 的風格說明符,比如 “Jan”。

需求描述:通過Calendar對象輸出系統當前日期

示例代碼:

import java.util.Calendar;

public class CalendarDemo {

    public static void main(String[] args) {
        //使用Calendar的靜態方法獲取一個實例
        Calendar cr=Calendar.getInstance();
        //通過字段獲取年份
        int year=cr.get(Calendar.YEAR);
        //通過字段獲取月份
        int month=cr.get(Calendar.MONTH)+1;//程序中月份值從0開始,因此加1
        //通過字段獲取天數
        int day=cr.get(Calendar.DAY_OF_MONTH);
        System.out.println(year+"年"+month+"月"+day+"日");
    }

}

程序運行結果:

2015年12月29日

說明:在java中星期天爲每週的第一天,並且月份的值從0開始。在使用返回值時需要多加註意。

可以看到輸出的結果中漢字和數字混雜,不夠美觀。我們可以使用查表法優化該程序,即通過返回值作爲索引獲取事先建立的日期數組中的字符串

示例代碼:

import java.util.Calendar;

public class CalendarDemo {

    public static void main(String[] args) {
        //事先定義好用於查找月份的表
        String[] monthStrs={"一月","二月","三月","四月","五月","六月","七月","八月",
                "九月","十月","十一月","十二月"};
        //事先定義好用於查找星期的表
        String[] weekStrs={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

        //使用Calendar的靜態方法獲取一個實例
        Calendar cr=Calendar.getInstance();
        //通過字段獲取年份值
        int year = cr.get(Calendar.YEAR);
        // 通過字段獲取月份值
        int month = cr.get(Calendar.MONTH);//爲了方便查表,此處不再加1
        // 通過字段獲取天數
        int day = cr.get(Calendar.DAY_OF_MONTH);
        // 獲取星期值
        int dayOfWeek = cr.get(Calendar.DAY_OF_WEEK) - 1;// 程序中星期天爲每週第一天,因此減1
        System.out.println("當前日期:"+year+"年"+monthStrs[month]+day+"日"+"-"+weekStrs[dayOfWeek]);
    }

}

程序運行結果:

當前日期:2015年十二月29日-星期二

3.設置指定日曆對象的時間:

相關方法:

void set(int field, int value)
將給定的日曆字段設置爲給定值。
void set(int year, int month, int date)
設置日曆字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
void set(int year, int month, int date, int hourOfDay, int minute)
設置日曆字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second)
設置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

示例代碼:

import java.util.Calendar;

public class CalendarDemo2 {

    public static void main(String[] args) {
        Calendar cr=Calendar.getInstance();
        //設置Calendar的日期
        cr.set(2016, 1, 1);
        System.out.println("設置後:"+"年份值:"+cr.get(Calendar.YEAR)+
                "月份值:"+cr.get(Calendar.MONTH)+
                "天數值:"+cr.get(Calendar.DAY_OF_MONTH));
        //通過字段進行設置
        cr.set(Calendar.YEAR,2014);
        System.out.println("再次設置後的年份爲:"+cr.get(Calendar.YEAR));
    }

}

程序運行結果:

設置後:年份值:2016月份值:1天數值:1
再次設置後的年份爲:2014

4.通過加減時間量的方式改變日曆對象的時間

相關方法:

abstract void add(int field, int amount)
根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。

示例代碼:

import java.util.Calendar;

public class CalendarDemo3 {

    public static void main(String[] args) {
        Calendar cr=Calendar.getInstance();
        //輸出正常日期
        System.out.println("正常日期:"+cr.get(Calendar.YEAR)+"年"+
                (cr.get(Calendar.MONDAY)+1)+"月"+
                cr.get(Calendar.DAY_OF_MONTH)+"日");
        //對Calendar對象的指定字段進行增減
        cr.add(Calendar.YEAR, 0);
        cr.add(Calendar.MONTH,-1);
        cr.add(Calendar.DAY_OF_MONTH,1);
        System.out.println("經過增減後的日期:"+cr.get(Calendar.YEAR)+"年"+
                (cr.get(Calendar.MONDAY)+1)+"月"+
                cr.get(Calendar.DAY_OF_MONTH)+"日");
    }

}

程序運行結果:

正常日期:2015年12月29日
經過增減後的日期:2015年11月30日

說明:由上例可以看出,使用add方法時也可以傳入負數。


Math

1.Math概述

Math 類包含用於執行基本數學運算的方法,如初等指數、對數、平方根和三角函數。

常用靜態成員:

static double E
比任何其他值都更接近 e(即自然對數的底數)的 double 值。
static double PI
比任何其他值都更接近 pi(即圓的周長與直徑之比)的 double 值。

2.相關方法

絕對值

static double abs(double a)
返回 double 值的絕對值。
static float abs(float a)
返回 float 值的絕對值。
static int abs(int a)
返回 int 值的絕對值。
static long abs(long a)
返回 long 值的絕對值。


三角函數

static double cos(double a)
返回角的三角餘弦。
static double sin(double a)
返回角的三角正弦。
static double tan(double a)
返回角的三角正切。

static double toDegrees(double angrad)
將用弧度表示的角轉換爲近似相等的用角度表示的角。
static double toRadians(double angdeg)
將用角度表示的角轉換爲近似相等的用弧度表示的角。


冪和對數

static double exp(double a)
返回歐拉數 e 的 double 次冪的值。
static double pow(double a, double b)
返回第一個參數的第二個參數次冪的值。

static double log(double a)
返回 double 值的自然對數(底數是 e)。
static double log10(double a)
返回 double 值的底數爲 10 的對數。
static double log1p(double x)
返回參數與 1 之和的自然對數。


最值

static double max(double a, double b)
返回兩個 double 值中較大的一個。
static float max(float a, float b)
返回兩個 float 值中較大的一個。
static int max(int a, int b)
返回兩個 int 值中較大的一個。
static long max(long a, long b)
返回兩個 long 值中較大的一個。

static double min(double a, double b)
返回兩個 double 值中較小的一個。
static float min(float a, float b)
返回兩個 float 值中較小的一個。
static int min(int a, int b)
返回兩個 int 值中較小的一個。
static long min(long a, long b)
返回兩個 long 值中較小的一個。


近似值

static double nextAfter(double start, double direction)
返回第一個參數和第二個參數之間與第一個參數相鄰的浮點數。
static float nextAfter(float start, double direction)
返回第一個參數和第二個參數之間與第一個參數相鄰的浮點數。

static double rint(double a)
返回最接近參數並等於某一整數的 double 值。
static long round(double a)
返回最接近參數的 long。
static int round(float a)
返回最接近參數的 int。

static double ceil(double a)
返回最小的(最接近負無窮大)double 值,該值大於等於參數,並等於某個整數。
static double floor(double a)
返回最大的(最接近正無窮大)double 值,該值小於等於參數,並等於某個整數。


其他

static double random()
返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。
static double sqrt(double a)
返回正確舍入的 double 值的正平方根。

3.常用方法

static double ceil(double a)
返回最小的(最接近負無窮大)double 值,該值大於等於參數,並等於某個整數。
static double floor(double a)
返回最大的(最接近正無窮大)double 值,該值小於等於參數,並等於某個整數。

示例代碼:

public class MathDemo {

    public static void main(String[] args) {
        double srcNum=6.1238;
        double celTarNum=Math.ceil(srcNum);
        double flrTarNum=Math.floor(srcNum);
        System.out.println("最接近原數值的最大整數值爲"+celTarNum);
        System.out.println("最接近原數值的最小整數值爲"+flrTarNum);
    }

}

程序運行結果:

最接近原數值的最大整數值爲7.0
最接近原數值的最小整數值爲6.0

求近似值:

static long round(double a)
返回最接近參數的 long。
static int round(float a)
返回最接近參數的 int。

示例代碼:

        //部分代碼
        double srcNum=6.1238;
        float srcFloNum=6.1238f;
        long roundLongNum=Math.round(srcNum);
        int roundIntNum=Math.round(srcFloNum);
        System.out.println("最接近原數值的long值爲"+roundLongNum);
        System.out.println("最接近原數值的int值爲"+roundIntNum);

程序運行結果:
最接近原數值的long值爲6
最接近原數值的int值爲6

求冪運算:

static double pow(double a, double b)
返回第一個參數的第二個參數次冪的值

示例代碼:

        //部分代碼
        //底數
        double a=2;
        //指數
        double b=3;
        double endNum=Math.pow(a, b);
        System.out.println("2的3次冪爲:"+endNum);

程序運行結果:

2的3次冪爲:8.0

求隨機數:

static double random()
返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。

需求分析:演示生成0-9的隨機數,和1到10的隨機數

示例代碼:

        //部分代碼
        //生成0-9的隨機數
        int targetNum1=(int)(Math.random()*10);
        //生成1-10的隨機數
        int targetNum2=(int)(Math.random()*10+1);
        System.out.println("生成0-9的隨機數爲:"+targetNum1);
        System.out.println("生成1-10的隨機數爲:"+targetNum2);

程序運行結果:

生成0-9的隨機數爲:7
生成1-10的隨機數爲:10

簡單應用:給定一個小數,保留該小數小數點後兩位

public class MathDemo {

    public static void main(String[] args) {        

        double srcNum=6.989874;
        //通過round方法獲取中間值
        long midNum=Math.round(srcNum*100);
        //通過除法獲取目標值
        double endNum=midNum/100.0;
        System.out.println("保留小數後兩位後的結果爲:"+endNum); 
    }
}

程序運行結果:

保留小數後兩位後的結果爲:6.99

說明:注意在本例中必須使用100.0,而不能使用100,否則獲得的結果小數點後一定爲0

4.隨機數類Random

構造方法

Random()
創建一個新的隨機數生成器。
Random(long seed)
使用單個 long 種子創建一個新的隨機數生成器。

相關方法:

protected int next(int bits)
生成下一個僞隨機數。

boolean nextBoolean()
返回下一個僞隨機數,它是取自此隨機數生成器序列的均勻分佈的 boolean 值。

void nextBytes(byte[] bytes)
生成隨機字節並將其置於用戶提供的 byte 數組中。

double nextDouble()
返回下一個僞隨機數,它是取自此隨機數生成器序列的、在 0.0 和 1.0 之間均勻分佈的 double 值。

float nextFloat()
返回下一個僞隨機數,它是取自此隨機數生成器序列的、在 0.0 和 1.0 之間均勻分佈的 float 值。

double nextGaussian()
返回下一個僞隨機數,它是取自此隨機數生成器序列的、呈高斯(“正態”)分佈的 double 值,其平均值是 0.0,標準差是 1.0。

int nextInt()
返回下一個僞隨機數,它是此隨機數生成器的序列中均勻分佈的 int 值。
int nextInt(int n)
返回一個僞隨機數,它是取自此隨機數生成器序列的、在 0(包括)和指定值(不包括)之間均勻分佈的 int 值。

long nextLong()
返回下一個僞隨機數,它是取自此隨機數生成器序列的均勻分佈的 long 值。

void setSeed(long seed)
使用單個 long 種子設置此隨機數生成器的種子。

示例代碼:

import java.util.Random;

public class RandomDemo {

    public static void main(String[] args) {
        //實例化Random對象
        Random rm=new Random();
        int num1=rm.nextInt(10);
        float num2=rm.nextFloat();
        long num3=rm.nextLong();
        boolean bn=rm.nextBoolean();
        System.out.println("隨機生成的int值爲:"+num1);
        System.out.println("隨機生成的float值爲:"+num2);
        System.out.println("隨機生成的long值爲:"+num3);
        System.out.println("隨機生成的boolean值爲:"+bn);
    }

}

程序運行結果:

隨機生成的int值爲:9
隨機生成的float值爲:0.80443025
隨機生成的long值爲:7563527840035913405
隨機生成的boolean值爲:false

發佈了49 篇原創文章 · 獲贊 77 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章