包装类:
在Java中,很多类的方法都需要接收引用类型的对象,此时就无法将一个基本数据类型的值传入。为了解决这样的问题,JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象。在Java中,每种基本类型都有对应的包装类,如下表所示:
基本数据类型 | 对应的包装类 | 基本数据类型 | 对应的包装类 |
byte char int short | Byte Character Integer Short | long float double boolean | Long Float Double Boolean |
包装类和基本数据类型在进行转换时,引入了装箱和拆箱的概念,其中装箱是指将基本数据类型的值转换为引用数据类型;拆箱是指将引用数据类型的对象转为基本数据类型。
演示以int类型的包装类Integer的装箱的过程,例Example01.java:
public class Example01 {
public static void main(String[] args) {
int a = 20;
Integer in = new Integer(a+a);
System.out.println(in.toString());
}
}
/*
输出结果:
40
*/
由于Object类是所有类的父类,因此,第5行代码通过调用toString()方法,成功的将Integer的值以字符串的形式打印出来。
演示以int类型的包装类Integer的拆箱的过程,例Example02.java:
public class Example02{
public static void main(String[] args) {
Integer num = new Integer(20);
int a = 10;
int sum = num.intValue()+a;
System.out.println("sum = "+sum);
}
}
/*
输出结果:
sum = 30
*/
在使用包装类时,应注意:
①、包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值。
②、除了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 i = Integer.parseInt("itcast"); //合法
Date类:
在JDK的java.util包中提供了一个Date类用于表示日期和时间。Date类中大部分构造方法都被声明为已过时,只有两个构造方法是建议使用的,一个是无参的构造方法Date(),用来创建当前日期的Date对象。另一个是接收一个long型参数date的构造方法Date( long date),用于创建指定时间的Date对象,其中date参数表示1970年1月1日00:00:00(称为历元)以来的毫秒数,即时间戳。
接下来通过一个示例来说明如何使用这两个构造方法创建Date对象,例Example03.java:
import java.util.*;
public class Example03 {
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date(966666666666L);
System.out.println(date1);
System.out.println(date2);
}
}
/*
输出结果:
Fri Nov 16 14:45:30 CST 2018
Sat Aug 19 14:31:06 CST 2000
*/
在例Example03中,打印date1得到的是当前计算机的日期和时间,打印date2得到则是自1970年1月1日00:00:00以来的966666666666Lms后的日期和时间。
Calendar类:
Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分,比如年、月、日、时、分和秒等。Calendar类是一个抽象类,不可以被实例化,在程序中需要调用其静态方法getInstance()来得到一个对象。具体示例如下:
Calendar calendar = Calendar.getInstance();
Calendar类为操作日期和时间提供了大量的方法,常用的方法如下表所示:
方法声明 | 功能描述 |
int get(int field) | 返回指定日历字段的值 |
void add(int field, int amount) | 根据日历规则,为指定日历字段增加或减去指定的时间量 |
void set(int field, int date) | 为指定日历字段设置指定值 |
void set(int year, int month, int date) | 设置Calendar对象的年、月、日三个字段的值 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 设置Calendar对象的年、月、日、时、分、秒六个字段的值 |
接下来通过一个示例学习Calendar类如何获取当前计算机的日期和时间,例Example03.java:
import java.util.*;
public class Example04 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(); //获取表示当前时间的Calendar对象
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int date = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println("当前时间为:"+year+"年"+month+"月"+date+"日"
+hour+"时"+minute+"分"+second+"秒");
}
}
/*
输出结果:
当前时间为:2018年11月16日3时14分19秒
*/
注意:在使用Calendar.MONTH字段时,月份的起始值是从0开始的,所以要在该字段后加1。
在程序中,除了要获得当前计算机的时间,也会经常设置或修改某个时间,比如一项工程的开始时间为2008年的8月8日,假设要100天后竣工,此时要想知道竣工日期是哪天,就需要先将日期设定在开始的那天,然后对日期的天数进行增加。接下来通过调用Calendar类的set()方法和add()方法来实现上述过程,例Example05.java:
import java.util.*;
public class Example05 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, 7, 8);
calendar.add(Calendar.DATE, 100);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int date = calendar.get(Calendar.DATE);
System.out.println("竣工日期为:"+year+"年"+month+"月"+date+"日");
}
}
/*
输出结果:
竣工日期为:2008年11月16日
*/