java基础语法(十九)日期、数字格式化、随机数、枚举

日期

1、怎么获取系统当前时间

public class dateTest01 {
    public static void main(String[] args) throws Exception {
        //获取系统当前时间(精确到毫秒的系统当前时间)
        //直接调用无参数构造方法
        Date nowTime = new Date();
        //java.util.Date类的toString()方法已经重写了
        System.out.println(nowTime);//Mon Apr 13 20:31:01 CST 2020

        //日期格式化
        //将日期类型Date按照指定格式转换:Date--转换成具有一定格式的日期字符串-->String
        //SimpleDateFormat是java.text包下的。专门负责日期格式化的
        /*
        yyyy 年(年是4位)   MM 月(月是2位)     dd 日     HH 时     mm 分     ss 秒     SSS 毫秒(毫秒3位,最高999)
        注意:在日期格式中,除了y M d H m s S 这些字符不能随便写之外,剩下的符号格式可以随意组织
         */
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yy/MM/dd HH:mm:ss");

        String nowTimeStr = sdf1.format(nowTime);
        System.out.println(nowTimeStr);//2020-04-13 20:47:07 628

        //日期字符串String转换成Date类型
        String time = "2008-08-08 08:08:08 888";
        //注意:这里的日期格式不能随便写,要和日期字符串格式相同
        //字符串的日期格式要和SimpleDateFormat对象指定的日期格式要相同
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        Date dateTime = sdf.parse(time);
        System.out.println(dateTime);//Fri Aug 08 08:08:08 CST 2008

    }
}

2、 统计一个方法耗费的时长

public class dateTest02 {
    public static void main(String[] args) {
        //获取自1970年1月1日 00:00:00 000 到当前系统时间的总毫秒数
        long nowTimeMills = System.currentTimeMillis();
        System.out.println(nowTimeMills);//1586783690923

        //需求:统计一个方法执行所耗费的时长
        //在调用方法之前统计记录一个毫秒数
        long begin = System.currentTimeMillis();
        print();
        //在执行完一个方法之后记录一个毫秒数
        long end = System.currentTimeMillis();
        System.out.println("耗费时长"+(end-begin)+"毫秒");//耗费时长75毫秒

    }

    public static void print(){
        for(int i = 0 ;i<1000;i++){
            System.out.println("i = "+i);
        }
    }
}

public class datetest03 {
    public static void main(String[] args) {
        //1970-01-01 00:00:00 001
        Date time = new Date(1);//参数是一个毫秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String strTime = sdf.format(time);
        System.out.println(strTime);//1970-01-01 08:00:00 001

        //获取昨天此时的时间
        Date time2 = new Date(System.currentTimeMillis()-1000*60*60*24);
        String strTime2 = sdf.format(time2);
        System.out.println(strTime2);

    }

}

System类的相关属性和方法:
System.out [out是System类的静态变量]
System.out.println() [println()方法不是System类的,是PrintStream类的方法]
System.gc() 建议启动垃圾回收器
System.currentTimeMillis() 获取自1970年1月1日 00:00:00 000 到当前系统时间的总毫秒数
System.exit(0) 退出JVM

数字格式化

数字格式有哪些:
# 代表任意数字
, 代表千分位
. 代表小数点
0 代表不够时补0

public class DecimalFormatTest01 {
    public static void main(String[] args) {
        //java.text.DecimalFormat专门负责数字格式化
        /*###,###.##
            表示:加入千分位,保留2个小数。
         */

        DecimalFormat df = new DecimalFormat("###,###.##");
        String s = df.format(1236.45);
        System.out.println(s);//1,236.45

        DecimalFormat df2 = new DecimalFormat("###,###.0000");//保留4个小数位,不够补0
        String s2 = df.format(1236.45);
        System.out.println(s2);//
    }
}

BigDecimal 属于大数据,精度极高,属于java对象(引用数据类型)

public class BigDecimalTest01 {
    public static void main(String[] args) {
        //精度极高的100
        BigDecimal v1 = new BigDecimal(100);
        BigDecimal v2 = new BigDecimal(200);
        //求和
        //v1和v2都是对象,不能直接用加号求和
        BigDecimal v3 = v1.add(v2);//调用方法求和
        System.out.println(v3);//300
    }
}

随机数

public class randomTest01 {
    public static void main(String[] args) {
        //创建随机数对象
        Random random = new Random();

        //随机产生一个int类型取值范围内的随机数
        int num1 = random.nextInt();
        System.out.println(num1);

        //产生[0~100]之间的随机数,不能产生101。
        //nextInt翻译为:下一个int类型的数据是101,表示只能渠道100
        int num2 = random.nextInt(101);//不包括101
        System.out.println(num2);

    }
}

编写程序,生成5个不重复的随机数,重复的话重新生成。最终生成的5个随机数放到数组中,要求数组中的这5个随机数不能重复

public class randomTest02 {
    public static void main(String[] args) {
        //创建random对象
        Random random = new Random();
        //长度为5的一个一维数组
        int[] arr = new int[5];//默认值都是0
        for(int i = 0 ; i<arr.length;i++){
            arr[i]=-1;
        }
        int index = 0;
        while(index<arr.length){
            //生成随机数
            int num = random.nextInt(6);//只生成0-5的随机数
            System.out.println("生成的随机数"+ num);

            //判断数组中有没有这个num,如果没有就放进去
            if(!contains(arr,num)){
                arr[index]=num;
                index++;
            }

        }

        //遍历数组
        for (int i = 0;i<arr.length;i++){
            System.out.println(arr[i]);
        }

    }



    /**
     * 单独编写一个方法,这个方法专门用来判断数组中是否包含某个元素
     * @param arr 数组
     * @param key 元素
     * @return true表示包含,false表示不包含
     */
    public static boolean contains(int[] arr,int key){
        /*
        // 这个方案有bug(排序出问题了)
        //对数组进行升序
        Arrays.sort(arr);
        //进行二分查找
        return Arrays.binarySearch(arr, key)>0;

         */

        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                return true;
            }
        }
        return false;
    }
}

枚举

public class test01 {
    public static void main(String[] args) {
        int retValue = divide(10,2);
        System.out.println(retValue);//1

        int retValue2 = divide(10,0);
        System.out.println(retValue2);//0
    }

    /**
     * 计算两个int类型数据的商,计算成功返回1,计算失败返回0
     * @param a int类型的数据
     * @param b int类型的数据
     * @return 计算成功返回1,计算失败返回0
     */
    //设计缺陷:在这个方法的返回值类型上。返回一个int不恰当
    //既然最后的结果只有成功和失败,最好使用布尔类型。布尔类型的true和false正好可以表示两种不同的状态


    public static int divide(int a,int b){
        try{
            int c =a/b;
            //程序执行到此处表示以上代码没有发生异常,表示执行成功

            //返回10已经偏离了需求,实际上已经出错了,但是编译器没有检查出来
            return 10;

        } catch (Exception e){
            //程序执行到此处表示以上程序出现了异常
            //执行失败
            return 0;
        }
    }
}

枚举是一种引用数据类型
枚举类型怎么定义
enum 枚举类型名{
枚举值1, 枚举值2
}

public class test02 {
    public static void main(String[] args) {
        Result r = divide(10,0);
        System.out.println(r == Result.SUCCESS?"计算成功":"计算失败");
    }

    /**
     * 计算两个int类型数据的商
     * @param a int类型的数据
     * @param b int类型的数据
     * @return  Result.SUCCESS表示成功,Result.FAIL表示失败
     */
    public static Result divide(int a,int b){
        try{
            int c =a/b;
            //程序执行到此处表示以上代码没有发生异常,表示执行成功

            //返回10已经偏离了需求,实际上已经出错了,但是编译器没有检查出来
            return Result.SUCCESS;

        } catch (Exception e){
            //程序执行到此处表示以上程序出现了异常
            //执行失败
            return Result.FAIL;
        }
    }
}
//枚举,一枚一枚可以列举出来,才建议使用枚举类型
//枚举也是一种引用数据类型
//枚举中的每一个值可以看做是常量
enum Result{
    //枚举编译之后也是生成class文件。
    //SUCCESS是枚举Result类型中的一个值
    //FAIL是枚举Result类型中的一个值
    SUCCESS,FAIL
}

结果只有两种情况的,建议使用boolean类型。结果超过两种并且可以一枚一枚列举出来的,建议使用枚举类型。 例如:颜色、四季、星期等都可以使用枚举类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值