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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章