包装类
在Java中,很多类的方法都需要接收引用类型的对象,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。
基本类型-包装类对照表
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
char | Character |
int | Intefer |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
自动装箱(Autoboxing):
是指将基本数据类型的变量赋给对应的包装类变量;
自动拆箱(AutoUnboxing):
是指将包装类对象类型直接赋给一个对应的基本数据类型变量。
基本数据类型、基本数据包装类以及字符串之间的相互转换:
- 通过引用数据类型字符串String类的valueOf()方法可以将8种基本数据类型转换为对应的字符串类型;
- 通过8种包装类的静态方法valueOf()既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外);
- 通过8种包装类的有参构造方法同样既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外);
- 通过8种包装类的静态方法parseXxx()可以将变量内容匹配的字符串转换为对应的基本数据类型。
- 包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值。
使用valueOf(String s)和parseXxx(String s)方法注意事项:
除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。
Integer i = Integer.valueOf("123"); // 合法
Integer i = Integer.valueOf("12a"); // 不合法
除了Character外,包装类都有parseXxx(String s)的静态方法,将字符串转换为对应的基本类型的数据。参数s不能为null,而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。
int i = Integer.parseInt("123"); // 合法
Integer in = Integer.parseInt("itcast"); // 不合法
Date 类
Date的两个构造方法:
- Date():用来创建当前日期时间的Date对象。
- Date(long date):用于创建指定时间的Date对象,其中date参数表示1970年1月1日0时0分0(称为历元)以来的毫秒数,即时间戳。
Date d1=new Date();
System.out.println(d1.toString());
//运行结果:
//Sat Jun 27 12:34:34 CST 2020
Calendar类
Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分,比如年、月、日、时、分和秒等。
Calendar类是一个抽象类,不可以被实例化。
在程序中需要调用其静态方法getInstance()来得到一个Calendar对象,然后才能调用其相应的方法。
Calendar calendar = Calendar.getInstance();
方法声明 | 功能描述 |
---|---|
int get(int field) | 返回指定日历字段的值 |
void add(int field,int amount) | 根据日历规则,为指定的日历字段增加或减去指定的时间量 |
void set(int field,int value) | 为指定日历字段设置指定值 |
void set(int year,int month,int date) | 设置Calendar对象的年、月、日三个字段的值 |
void set(int year.int month,int date,int hourOfDay,int minute,int second) | 设置Calendar对象的年、月、日、时、分、秒六个字段的值 |
实例:
public static void main(String[] args)throws ParseException {
// TODO 自动生成的方法存根
Calendar ca=Calendar.getInstance();
ca.set(2018,9,22);
ca.add(Calendar.DATE, 100);
Date d=ca.getTime();
System.out.println(d);
}
DateFormat类-格式化类
作用:
DateFormat类专门用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象。
说明:
DateFormat是一个抽象类,不能被直接实例化,但它提供了一系列的静态方法来获取DateFormat类的实例对象,并能调用其他相应的方法进行操作。
SimpleDateFormat类
在使用DateFormat对象的parse()方法将字符串解析为日期时,需要输入固定格式的字符串,这显然不够灵活。为了能够更好地格式化日期、解析字符串,Java中提供了一个SimpleDateFormat类。
说明:
SimpleDateFormat类是DateFormat类的子类,它可以使用new关键字创建实例对象。在创建实例对象时,它的构造方法需要接收一个表示日期格式模板的字符串参数。
实例:
使用SimpleDateFormat类将日期对象以特定的格式转为字符串形式:
SimpleDateFormat sdf = new SimpleDateFormat(
"Gyyyy年MM月dd日:今天是yyyy年的第D天,E");
System.out.println(sdf.format(new Date()));
使用SimpleDateFormat类将一个指定日期格式的字符串解析为Date对象:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String str = "2018/01/27";
System.out.println(sdf.parse(str));
实例:
Date d1=new Date();
System.out.println(d1.toString());
SimpleDateFormat sdf=new SimpleDateFormat("Gyyyy年MM月dd日:今天是yyyy年的第D天,E");
System.out.println(sdf.format(d1));
/*输出结果为:
Sat Jun 27 13:12:58 CST 2020
公元2020年06月27日:今天是2020年的第179天,星期六*/