JavaSE系列基础包装类及日历类详解

1. 基本类型包装类

1.1 概述

它用于基本数据类型与字符串之间的转换

JavaSE系列基础包装类及日历类详解_第1张图片

举例:

public class IntegerDemo {
    public static void main(String[] args) {
        //判断数据是否在int范围内
        System.out.println(Integer.MAX_VALUE);//最大范围
        System.out.println(Integer.MIN_VALUE);//最小范围
    }
}

1.2 Integer类的概述与使用

这里只介绍Integer,其他的可自行查看帮助文档。

JavaSE系列基础包装类及日历类详解_第2张图片

那么我们重点看构造方法

JavaSE系列基础包装类及日历类详解_第3张图片

它的构造方法,建议以后用Integer的方法,用valueOf()来使用

过时的方法当然也可以用,不过它会提示已经过时,如下图所示:

JavaSE系列基础包装类及日历类详解_第4张图片

但是如果是字符串类型的字母,就会运行错误,它识别的是字符串类型的数字

Integer i3=new Integer("asd");//这里就会运行错误

不建议使用上面的两种形式,建议使用这种格式:Integer i1=Integer.valueOf();

public class IntegerDemo {
    public static void main(String[] args) {
        Integer i1=Integer.valueOf(123);//数字类型
        System.out.println(i1);
        Integer i2=Integer.valueOf("123");//字符串类型
    }
}

1.3 int和String的相互转换

简单的方式:“字符串”+数字,得出来的是拼接的字符串

int number=100;
String s1=""+number;

方式二官方版:

JavaSE系列基础包装类及日历类详解_第5张图片

这里可以用官方文档给我们提示的进行,这里用的是valueOf进行转换

数字转换为字符串:String s1=String.valueOf(num);

字符串转换为数字:

方式一:先将String转换为Integer再转化为int

String—>Integer—>int

方式二:Integer.parseInt();

public class IntegerDemo {
    public static void main(String[] args) {
       int num=100;
       String s1=String.valueOf(num);
       //int转换为字符串类型
        System.out.println(s1);
        System.out.println("----------");
        //字符串转换为int
        String s2="100";
       // 方式一:
        //String--->Integer--->int
        Integer i1=Integer.valueOf(s2);
        //通过帮助文档发现,
        // intValue()用来返回Integer
        // 作为int的值,正好符合要求
        int x=i1.intValue();//返回值用int接收
        System.out.println(x);
        //方式二:使用parseInt静态方法
        int y=Integer.parseInt(s2);
        System.out.println(y);
    }
}

1.4 案例-字符串中数据排序

需求:有一个字符串:“91 27 46 38 50”,请写程序最终输出的结果是:“27,38,46,50,91”.

思路:

JavaSE系列基础包装类及日历类详解_第6张图片

代码展示:

public class IntegerDemo {
    public static void main(String[] args) {
      //定义字符串
        String s="91 27 46 38 56";
        //将字符串中数据抽离出来,以空格作为分割点
        String[] s1 = s.split(" ");
        //定义一个int数组,用于存这些数据
        int []arr=new int[s1.length];//以s1的长度
        //转换为int类型
        for (int i = 0; i < s1.length; i++) {
            arr[i] = Integer.parseInt(s1[i]);
            //赋值
        }
        //进行排序
        Arrays.sort(arr);
        //字符串拼拼接
        StringBuilder sb=new StringBuilder();
        for(int i = 0; i < arr.length; i++){
            if(i==arr.length-1){
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]).append(" ");
            }

        }
        String result = sb.toString();
        System.out.println("排序后的:"+ result);




    }
}

1.5 自动装箱和拆箱

装箱: 把基本数据类型转换为对应包装类型拆箱: 把包装类型转换为基本数据类型

先看装箱:通过定义我们可以看出,装箱把基本数据类型转化为对应包装类型,例如:

Inter i=Integer.valueOf(100);//这里先把100转化为Inter类型,赋值
Integer i1=100;//这里java5之后就在jdk内部
//已经潜移默化的为我们包装好了
//它等同于上步

拆箱:与装箱执行相反的步骤

Integer i1=100;
//拆箱:转换为int型,用intValue()这个方法
//然后进行基本类型的运算后再赋值给i1
//完成自动拆箱
i1=i1.intValue()+200;//最后赋值是自动装箱

自动拆箱:省去了转化为int类型的基本数据类型,直接进行运算

Integer i1=100;
i1+=200;//内部隐含了自动拆箱和自动装箱

注意

如果定义时,定义的Integer i=null;那么i进行运算时会运行错误,这里要注意,引用类型的最好要判断是否为null,只要是对象,就必须判断是否为空

2. Date类

要注意,Date类导包时要清楚自己导的哪个包

JavaSE系列基础包装类及日历类详解_第7张图片

JavaSE系列基础包装类及日历类详解_第8张图片

构造方法:

Date 代表了指定时间,精确到毫秒

JavaSE系列基础包装类及日历类详解_第9张图片

举例:注意!在这里导入的util包下的

JavaSE系列基础包装类及日历类详解_第10张图片

public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
        //按道理输出的应该是地址,结果输出了时间,因为重写了toString方法
        System.out.println(d);
        //有参构造
        long data=1000*60*60;//毫秒*1000->秒->*60->分钟->*60->小时
        Date d2=new Date(data);
        System.out.println(d2);
    }
}

运行结果:

Wed Dec 15 17:51:04 CST 2021

Thu Jan 01 09:00:00 CST 1970//其中09:00:00是时区

2.1 Date常用方法

public long getTime() 获取的是日期对象,从1970年1月1日00:00:00到现在的毫秒

public void setTime(long time) 设置时间,给的是毫秒值

getTime:
public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
        //获取时间
        System.out.println(d.getTime()*1.0/1000/60/60/24/365+"年");
    }
}

运行结果:

51.99024939979706年//从1970到现在

setTime
public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
       long date=1000*60*60;
       d.setTime(date);
        System.out.println(d);
    }
}

运行结果:

Thu Jan 01 09:00:00 CST 1970

3. SimpleDateFormat类

概述

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。重点学习日期格式化和解析化

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A'到‘Z'以及从‘a'到‘z'引号的字母被解释为表示日期或时间字符串的组件的模式字母

常用模式字母对应关系

  • y…年
  • M…月
  • d…天
  • H…时
  • m…分
  • s…秒

构造方法

JavaSE系列基础包装类及日历类详解_第11张图片

SimpleDateFormat格式化与解析日期

格式化(从Date到String)public final String format(Date date):将日期格式化成日期/时间字符串

解析(从String到Date)public Date parse(String souce):从给定字符串的开始解析文本以生成日期

举例

格式化

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        //格式化
        Date d=new Date();
        //无参构造
        //先创建SimpleDateFormat类
        SimpleDateFormat sdf = new SimpleDateFormat();
        //通过对象调用方法
        String s = sdf.format(d);
        System.out.println(s);

    }
}

运行结果:

2021/12/15 下午7:11

为了看起来更加方便,可以自己设置模式:传递参数:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

运行结果

解析

要注意的点:字符串模式的格式要和传参一样

2021-12-15 12:00:00要和yyyy-MM-dd HH:mm:ss"格式对应,例如都需要-,在代码下面会提示异常,要抛出异常,快捷键Alt+Enter

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {//抛出异常
        //解析
        Date d=new Date();
        String s="2021-12-15 12:00:00";
        //先创建SimpleDateFormat类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//这里格式要和模式的一样
        //通过对象调用方法
        Date ss = sdf.parse(s);
        //抛出异常Alt+Enter
        System.out.println(ss);

    }
}

3.1 案例-日期工具类

JavaSE系列基础包装类及日历类详解_第12张图片

工具类:

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/*
工具类:构造方法私有,成员静态
*/
public class DateUtils {
    private DateUtils() {}
    //方法,把日期转化为指定格式的字符串
    //返回类型:String
    //参数:Date date,String format
    public static String dateTostring(Date date,String format){
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        String s = sdf.format(date);
        return s;
    }
    //方法,把字符串转化为指定格式的日期
    //返回类型:Date
    //参数:String s,String format
    public static Date stringTodate(String s1,String format) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat(format);
       Date p = sdf.parse(s1);
       return p;
    }
}

测试类:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {//抛出异常
        //创建日期对象
        Date d=new Date();
        //调用方法
        String s = DateUtils.dateTostring(d, "yyyy年MM月dd日 HH:mm:ss");
        System.out.println(s);
        //也可以拿到部分
        String s1 = DateUtils.dateTostring(d, "yyyy年MM月dd日");
        System.out.println(s1);
        System.out.println("----以下是解析----");
        String s2="2021-12-15 00:00:00";
        Date date = DateUtils.stringTodate(s2, "yyyy-MM-dd HH:mm:ss");
        System.out.println(date);
    }
}

运行结果:

JavaSE系列基础包装类及日历类详解_第13张图片

4. Calendar类-日历

概述

Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法

Calendar提供了一个类方法getlnstance用于获取Calendar对象,其日历字段已使用当前日期和时间

初始化: Calendar rightNow = Calendar.getInstance();

JavaSE系列基础包装类及日历类详解_第14张图片
JavaSE系列基础包装类及日历类详解_第15张图片

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

注意:这里的月份是从0开始的,所以在使用时要+1

运行结果:

2021年12月15日

4.1 Calendar 的常用方法

JavaSE系列基础包装类及日历类详解_第16张图片

add()方法,由于在默认类中重写了方法,所以这里可以直接使用

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        c.add(Calendar.YEAR,10);//在现在的基础上增加十年
        c.add(Calendar.DATE,-5);//在原来的基础上-5天
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

运行结果:

set()方法

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        c.set(2022,11,05);//这里11出来的结果会是12
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

运行结果:

以上就是JavaSE系列基础包装类及日历类详解的详细内容,更多关于JavaSE 基础包装类 日历类的资料请关注脚本之家其它相关文章!

你可能感兴趣的:(JavaSE系列基础包装类及日历类详解)