- 包装类(外覆类、数据类型类)
- 定义:Java为Int,double,float,char等数据类型定义了对应的包装类
这些包装类可以为数值型,字符型与布尔型创建对象,使其具有对象的性质,并且可以调用一些方法 , 包装类均位于java.lang包
以下是基本类型与所对应的包装类:
- 用途,这些类的用途主要包含两种:
a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
- 包装类的构造方法:
Integer构造方法有两种:
- 以Int型变量作为参数创建Integer对象,实例代码如下:
Integer number=new Integer(7);
- 以String型变量作为参数创建Integer对象,实例代码如下:
Integer number=new Integer(“7”);
- 当以String变量作为参数创建boolean对象时,实例如下:
Boolean b=new Boolean(“ok");
而不是字符串“true”
- 基本类型与包装类之间的转换
那么在这里还有一个概念,Java后续版本中加入了装箱与拆箱 ,装箱是指基本类型转换为包装类,使其具有对象的性质 ,拆箱是指包装类转换为基本类型的值
(1)装箱:基本类型转换为包装类,装箱分为两个,一个是手动装箱,一个是自动装箱,手动装箱的意思,就是你必须手动的new一个对象 ,自动装箱,就是程序默认将其自动的创建一个对象, 例子:
int a = 0;
Integer b = new Integer(a);//手动装箱
Integer c = a;//自动装箱
(2)拆箱:包装类转换为基本类型 ,拆箱也分为两个,手动拆箱与自动拆箱
Double d = 9.2;
double e = d.doubleValue();//手动拆箱
double f = d;//自动拆箱
- 基本类型与字符串之间的转换
(1)基本类型转换为字符串
基本类型转换为字符串的方法有三种方法:
①使用包装类中的toString()方法
②使用String类的valueOf()方法
③加入空字符
Stringi
=Integer.
toString(h);
//使用包装类中的toString()方法
Stringi
=String.
valueOf(h);
//使用String类的valueOf()方法
Stringi
=h
+""
;
//加入空字符
(2)字符串转换为基本类型
字符串转换为基本类型有两种方法:
①使用包装类中的parseXXX(String s)方法 ,如果字符串都包含的不是都是数字字符,则程序执行将出现异常。还有parseInt(String s, int radix)方法,这里的radix表示指定的进制。
②使用包装类中的valueOf()方法
int j = Integer.parseInt(i);
//使用包装类中的parseXXX()方法
int j = Integer.valueOf(i);
//使用包装类中的valueOf()方法
- 格式化输出
- System.out.format()
Java Se5引入的format方法可用于PrintStream或PrintWriter对象,其中也包括System.out对象。
package com.tomhu.format;
public class FormatTest1 {
public static void main(String[] args) {
int x = 5;
double y = 3.141592;
// 一般方式
System.out.println("x = " + x + ", y = " + y);
// printf()方式
System.out.printf("x = %d, y = %f\n", x, y);
// format()方式
System.out.format("x = %d, y = %f\n", x, y);
}
}
输出的结果如下:
x = 5, y = 3.141592
x = 5, y = 3.141592
x = 5, y = 3.141592
在format的具体代码中,其实就是调用Formatter的format方法:formatter.format(Locale.getDefault(), format, args);
- Formatter类
在Java中,所有新的格式化功能都由Formatter类处理,上述的printf与format也是。可以将Formatter看作是一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候 ,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出
Formatter formatter = new Formatter(System.out);
formatter.format("My name is %s, and my age is %d ", name, age);
formatter.close();
- 格式化说明符:
在插入数据时,如果想要控制空格与对齐,就需要精细复杂的格式修饰符,最常见的应用是控制一个域的最小尺寸,这可以通过指定width来实现。Formatter对象通过在必要时添加空格,来确保一个域至少达到某个长度。在默认的情况下,数据是右对齐的,通过"-"标志可以改变对齐的方向。
例子:
formatter.format("%-15s %-5s %-10s\n", "huhx", "linux", "liuli");
formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzi", "zhangcong");
formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzhou", "zhangcong");
输出结果:
huhx linux liuli
zhangkun yanzi zhangcong
zhangkun yanzhou zhangcong
与width相对的是precision(精确度),它用来指明最大尺寸。width可以应用各种类型的数据转换,并且其行为方式都一样。precision则不一样,不是所有类型的数据都能使用precision,而且,应用于不同的类型的数据转换时,precision的意义也不同。
- precision应用于String时,它表示打印String时输出字符的最大数量
- precision应用于浮点数时,它表示小数点要显示出来的位数。默认是6位小数,如果小数位数过多则舍入,过少则在尾部补零。
- 由于整数没有小数部分,所以precision不能应用于整数。如果你对整数应用precision,则会触发异常
- 字符串格式化(String.format()的使用)
String类的format()方法与C语言的sprintf()方法有很多类似之处。Format()方法有两种重载形式:
format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
- 常规类型的格式化
- 搭配转换符的标志
- 日期格式
转 换 符 | 说 明 | 示 例 |
%s | 字符串类型 | "mingrisoft" |
%c | 字符类型 | 'm' |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 99 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.99 |
%a | 十六进制浮点类型 | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型(f和e类型中较短的) |
|
%h | 散列码(就是ASCII码) |
|
%% | 百分比类型 | % |
%n | 换行符 |
|
%tx | 日期与时间类型(x代表不同的日期与时间转换符) |
|
标志 | 说 明 | 示 例 | 结 果 |
+ | 为正数或者负数添加符号 | ("%+d",15) | +15 |
− | 左对齐 | ("%-5d",15) | |15 | |
0 | 数字前面补0 | ("%04d", 99) | 0099 |
空格 | 在整数之前添加指定数量的空格 | ("% 4d", 99) | | 99| |
, | 以“,”对数字分组 | ("%,f", 9999.99) | 9,999.990000 |
( | 使用括号包含负数 | ("%(f", -99.99) | (99.990000) |
# | 如果是浮点数则包含小数点, 如果是16进制或8进制则 添加0x或0 | ("%#x", 99) ("%#o", 99) | 0x63 0143 |
< | 格式化前一个转换符所描述的参数 | ("%f和%<3.2f", 99.45) | 99.450000和 99.45 |
$ | 被格式化的参数索引 | ("%1$d,%2$s", 99,"abc") | 99,abc |
字符串格式中还有%tx转换符没有详细介绍,它是专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。
常见日期和时间组合的格式,如图所示。
转 换 符 | 说 明 | 示 例 |
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | “年-月-日”格式 | 2007-10-27 |
D | “月/日/年”格式 | 10/27/07 |
r | “HH:MM:SS PM”格式(12时制) | 02:25:51 下午 |
T | “HH:MM:SS”格式(24时制) | 14:28:16 |
R | “HH:MM”格式(24时制) | 14:28 |
使用实例:
Date date=new Date();
//b的使用,月份简称
String str=String.format(Locale.US,"英文月份简称:%tb",date);
System.out.println(str);
System.out.printf("本地月份简称:%tb%n",date);
输出结果
英文月份简称:Sep
本地月份简称:九月
- 日期转换符(SimpleDateFormat的使用)
在 日期和时间模式字符串 中,这些A——Z,a——z这些字母(不被单引号包围的)会被特殊处理替换为对应的日期时间,其他的字符串还是原样输出。
日期和时间模式(注意大小写,代表的含义是不同的)
- 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:表示时区
使用实例(日期转字符串):
Date nowTime=new Date();
System.out.println(nowTime);
SimpleDateFormat time=new SimpleDateFormat("yyyy年的 MM月 dd天 HH: mm: ss");
System.out.println(time.format(nowTime));
字符串转日期:
String s = "2017-05-25";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(s);
} catch (ParseException e) {
System.out.println(e.getMessage());
}
System.out.println(date);