Format类及其子类功能和使用方法具体解释

1.   Format类结构:

·        java.lang.Object

·        java.text.Format

·        All
Implemented Interfaces:

Serializable, Cloneable

Direct Known Subclasses:

DateFormat, MessageFormat, NumberFormat


public abstract class
Format

extends
Object

implements
Serializable,
Cloneable

2.Format类概述:

Format
是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。

Format 定义了编程接口,用于将语言环境敏感的对象格式化为String(使用 format
方法)和将 String
又一次解析为对象(使用 parseObject
方法)。

通常。一个 format
的 parseObject方法必须能解析不论什么由其 format
方法格式化的字符串。

只是,也可能存在不能解析的异常情况。

比如。format
方法可能创建中间无分隔符的两个相邻整数,在这样的情况下,parseObject
无法推断哪个数字属于哪个数。

Java
平台为格式化日期、消息和数字分别提供了三个特殊的Format
的子类:DateFormat、MessageFormat

NumberFormat。

详细的子类必须实现三个方法:

format(Object obj, StringBuffertoAppendTo, FieldPosition pos)

formatToCharacterIterator(Object obj)

parseObject(String source,ParsePosition pos)

这些常规方法同意对对象进行多态解析和格式化。还能够被使用(如被 MessageFormat
使用)。子类通常也为特定的输入类型提供了另外的 format
方法,也为特定的结果类型提供了parse
方法。当在输入文本的開始没有不论什么所需格式的文本时,则不论什么不带 ParsePosition
參数的 parse 方法都应该抛出 ParseException。

大多数子类还将实现下面工厂方法:

getInstance
获取一个适合于当前语言环境的实用的格式对象

getInstance(Locale)获取一个适合于指定语言环境的实用的格式对象。

此外,某些子类还可能为了更特殊的控制实现其他 getXxxxInstance
方法。比如,NumberFormat
类提供了 getPercentInstance
和 getCurrencyInstance
方法来获取特殊的数字格式器。

Format
的子类假设同意程序猿能为不同语言环境(比方用 getInstance(Locale)
)创建对象,必须实现下面类方法:

public staticLocale[] getAvailableLocales()

最后子类定义一个常量集合来标识格式输出中的不同字段。这些常量用于创建一个 FieldPosition
对象。该对象标识字段中所包括的信息及其在格式化结果中的位置。这些常量应当命名为item _FIELD,当中item
标识了该字段。

有关这些常量的样例,请參阅 ERA_FIELD
及其在 DateFormat
中的同类。

3.创建Format类的实例

由于Format是抽象类,所以我们无法通过Format
的构造方法(非公有的)来实例化Format类的对象。如以下的写法是错误的:

Format format=new
Format();

那么我们怎样实例化Format类的实例呢?

我们能够利用Java面向对象语言的多态性来解决问题:

通过父类型的引用能够指向子类型的对象。说白了就是用子类去实例化父类的对象。如以下的做法:

Format format;

//通过子类直接实例化Format类的对象(适用于子类不是抽象类的情况)

format=new
MessageFormat("hh");

//通过子类的getXxxxInstance()来实例化Format类的对象(适用于子类是抽象类的情况)

format=NumberFormat.getCurrencyInstance();

format=DateFormat.getDateInstance();

4. DateFormat类

DateFormat
是Format类的抽象子类,
有一些static的getXxxxInstance()方法来获得实例。通过设置结果的长度和地区,来获得日期,时间等的格式。

DateFormat不太经常使用。

通常会使用SimpleDateFormat子类。newSimpleDateFormat("yyyy-MM-dd")或newSimpleDateFormat("yyyy-MM-dd
HH:mm:ss")等。来获得经常使用的时间格式。

能够通过设置的getXxxxInstance()方法来实例化DateFormat类的对象。

DateFormat类中另一些static的字段,如WEEK_OF_MONTH_FIELD,WEEK_OF_YEAR_FIELD。

api上说在FieldPosition中使用,用于对齐。

java.util.Calendar也是日期操作相关的类,实现类为GregorianCalendar。

主要对日期进行操作。注意add方法和roll方法的差别。roll方法不更改更大的字段。另一些静态的变量DAY_OF_MONTH,DAY_OF_WEEK等。在get/set/add/roll方法中使用。

4.1DateFormat的使用方法举例:


Date d =
new Date();

String s;

/** Date类的格式:
Sat Aug 30 13:05:56 CST 2014
*/

System.out.println(d);

System.out.println("******************************************");

/**
输出格式: 2014-8-30
*/

s = DateFormat.getDateInstance().format(d);

System.out.println(s);

/**
输出格式: 2014-8-30
*/

s = DateFormat.getDateInstance(DateFormat.DEFAULT).format(d);

System.out.println(s);

/**
输出格式: 2014年8月30日 星期六 */

s = DateFormat.getDateInstance(DateFormat.FULL).format(d);

System.out.println(s);

/**
输出格式: 2014-8-30
*/

s = DateFormat.getDateInstance(DateFormat.MEDIUM).format(d);

System.out.println(s);

/**
输出格式: 14-8-30
*/

s = DateFormat.getDateInstance(DateFormat.SHORT).format(d);

System.out.println(s);

/**
输出格式: 2014-08-30
01:02:02 */

DateFormat format1 =
new SimpleDateFormat(

"yyyy-MM-dd hh:mm:ss");

s = format1.format(new
Date());

System.out.println(s);

5. NumberFormat类:

NumberFormat
是全部数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat
还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。

NumberFormat
可用于格式化和解析不论什么语言环境的数值。使代码可以全然独立于小数点、千位分隔符甚至所用特定小数位数的语言环境约定,并与数值格式是否为偶小数无关。

5.1NumberFormat的使用方法举例:


double num=868326.81472676;

double
test=3.1415926;

//返回当前缺省语言环境的缺省数值格式。

/*输出结果:868,326.815*/

String myString = NumberFormat.getInstance().format(num);

System.out.println(myString);

//getCurrencyInstance()返回当前缺省语言环境的通用货币格式/*输出结果:¥868,326.81*/

myString = NumberFormat.getCurrencyInstance().format(num);

System.out.println(myString);

//getNumberInstance()
返回当前缺省语言环境的通用数值格式/*输出结果:868,326.815*/。

myString = NumberFormat.getNumberInstance().format(num);

System.out.println(myString);

//getPercentInstance() 
返回当前缺省语言环境的百分比格式。/*输出结果:314%*/

myString = NumberFormat.getPercentInstance().format(test);

System.out.println(myString);

NumberFormat format = NumberFormat.getInstance();

//
设置数值的小数部分同意的最大位数。

/*输出结果:868,326.815 */

format.setMaximumFractionDigits( 3 );

System.out.println(format.format(num));

//
设置数值的整数部分同意的最大位数。 /*输出结果:26.815 */

format.setMaximumIntegerDigits(2);

System.out.println(format.format(num));

//
设置数值的小数部分同意的最小位数。 /*输出结果:26.815 */

format.setMinimumFractionDigits(2);

System.out.println(format.format(num));

//
设置数值的整数部分同意的最小位数。

/*输出结果:26.815 */

format.setMinimumIntegerDigits(2);

System.out.println(format.format(num));

6. MessageFormat类:

MessageFormat
提供了以与语言无关方式生成连接消息的方式。使用此方法构造向终端用户显示的消息。

MessageFormat
获取一组对象。格式化这些对象。然后将格式化后的字符串插入到模式中的适当位置。

注:MessageFormat
不同于其它Format
类,由于MessageFormat
对象是用其构造方法之中的一个创建的(而不是使用getInstance
样式的工厂方法创建的)。

工厂方法没必要的,由于MessageFormat
本身不实现特定于语言环境的行为。

特定于语言环境的行为是由所提供的模式和用于已插入參数的子格式来定义的。

时间: 2024-08-06 20:03:17

Format类及其子类功能和使用方法具体解释的相关文章

Format类及其子类功能和用法详解

1.   Format类结构: ·        java.lang.Object ·        java.text.Format ·        All Implemented Interfaces: Serializable, Cloneable Direct Known Subclasses: DateFormat, MessageFormat, NumberFormat public abstract class Format extends Object implements S

基类与子类之间的引用转换

(一) 从该源代码中可看出,子类可直接赋给基类(“基类变量=子类对象”):基类的引用类型要传递给子类必须通过强制转换(“子类变量=(子类名)基类对象”): 子类之间不可以进行转换. (二) 该源代码可总结出: 当基类与子类有同名的变量时,以引用变量为准,引用变量是谁,就调用哪个类的变量:当基类与子类有同名的方法时,以具体对象类型为准,对象是什么类型,就调用哪个类的方法:基类与子类之间的转换:基类变量可以直接引用子类对象,或者直接将子类对象赋给基类变量:但是基类对象要转换为子类变量时,就必须进行强

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,

编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount().定义Fish类,是Animal类的子类,统计鱼的数量 count,获得鱼数量的方法 getCount().定义Tiger类,是Animal类的子类,统计老虎的

创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S

题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar: 在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象: 如是2,生成Rectangle对象:如是3,生成Star对象).然后将Vector中元素依次取出,判断其是否为Star类.如是返回其

c#图像处理入门(-bitmap类和图像像素值获取方法)

c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和

python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法

前言 换了新工作,踏足于python语言的开发,也把自己的学习过程记录下来. 一,递归获取某一父类的所有子类 all_subclasses = {'0': '0'} def get_all_classes(model): """ 获取父类的所有子类 """ for subclass in model.__subclasses__(): # print(subclass._meta.abstract) if (not (subclass.__nam

子类重载父类的方法“parent:方法名”

在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写. 子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承过来不就可以直接使用吗?为什么还要重载呢?因为有一些情况我们必须要覆盖的.例如,有一个“鸟”类,在这个类中定义了鸟的通用方法“飞翔”.将“鸵鸟”类作为它的子类,就会将“飞翔”的方法继承过来,但只要一调用“鸵鸟”

Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访问, 类,方法,成员变量 private 权限修饰符,私有访问, 方法,成员变量 static 静态修饰符 方法,成员变量 final 最终修饰符 类,方法,成员变量,局部变量 abstract 抽象修饰符 类 ,方法 我们编写程序时,权限修饰符一般放于所有修饰符之前,不同的权限修饰