一、基本类型对应的包装类
基本类型 包装类型
byte Byte
int Integer
short Short
long Long
float Float
double Double
boolean Boolean
char Character
A.创建一个包装类对象:
Integer i = new Integer(4);//创建了一个Integer对象,表示指定的int值
Integer s = new Integer("8");//创建了一个Integer对象,表示String 参数"8"指定的int 值
包装类常用的方法如下:
包装类主要是两种方法,一种是本类型和其它类型之间进行转换,另一种是字符串和本类型以及基本类型之间的转换
如上图中的方法前五种是本类型和其他类型之间的转换,后三种是字符串和本类型以及基本类型之间的转换。
1
2
3
|
Double d =
new
Double(
5
);
byte
d1 = d.byteValue();
System.out.println(d1);
|
1
2
3
|
Double d =
new
Double(
5
);
Byte d1 = d.byteValue();
System.out.println(d1);
|
这两种都是可以的,本类型和其他类型之间的转换,可是为什么上面两个都可以呢?这便是接下来要讲的
B.基本类型与包装类型之间的转换
JDK1.5引入了自动装箱和拆箱的机制,那么什么是装箱和拆箱呢?
装箱:就是将基本类型转换成包装类,分为自动装箱和手动装箱
1
2
3
4
5
|
int
a1=
4
;
// //手动装箱
// Integer ai = new Integer(a1);
// //自动装箱
// Integer aj = a1;
|
拆箱:就是将包装类型转换成基本类型,分为自动拆箱和手动拆箱
1
2
3
4
|
//手动拆箱
// int ah = ai.intValue();
// //自动拆箱
// int ag = ai;
|
没有什么能够阻挡它们之间的转换。
C.字符串和本类型以及基本类型之间的转换
c1.基本类型转换成字符串类型
c1a.包装类 的toString()方法
c1b.String 类的valueOf()方法
c1c.空字符串加一个基本类型变量
c2.字符串转换成基本类型
c2a.包装类的parse***()静态方法
c2b.包装类的valueOf()方法
1
2
3
4
5
6
7
8
9
|
//基本类型转换成字符串类型有三种方法
int
b =
1
;
String b1 = Integer.toString(b);
String b2 = String.valueOf(b);
String b3 = b+
""
;
System.out.println(
"b1: "
+b1+
"b2: "
+b2+
"b3: "
+b3);
//字符串转换成基本类型的方法有两种
int
c1 = Integer.parseInt(b1);
int
c2 = Integer.valueOf(b2);
|
因为存在自动装箱和自动拆箱,所以包装类型和基本类型一样
二、表示时间的类
Java中的表示时间的类主要有Date和Calendar,其中Date位于java.util中,最主要是获取当前时间,默认的无参构造方法就可以获取当前时间,它可以结合SimpleDateFormat类更改输出的时间的格式;Calendar是一个抽象类,需要调用getInstance()方法获取对象,下面分别总结一下Date和Calendar类的用法。
A.Date和SimpleDateFormat共同表示时间
Date类直接new一个Date的对象就可以获取当前的时间
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
static
void
main(String[] args)
throws
ParseException{
Date now =
new
Date();
System.out.println(now);
//创建一个SimpleDateFormat的对象,指定它的格式
SimpleDateFormat sdf =
new
SimpleDateFormat(
"yyyy年MM月dd日:HH:mm:ss"
);
//将指定的日期格式化
String date = sdf.format(now);
System.out.println(date);
//将指定的格式化后的日期解析成原来的日期格式
Date date1 = sdf.parse(date);
System.out.println(date1);
}
|
第一行是Date的默认构造方法输出的当前的时间,从左到右是:星期 、月份、日期、时:分:秒 cst(表示中国标准时间)、年份。
SimpleDateFormat类是规范date的格式,它属于java.text,是一种文本格式类。如上图,创建一个带格式的SimpleDateFormat对象,然后调用format方法可以使date以自定义的格式输出,形成了人们所习惯的风格。
第三行是调用SimpleDateFormat类的parse()方法使得之前的date格式按照SimpleDateFormat中定义的格式解析成原来的Date的类型,注意:parse编译的时候可能会抛出异常,所以需要throws ParseException(转换的异常),举例如下:
1
2
3
4
|
String date =
"2017-03-15 20:19:30"
;
SimpleDateFormat sdf =
new
SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
);
Date date1 = sdf.parse(date);
System.out.println(date1);
|
B.Calendar类表示时间
Calendar类是一个由abstract修饰的类,下面是它的源码
1
|
public
abstract
class
Calendar
implements
Serializable, Cloneable, Comparable<Calendar>
|
说明不能通过new 的方法获取一个实例,由此,Java中提供了一个getInstance的方法,获取一个Calendar子类的实例对象,getInstance的源码如下:
1
2
3
4
|
public
static
Calendar getInstance()
{
return
createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}
|
由源码可以看出来这个getInstance方法中有当地的时区,创建出来的是一个符合当地的实例,所以Calendar.getInstance是子类对象,并且可以根据createCalendar方法创建出来的是符合当地时区的日期子类判断是Calendar的子类对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
private
static
Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
CalendarProvider provider =
LocaleProviderAdapter.getAdapter(CalendarProvider.
class
, aLocale)
.getCalendarProvider();
if
(provider !=
null
) {
try
{
return
provider.getInstance(zone, aLocale);
}
catch
(IllegalArgumentException iae) {
// fall back to the default instantiation
}
}
Calendar cal =
null
;
if
(aLocale.hasExtensions()) {
String caltype = aLocale.getUnicodeLocaleType(
"ca"
);
if
(caltype !=
null
) {
switch
(caltype) {
case
"buddhist"
:
cal =
new
BuddhistCalendar(zone, aLocale);
break
;
case
"japanese"
:
cal =
new
JapaneseImperialCalendar(zone, aLocale);
break
;
case
"gregory"
:
cal =
new
GregorianCalendar(zone, aLocale);
break
;
}
}
}
if
(cal ==
null
) {
// If no known calendar type is explicitly specified,
// perform the traditional way to create a Calendar:
// create a BuddhistCalendar for th_TH locale,
// a JapaneseImperialCalendar for ja_JP_JP locale, or
// a GregorianCalendar for any other locales.
// NOTE: The language, country and variant strings are interned.
if
(aLocale.getLanguage() ==
"th"
&& aLocale.getCountry() ==
"TH"
) {
cal =
new
BuddhistCalendar(zone, aLocale);
}
else
if
(aLocale.getVariant() ==
"JP"
&& aLocale.getLanguage() ==
"ja"
&& aLocale.getCountry() ==
"JP"
) {
cal =
new
JapaneseImperialCalendar(zone, aLocale);
}
else
{
cal =
new
GregorianCalendar(zone, aLocale);
}
}
return
cal;
}
|
Calendar类为了方便对日期的操作,还提供了Calendar.YEAR,Calendar.MONTH等,可以通过get 方法获取当前的年或者月,还提供了setTime(),getTime(),getTimeinMillis()方法等,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Calendar c = Calendar.getInstance();
System.out.println(c);
int
year = c.get(Calendar.YEAR);
int
month = c.get(Calendar.MONTH)+
1
;
int
day = c.get(Calendar.DAY_OF_MONTH);
int
hour = c.get(Calendar.HOUR);
int
minute = c.get(Calendar.MINUTE);
int
second = c.get(Calendar.SECOND);
SimpleDateFormat sfd =
new
SimpleDateFormat(
"yyyy年MM月dd日:HH时mm分ss秒"
);
//把Calendar类型转换成Date类型
Date date = c.getTime();
//把Date类型转换成Calendar类型
c.setTime(date);
//Date类型是标准的时间
String dates = sfd.format(date);
System.out.println(dates);
//而由上面的get 到的都是一般的十二进制的数,不是标准的时间输出
System.out.println(year+
"年"
+month+
"月"
+day+
"日"
+hour+
"时"
+minute+
"分"
+second+
"秒"
);
Long time = c.getTimeInMillis();
System.out.println(
"毫秒数:"
+time);
|
1
2
3
4
|
java.util.GregorianCalendar[time=
1489589906237
,areFieldsSet=
true
,areAllFieldsSet=
true
,<br>lenient=
true
,zone=sun.util.calendar.ZoneInfo[id=
"Asia/Shanghai"
,offset=
28800000
,dstSavings=
0
,useDaylight=
false
,transitions=
19
,lastRule=
null
],<br>firstDayOfWeek=
1
,minimalDaysInFirstWeek=
1
,ERA=
1
,YEAR=
2017
,MONTH=
2
,WEEK_OF_YEAR=
11
,WEEK_OF_MONTH=
3
,DAY_OF_MONTH=
15
,DAY_OF_YEAR=
74
,DAY_OF_WEEK=
4
,<br>DAY_OF_WEEK_IN_MONTH=
3
,AM_PM=
1
,HOUR=
10
,HOUR_OF_DAY=
22
,MINUTE=
58
,SECOND=
26
,MILLISECOND=
237
,ZONE_OFFSET=
28800000
,DST_OFFSET=
0
]
2017
年
03
月
15
日:
22
时
58
分
26
秒
2017
年
3
月
15
日
10
时
58
分
26
秒
毫秒数:
1489589906237
|
由上面的代码可以看出来当Calendar的实例创建出来的时候就已经被初始化了,包含YEAR、MONTH等字段,所以通过get方法可以获取这些字段,获取了之后便根据自己的喜好输出,这样的结果是更加的便利操作.
getTime()方法是将Calendar转换成Date类型的
setTime(Date date)方法是将Date转换成Calendar类型的,返回值为void
getTimeInMillis()是获取距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量,毫秒数
小节:Date类是获取当前时间的类,默认构造方法即为生成一个拥有当前时间的对象,但是由于Date中的一些方法不当,所以现在很少使用Date类,建议使用Calendar类。
三、Math类
Math位于java.lang包下,其中包含了很多的基本运算方法,所有的方法否是静态的,可以直接使用Math.方法名()
1
2
3
4
5
6
7
8
9
|
double
a4 =
12.08
;
int
a5 = (
int
)a4;
long
a6 = Math.round(a4);
double
a7 = Math.floor(a4);
double
a8 = Math.ceil(a4);
double
a9 = Math.min(a4,a5);
System.out.println(
"原数是: "
+a4+
"\t直接转换的是:"
+a5+
"\t四舍五入是:"
+a6+
"\t小于参数最大整数是:"
+a7+
"大于参数最小整数:"
+a8+
"两数之间的最小值:"
+a9);
|
结果:
1
2
3
|
原数是:
12.08
直接转换的是:
12
四舍五入是:
12
小于参数最大整数是:
12.0
大于参数最小整数:
13.0
两数之间的最小值:
12.0
|