美文网首页
Java学习——day 06

Java学习——day 06

作者: 振礼硕晨 | 来源:发表于2018-12-20 10:22 被阅读0次

    主要内容

    • 多维数组
    • 包装类
    • 自动装箱和自动拆箱
    • SimpleDateFormat类的使用
    • Calendar类的使用

    笔记详情

    1. 多维数组

    在Java中经常使用的还是一维数组,少数情况下会使用到二维数组,三维以上的数组很少使用,但是我们还是要掌握多维数组的使用,特别是二维数组。

    二维数组在定义的时候,可以理解为点定义一个一维数组,然后在一维数组的基础之上在定义一个一维数组,这样就可以定义一个二维数组。同一维数组类似,二维数组的初始化方式有以下三种:默认初始化、静态初始化、动态初始化。

    public static void main(String[] args) {
        // 默认初始化,初始化规则和一维数组的初始化规则一样
        int arrayA[][] = new int[4][2];
    
        // 定义的时候直接进行初始化
        int[][] arrayB = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9, 10 } };
        System.out.println(arrayB[2][0]);
    
        // 动态初始化
        int arrayC[][] = new int[3][];
    
        arrayC[0] = new int[2];
        arrayC[1] = new int[3];
        arrayC[2] = new int[4];
    
        arrayC[0][0] = 12;
        arrayC[0][1] = 23;
        arrayC[1][0] = 34;
        arrayC[1][1] = 45;
        arrayC[1][2] = 20;
        arrayC[2][0] = 10;
        arrayC[2][1] = 30;
        arrayC[2][2] = 52;
        arrayC[2][3] = 32;
    }
    

    2. 包装类

    Java是面向对象的一门编程语言,但是Java中的基本数据类型却不是面向对象的,我们在实际使用的过程中,需要将基本数据类型转变为对象,这个时候就会用到包装类。Java中有八种基本数据类型,这八种数据类型对应八个包装类,具体对应关系如下:

    基本数据类型 包装类
    byte Byte
    boolean Boolean
    short Short
    char Character
    int Integer
    long Long
    float Float
    double Double

    包装类提供了基本数据类型和对象之间的转换方式,同时包含每种基本类型的相关属性和方法,比如最大值最小值等。下面给出一些包装类的实例:

    public static void main(String[] args) {
    
        Integer a = 120;    // 定义Integer对象a
        Double b = 23.45;   // 定义Double对象b
    
        System.out.println(Integer.MAX_VALUE);      // int类型的最大值
        System.out.println(Double.MAX_VALUE);       // double类型的最大值
    }
    

    3. 自动封箱和自动拆箱

    这两个概念是围绕封装类记性的,基本类型数据包装到对象中,作为对象来使用,这是封箱;包装类类型的对象可以作为基本数据类型来使用,这是拆箱。这两个封箱过程由java自动实现,就叫做自动封箱和自动拆箱。

    Integer a = 120;    // 自动封箱
    int b = a + 22;     // 自动拆箱
    

    这里有一个有趣的现象,为了优化Java语言,编译器做了一下的设置:如果整数在 [-128,127] ,之间,那么对应的包装类对象是相等的,否则不相等。实例如下:

    public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;
        System.out.println(a == b);     // true
        
        Integer a2 = 200;
        Integer b2 = 200;
        System.out.println(a2 == b2);       // false
        
        Integer a3 = -200;
        Integer b3 = -200;
        System.out.println(a3 == b3);       // false
    }
    

    4. SimpleDateFormat类的使用

    Java中的SimpleDateFormat类可以帮助我们很方便地进行时间的格式化操作,该类大致实现两个功能:通过时间戳获得直观的时间表达式(如:2017-11-12);通过直观的时间表达式(2017-11-12)获取时间戳。

    1. 通过时间戳获得直观的时间表达式

    首先我们应该知道下面的一些格式化规则:

    表达式 表示的时间
    yyyy
    MM
    dd
    hh 1~12小时制(1-12)
    HH 24小时制(0-23)
    mm
    ss
    S 毫秒
    E 星期几
    D 一年中的第几天
    F 一月中的第几个星期(会把这个月总共过的天数除以7)
    w 一年中的第几个星期
    W 一月中的第几星期(会根据实际情况来算)
    a 上下午标识
    k 和HH差不多,表示一天24小时制(1-24)
    K 和hh差不多,表示一天12小时制(0-11)
    z 表示时区

    我们首先应该通过SimpleDateFormat类定义一个对象,初始化的时候,传入的参数是时间表达式,然后通过该对象调用 format() 方法,给方法中传入时间戳,最后按照时间表达式中返回一个字符串。实例如下:

    SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    SimpleDateFormat df3 = new SimpleDateFormat("今天是yyyy-MM-dd,今天是一年中的第D天");
    SimpleDateFormat df4 = new SimpleDateFormat("今天是yyyy-MM-dd,今天是一年中的第W个星期");
    
    System.out.println(df1.format(now));    // 2018-12-19
    System.out.println(df2.format(now));    // 2018-12-19 09:03:28
    System.out.println(df3.format(now));    // 今天是2018-12-19,今天是一年中的第353天
    System.out.println(df4.format(now));    // 今天是2018-12-19,今天是一年中的第4个星期
    

    2. 通过直观的时间表达式获取时间戳

    首先我们先看一个实例:

    SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
    
    try {
        String strDate = "2017-02-16";
        Date date1 = df1.parse(strDate);
        System.out.println(date1);      // Thu Feb 16 00:00:00 CST 2017
        System.out.println(date1.getTime());        // 1487174400000
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    

    通过时间表达式获取时间戳的时候,也是要定义一个SimpleDateFormat对象,并传入时间表达式a(如:yyyy-MM-dd),这个时候要注意的是,使用这个对象去解析的时间表达式b要和时间表达式a匹配,比如这个时候我们传入2017-02-16是可以的,但是传入2017/02/16是不可以的。

    同时这里也要注意,我们应该是用捕获异常来进行解析时间表达式(具体原因我们不清楚,深入学习之后,再回头修改笔记)

    5. Calendar类的使用

    Java中的Calendar类可以帮助我们处理年月日和时间戳之间的转化,也可以帮助我们计算时间,比如20天后是日期,两年后的日期。在生命Calendar类对象的时候要注意,Calendar类是一个抽象类,不能直接使用new运算符进行声明实例对象,但是该类提供了一个 getInstance() 方法,可以返回一个Calendar类的子类对象,这样我们就可以顺利的使用该类中的属性和方法:

    Calendar cal = Calendar.getInstance(); // 声明Calendar的子类实例对象
    
    /****** 时间的设置 ******/
    cal.set(2018, 11, 20); // 设置时间:2018年2月20日,注意是2月
    cal.set(2017, 11, 1, 13, 15, 55); // 设置时间:2017年12月1日 13点15分55秒
    cal.set(Calendar.YEAR, 3030); // 单独设置年份,单独设置月日,与此同理
    
    /****** 时间的获取 ******/
    int year = cal.get(Calendar.YEAR); // 获取年份
    int month = cal.get(Calendar.MONTH) + 1; // 获取月份,注意要 +1
    int day = cal.get(Calendar.DAY_OF_MONTH); // 获取日
    int hour = cal.get(Calendar.HOUR); // 获取时
    int minute = cal.get(Calendar.MINUTE); // 获取分
    int second = cal.get(Calendar.SECOND); // 获取秒
    int weekDay = cal.get(Calendar.DAY_OF_WEEK); // 获取周几,周日是1,周一是2,周二是3...周六是7
    
    /****** 时间的计算 ******/
    cal.add(Calendar.YEAR, 1); // 计算1年后的日期
    cal.add(Calendar.MONTH, -1); // 计算一月前的日期
    

    要注意的是,西方的时间表达和我们中国的时间表达习惯不一样,程序中的时间表达如下:
    月份:一月是0,二月是1,三月是2...十二月是11
    星期:周日是1,周一是2,周二是3...周六是7

    相关文章

      网友评论

          本文标题:Java学习——day 06

          本文链接:https://www.haomeiwen.com/subject/bzydkqtx.html