十一章总结

Java是一种面向对象语言,java中的类把方法与数据链接在一起,构成了自包含式的处理单元为u可提升java程序的开发效率,java的类包中提供了很多常用类以方便开发人员使用。无所谓,术业有专攻,在常用类中主要包含将基本数据类型封装起来的包装类,解决常见数学问题的Math类,生成随机数的Random类,以及处理日期时间的相关类

 11.1包装类

ava是一中面向对象语言,但在java中不能定义基本数据类型对象,为了能将基本数据类型是为对象进行处理,jaba提出了包装类的概念,他主要是将基本数据类型封装在包装类中,如int类型的包装类Intger,boolean型的包装类boolean等这样便可以把这些基本数据类型转换为对象进行处理java中的包装类及其对象的基本数据类型如下表所示

Integer类

java.lang包中的Integer类 Byte类  Short类和Long类分别将基础数据类型  int,byte,short,long封装成同一个类由于这些类都是Number类中的子类,区别就是凤凰不同的数据类型,其包含的方法基本相同,所以本章节以Integer类为例讲解整数类型包装类。

Ineteger类在对象包装了一个基本数据类型int的值,该类的第项包含一个int类型的字符,此外该类提供了多个方法,能在int类型和String类型之间呼喊转换,同时还提供其他一些处理int类型时非常有用的常量和方法Integer类常用方式如表11.2所示
 

方法功能描述
valueOf(String str)返回保存指定的Steing值得Integer对象
parseInt(String str)返回包含在由str指定得字符串中的数字的等加整数值
toString()返回一个表示Integer值的String对象
toBinaryString(int i)以二进制无符号整数形式返回一个整数参数的字符串表达形式

toHexString(int i

以十六进制无符号整数形式返回一个整数参数的字符串表示形式
toOctalString(int i)以八进制无符号整数形式返回一个整数参数的字符串表示形式
equals(Object IntegerObj)比较此对象与指定的对象是否相等
intValue以int型返回此Integer对象
shortValue()以short型返回Integer对象
byteValue()以byte型返回Integer对象
compareTo(Integer anotherInterger)在数字上比较两个Integer对象。如果这两个值相等  则返回0 如果调用的对象值小于anptherInteger的数值,则返回负值;如果调用对象的数值大于anptherInteger的数值,则返回正值

下面通过一个实例演示Integer类的常用方法的使用

 Integer提供了以下4个常量

MAX_VAULE;表示int类型可取的最大值即2^31-1

MIN_UVLUE;表示int类型可取的最小值即2^31

SIZE;用来以二进制补码形式表示int值的位数

TYPE;表示基本类型int的Class实例

 Double类

Double类和Float类是对double,float基本类型的封装,他们都是Number类的子类都是浮点数进行操作,所以常用方法基本相同,本届将对Double类进行讲解 。对于Float类可以参考Double类的相关内容

Double类在对象中欧给包含一个基本数据位Double类型,每个Double的对象都包含了一个double类型的字段。此外,该类还提供了多个方法,可以将double类型转换为String类型,将String类型转换为double类型,也提供了其他的一些处理double类型时有用的常量和方法 Double类的常用方法如下表所示

方法

功能描述
valueOf(String str)返回保存用参数字符串str表示的double值得Double对象
parseDouble(Stirng s)返回一个新的double值,该值被初始化为用指定String表示得值,这与Double类的valueOf方法一样
doubleValue()以double形式返回此Double对象
isNaN()如果此double值是非数字(NaN)值,则返回true;否则返回false
intValue以int型返回double类型
byteValue以byte型返回Double对象值(通过强制转换)
longValue以long型返回double的值(通过强制转换为long型)
compareTo(Double d)对两个Double对象进行数值比较。如果两个值相等,则返回0;如果调用对象的数值小于d的数值,则返回负值;如果调用对象的数值大于d的值则返回正值
equals()返回此Double对象的字符串表示形式
toHexString(double d)返回double参数的十六进制字符串表达形式

通过下面实例显示Double类的常用方法的使用


 

 MAX_EXPONENT:返回int值,表示有限double变量可能具有最大指数

MIN_EXPONENT:返回int值,表示准确化double变量可能具有最小的指数

NEGATIVE_INFINITY:返回double值,,表示爆粗才能double类型的负无穷大值的常量

POSITIVE_INFINITY:返回double值吧,表示保存double类型的正无穷的常量


Boolean类

Boolean类将基本类型为boolean的值包装在一个对象中,一个Boolean类型的对象只包含一个类型为boolean的字段。此外此类还为了boolean类型和String类型的相互转换提供了许多方法,并提供了处理boolean类型时非常有用的其他一些常量和方法。Boolean类的常用方法如表所示

方法功能描述
booleanValue()将Boolean对象的值以对相应的boolean值返回
equals(Object obj)判断调用该方法的对象与obj是否相等,当且仅当参数不是null;而且与调用该方法的对象一样都表示同一个boolean值得Boolean对象时才返回true
parseBoolean(String s)将字符串参数解析为boolean值
toString()返回表示参数该boolean值为String对象
valueOf()返回一个用指定得字符串表示的boolean值

Boolean的常用方法

 

Boolemn 提供了以下3个常量:
TRUE:对应基值 true的 Boolean 对象。
FALSE:对应基值 flse的 Boolean 对象。

MTYPE:基本类型boolean的Class 对象 。

Character类

Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character类提供了很多方法来完成对字符的操作,常用的方法如表11.5所示。

表11.5Character类的常用方式

方法功能描述
valueOf(char a)返回保存指定 char 值的 Character 对象
compareTo(Character anotherCharacter)根据数字比较两个Character 对象,若这两个对象相等则返回0
 equals(Object obj)将调用该方法的对象与指定的对象相比较
toUpperCase(char ch)将字符参数转换为大写
toLowerCase(char ch)将字符参数转换为小写
 toString()返回一个表示指定char值的 String对象
 charValue()返回此 Charact ter 对象的值
 isUpperCase(char ch)判断指定字符是否为大写字符
isLowerCase(char ch)判断指定字符是否为小写字符
isLetter(char ch)判断指定字符是否为字母
isDigit(char ch)判断指定字符是否为数字

 Character类提供了大量表示特定字符的常量,例如:
ONNECTOR_PUNCTUATION:返回 byte 型值,表示Unicode规范中的常规类别“Pc”。 UNASSIGNED:返回byte 型值,表示 Unicode 规范中的常规类别“Cn”。
TITLECASE_LETTER:返回 byte型值,表示Unicode规范中的常规类别“Lt”。


Number类
前面介绍了Java包装,对包装类,它们有一个共同的父类--Number类,该半是一个抽象类,它是Byte、Integer、Short、Long、Float和Double类的父类,其子类必须提供将示的数值转换为byte、int、short、long、float 和 double的方法。例如,doubleValueO方法返回双精度点值,floatValueO方法返回单精度浮点值,这些方法如表 11.6 所示。

 表11.6 数值型包 包装类的共有方法 

方法功能描述 
byteValue()以byte形式返回指定的数值
intValue()以int形式返回指定的数值
floatValue()以float形式返回指定的数值 
shortValue()以short形式返回指定的数值
longValue()以long形式返回指定的数值
doubleValue()以double形式返回指定的数值

数字处理

在Jav数基本算的Math,该类包括常用的数运算方法,如三角函数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之提供了一些常用的数学常量,如PI、E。将讲解Math一常用法。
在实际开发中,随机数的使用是很普遍的,所要掌握生成随机数的操作。在 Java中主要提供了两种生成随机数的方式,分别为调用Mathrandom法成随机数和调用Random类生成各种据类型的随机数。
在Java 字操,即javamathBigInteger 类与java.math.BigDecimal 类。这个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。     

 数字格式化


数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字数字格式化操作主要针对的是浮点型数据,包括double 型和float型数据。在Java 中使用java.te DecimalFormat格式化数字,本节将着重讲解DecimalFormat类。
在Java中,没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001并且小于100000,使以常规小数形式表示。

如果数据绝对值小于0.001或者大于1000,使用科学记数法表示。


由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java中,可以使用DecimalFormat类进行格式化操作。
DecimalFormat 类是 NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下,可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的 applyPattern()方法来实现数字格式化。

表11.7DecimalFormat类中的特殊 字符及其说明 

字符说 明
0代表阿拉伯数字,使用特殊字符“0”表示数字的一位阿拍拉伯数字,如果该位不存在数字,则显示0
#代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉位伯数字,如果该位存在数字,则显示字符;如果该位不存在数字,则不显示
.小数分隔符或货币小数分隔符
-负号
,分组分隔符
E分隔科学记数法中的尾数和指数 
%放置在数字的前缀或后缀,将数字乘以 100 显示为百分数 
\u2030放置在数字的前缀或后缀,将数字乘以 1000 显示为千分数 
\u00A4放置在数字的前缀或后缀,作为货币记号 
'单引号,当上述特殊字符出现在数字中时,应立为特殊符号添加单引号,系统会将此符号视为普通符号处理

 上述代码中setGroupingSize()方法甚至格式化数字的分组大小 setGroupingSize()方法设置时否可以对数字进行分组操作,为了使读者更好地理解这两个方法地使用来看下面的实例

Math类

 Mad类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大售、最小值,以及平均值的数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便。可以使用如下形式调用:

Math.数学方法

在Mth用量,些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:


Math.Pi 
Math.E

1.三角函数方法
Math
public static double sin(double a):返回角的三角正弦。

public static double cos(double a):返回角的三角余弦。

public static double tan(double a):返回角的三角正切。

public static double asin(double a):返回一个值的反正弦。

public static double acos(double a):返回一个值的反余弦。

public static double atan(double a):返回一个值的反正切。
public static double toRadians(double angdeg):将角度转换为弧度。

a public static double toDegrees(double angrad):将弧度转换为角度。
以上每个方法的参数和返回值都是 double 型的。将这些方法的参数的值设置为double 型是有一定道理的,参代度来现,180弧度,所以180”可以使用弧度来表元除了可以获取角的正弦、余弦、正切、反正弦、反余弦、反正切,Math 类还提供了角度和弧度相互转的方法toRadiansO和toDegrees。但需要注意的是,角度与弧度的转换通常是不精确的。
例题11.7在java代码中进行三角函数地运算

2.指数函数方法
Math类中与指数相关的函数方法如下。
 public static double exp(doublea):用于获取e的a次方,即取e。

public static double log(doublea):用于取自然对数,即取 lna 的值。

public static double log10(doublea):用于取底数为10的a的对数。
public static double sqrt(double a):用于取a的平方根,其中a的值不能为负值。

public static double cbrt(double a):用于取a的立方根。
public static double pow(doubleadoubleb):用于取a的b次方。
指数运算包括求方根、取对数以及求n次方的算。为了使读者更好地理解这些运算函数方法法,下面举例说明。

11.8在java中进行指数函数运算

 

3.取整函数方法

在具体的问题中,取整操作使用也很普遍,所以Java在Math类中添加了数字取整方法。Math类
public static double ceil(double a):返回大于等于参数的最小整数。向上事整
中主要包括以下几种取整方法:
public static double floor(double a):返回小于等于参数的最大整数。向下轻
public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
public static int round(float a):将参数加上 0.5 后返回与参数最近的整数。
public static long round(double a):将参数加上 0.5后返回与参数最近的整数,然后强制转换为长整型。

例题11.9个场景下取整数函数的运算结果

 

4.取最大值、最小值、绝对值函数方法
在程序中最常用的方法就是取最大值、最小值、绝对值等, Math类中包括的操作方法如下 

Math public static double max(double a,double b):取a与b之间的最大值。

public static int min(int a,intb):取a与b之间的最小值,参数为整型。
public static long min(long a,long b):取a与b之间的最小值,参数为长整型。
public static float min(float a,float b):取a与b之间的最小值,参数为单精度浮点型。
public static double min(double a,double b):取a与b之间的最小值,参数为双精度浮点型。  publicstatic int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
 public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值。

Random 类是JDK随成器类,通例化一个Random 对象创建一个随机数生
器,语法如下:

Randomr=new Random():

以这种方式实例化对象时,Java 编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同的随机数。
用户也可以在实例化Random类对象时,设置随机数生成器的种子。语法如下:
 

Randomr=new Random(seedValue);
r:  Random类对象。
seedValue:随机数生成器的种子。
在Random 类中,提供了获取各种数据类型随机数的方法,下面列举几个常用的方法: public int nextIntO):返回一个随机整数。
 public int nextInt(intn):返回大于等于0且小于n的随机整数。
M public long nextLong0):返回一个随机长整型值。 
 public boolean nextBoolean():返回一个随机布尔型值。
public float nextFloat):返回一个随机单精度浮点型值。
public double nextDouble():返回一个随机双精度浮点型值。
public double nextGaussian():返回一个概率密度为高斯分布的双精度浮点型值。

例题11.11获取不同取值范围,不同类型的随机数

 

Biglnteger类
Biginteger类较Integer数字围大得多。文介绍Integerint in,Ineger无法实现了,所以Java中提供 Biglnteger类来处理更大的数字。BigInteger类支持意精度的整数,也就是说,在运算中igne类可以准确地表示任何大小的整数值而不会丢失信息。
在BigIneger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数最大公约数以及判断是否为质数等操作。
使用BigInteger 类,可以实例化一个BigInteger 对象,并自动调用相应的构造函数。Biglnteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将2转换为BigInteger类型,可以使用以下语句进行初始化操作:

Biginteger twolnstance=new BigInteger("2")
下面列举了 Biginteger类中常用的几种运算方法

spublic BigInteger add(BigInteger val):做加法运算。

s publie Biglnteger subtract(BigInteger val):做减法运算。

public Biginteger multiply(BigInteger val):做乘法运算
public Biginteger divide(BigInteger val):做除法运算。

3publ Biginteger remainder(BigInteger val):做取余操作。

public Biginteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。

public BigInteger powint exponent):进行取参数的 exponent 次方操作。  
 public BigInteger negateO:取相反数。
public BigIntegershifLef(intn):将数字左移n位,如果为负n数,做右操作

public BigInteger shifRight(int n):将数字右移n位,如果n为负数,做左移操作

public BigInteger and(BigInteger val):做与操作。

public BigInteger or BigInteger val):做或操作。
 public int compareTo(BigInteger val):做数字比较操作。
public boolean equals(Object x): 当参数x是BigInteger 类型的数字并且数值与对象实例的数佳
相等时,返回true。
 public BigInteger min(BigInteger val):返回较小的数值。

 public BigInteger max(BigInteger val):返回较大的数值。

例题11.12使用BigInteger类进行数学运算

BigDecimal类

Decimal 类和BigInteer能实现大字的算不同的是BigDecimal类加入了小数的概念般的 float 型和 double型数据用来做科学计算或工程计算,但由于在商业计算中要求数字精比较高,所以要用到BigDecimal 类。igDecimal支持何精度的定点数,可以用它来精确计算货值。在BigDecimal类中,常用的两个构造方法如表 11.8所示。
表11.8BigDecimal类

构造方法功能说明
BigDecimal(double val)实例化时将双精度浮点型转换为BigDecimal类型 
BigDecimal(String val)实例化时将字符串形式转换为BigDecimal类型

BigDecimal类型的数字可以用来做超大的浮点数的运算,如假、减、乘、除等。但是在所有运算中除法是最复杂的,因为在除不尽的情况下小数点后的末尾的处理需要考虑BigDecimal类实现的加、减、乘、除的方法如表所示

表11.9BigDecimal类实实现的加、减、乘、除的方法
 

方法功能说明
add(BigDecimal augend)做加法操作
subtract(BigDecimal subtrahend)做减法操作 
multiply(BigDecimal multiplicand)做乘法操作
divide(BigDecimal divisorint scale,RoundingModeroundingMode)做除法操作,方法中3个参数分别代表除数、商的小数点后的位 数、 近似处理模式

在上述方法中 BigDecimal类中divaude()方法有多种设置用于返回商小数点后的末尾的处理这些模式的名称与含义如表11.10所示

表11.10 BigDecimal 类中的divide()方法的多种处理模式
 

模式含义
RoundingMode.UP商的最后一位如果大于 0,则向前进位,正负数都如此 
RoundingMode.DOWN商的最后一位无论是什么数字都省略
RoundingMode.CEILING商如果是正数,按照UP式理;如果是负数,按照DOWN模式处理。这种模式的处理都会使近似值大于等于实际值
RoundingMode.FLOOR与CEILING模式相反,商如果是正数,按照 DOWN模式处理;商如果是负数,则按照UP模式处理。这种模式的处理都会使近似值小于等于实际值
RoundingMode.HALF_DOWN对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;如果最后一位大于5,则做进位操作,如 7.5~7
RoundingMode.HALF_UP对商进行四舍五入操作,如果商的最后一位小于5则舍弃;如果大于等于5,进行进位操作,如 7.5~8
RoundingMode.HALF_EVEN如果商的倒数第二位为奇数,则按照 HALF_UP模式处理;如果为偶数,则按照HALF DOWN模式处理,如7.5~8,8.5~8

例题11.13使用BigDecimal类进行数学运算

System类 

System类是JDK中提供的系统类,用final修饰的,所以不允许被继承。System 类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。System 类提供的较常用方法如表11.11 所示。本节重点讲解利用 System类控制台输出和计时这两个操作。

表11.11 System类提供的常用方法
 

方法功能描述 
currentTimeMillis()返回以毫秒为单位的当前时间 
exit(int status)通过启动虚拟机的关闭序列,终止当前正在运行的Java虚拟机。此方法从不正常返回。 可以将变量作为一个状态码。根据惯例,非零的状态码表示非正常终止;0表示正常 终止
Map<String,String> getenv()返回一个不能修改的当前系统环境的字符串映射视图 
getenv(String name)获取指定的环境变量值
getPropertiesO确定当前的系统属性 
getProperty(String key)获取用指定键描述的系统属性
setIn(InputStream in) 重新分配“标准”输入流

控制台输出字符

System类提供标准输入标准输出和错误输出流,也就是说,System类提供了3个静态对 out和enr。书中的代码多次使用了这些对象,最常见的就是 out 对象。在控制台输出字符串,出的方法有两种,下面分别进行讲解。

1.不会自动换行的print()方法 printO方法的语法如下:

System.out.print("Hello!");

此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。
2.可以自动换行的printin()方法
printInO方法在print后面加上了“ln”后缀(就是line的简写),

语法如下: System.out.printin(“书籍是人类进步的阶梯!");

此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。 print()方法与println()方法输出的对比效果如表 11.12所示

表11.12 两种 输出方法的效果对比 

Java 语法运行结果Java语法运行结果 

System.out.print("左"); 

System.out.print("中");

System.out.print("右");

左中右

System.out.println("上"); 

System.out.println("中");

System.out.println("下");

综上所述,java输出换行的方法有以下两种

System.out.print("\n")//利用换行符\n实现换行

System.out.println()//空参数即可实现换行

System.currentTimeMillis()方法可以获取字1970年1月1日零点至今的毫秒数,虽然Date日期类也有类似的方法,但代码会System类多,所以System.currentTimeMillis()方法是为获取当前的毫秒数,最常用的方法是应为该方法的返回值精确到毫秒所以可以利用该方法来记录程序的运行时间

例题11.14查看一万次字符拼接所消耗的时间 

与C语言不同,Java 从台中读出用户输入的值,用的不是一行可以直接使用的代码,而是由一个叫 Scanner 来现canner英文译就是扫描仪,它的用途就和现实生活的扫描仪一可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台输 System.in 表示从控制台输入,让 Scanner 扫描 System.in 就可以获取用户输入的值了使用Scanner类首先要引入该类,其语法如下:

import java.util.Scanner; //引入Scanner类 

canner提供11.13种常用的方法,通过这些方法可以获取控制台中输入的不类型的值

表11.13 Sca nner 类的几个常用方法

方法名返回类型功能说明方法名返回类型功能说明
next()String查找并返回此扫描器获取的下一个完整标记nextInt()int扫描一个值返回int类型
nextBoolean()boolean扫描一个布尔值标记并达返回nextLine()String扫描一个值返回 String类型 
nextBtye()byte扫描一个值返回 byte类型nextShort()short扫描一个值返回short类型 
nextFloat()double扫描一个值返回double类型nextShort()short扫描一个值返回short类型
nextFloatOfloat扫描一个值返回float类型close()void关闭此扫描器

使用Scanner类扫描台的代码图下;

Scanner sc=new Scanner(System.in)
 Scanner.in表示控制台输入流在创建Scanner对象时把System.out.println作为参数,这样创建出的扫描对象的目标就是用户在控制台中输入的内容,在通过表11.13中列出的方法将用户输入的内容转为java的数据类型就可以对数据进行加工显示了

11.15猜数字游戏

日期时间类

在程序开发中,经常需要处理日期时间,java中提供了专门的日期时间类来处理类来处理相应的问题,本节将对java中的日期时间类进行详细讲解 

Date类

Date,用造建对,其构造法其明如表 11.14所示。

表1114Date类的构造方法及其说明
 

构造方法说 明 
Date()分配Date对象并初始化此对象,以表示分 配它的时间(精确到毫秒)
Date(long date)分配Date对象并初始化此对象,以表示自标准基准时间(即1970年1月1日00:00:00GMT)起经过指定毫秒数date后的时间

例如,使用Date类的第2种构造方法创建一个 Date 类的对象,代码如下:
 

long timeMillis=System.currentTimeMillis(): //当前系统时间所经历的毫秒数 
Date date=new Date(timeMillis):

上述代码中的 System 类的curenTimeMilis法要用来获取当前系统时间距标准基准时间的数。另外,这里需要注意的是,创建 Date 对象时使用的是 long 型整数,而不是 double型,这主
型可能会损失精度。Date 类的常用方法及其说明如表11.15所示。
 

方法说明
after(Date when)测试当前日期是否在指定的日期之后
before(Date when)测试当前日期是否在指定的日期之前
getTime()获得自1970年1月1日00:00 0:00 GMT 开始到现在所经过的毫秒数 
setTime(long time)设置当前Date对象所表示的日期时间值,该值用以表示1970年1月1日 00:00:00GMT以后time毫秒的时间点

例题11.16获取当前的日期和时间并输出

日期时间格式化

如果在村序中直接输出Datc 对象,示的是“Mon Feb 29 17:39:50 CST 2016”这种格式的日m间,何其显示为2016-02-29或者173950这样的日期时间格式呢?Java中提做Danefort类来实现类似的功能,

Datefocmat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化 
Datefarmat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期计 F化包HORTMEDIUMLONG和FULL4种:

E SHORT:完全为数字,如 12.13.52或3:30pm

 MEDIUM:较长,如Jan121952
Z LONG:更长,如January12,1952或3:30:32pm
ZFULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST.
另外,使用DaeFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建 Daeeformat类的一个对象,由于它是抽象类,因此可以使用其静态方法getDateInstance(进行创建,语法如下:
 

Dadsfomat df =DateFormat.getDameInstance();

使用getDaeinstance()方法获取的是所在国家或地区的标准日期格式。另外,DateFormat类还提供了一些其他静态方注。例如,使用getTimeInstance()方法可获取所在国家或地区的时间格式,使用 geDaeTimelnsance()方法可获取日期和时间格式。DateFormat类的常用方法及其说明如表11.16所示

表11.16 DateForma at类的常用方法及其说明
 

方法说明
format(Date date)将一个Date 对 象实例格式化为日期/时间字符串 
getCalendar()获取与此日期/时 时间格式器关联的日历
getDateInstance()获取日期格式器 该格式器具有默认语言环境的默认格式化风格
getDateTimeInstance()获取日期/时间格 式器,该格式器具有默认语言环境的默认格式化风格
getInstance()获取为日期和时间使用 SHORT风格的默认日期/时间格式器
getTimeInstance()获取时间格式器,该格式器具有默认语言环境的默认格式化风格
parse(String source)将字符串解析成一个日期,并返回这个日期的 Date 对象

例如,将当前日期按照DateFormat类默认格式输出

: DateFormat df =DateFormat.getinstance(); 
System.out.printin(df.format(new Date()));
结果如下:

2021/2/19 上午 9:59

输出长类型格式的当前时间:

DateFormat df =DateFormat.getTimeInstance(DateFormat.LONG);
 
 System.out.printin(df.format(new Date()));
结果如下

CST 上午10:00:33

输出长类型格式的当前日期:

DateFormat df =DateFormat.getDatelnstance(DateFormat.LONG); System.out.printin(df.format(new Date()));

结果如下:

2021年2月19日

输出长类型格式的当前日期和时间:

DateFormat df=DateFormatgetDateTimeInstance(DateFormat.LONGDateFormat.LONG); System.out.println(dfformat(new Date()));
结果如下:

2021年2月19号 CST上午10:01:12
由于 DateFormat一抽象类,能用new创建实例对象。因此,除了使用getXXXInstanceO方法创建其对象,还可以使用其子类,如 SimpleDateFormat 类,该类是一个以与语言环境相关的方来格式化和分析日期的具体类,它允许进行格式化(日期一文本)、分析(文本→日期)和规范化。
SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式字符如表11.17所示。

表11.17 SimpleDateFormat的格式化字符 

字母日期或时间元素类型示例 
GEra 标志符TextAD
yYear1996; 96
M 年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number
D年中的天数Number189 
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm标记TextPM
H一天中的小时数(0~23)Number0
ham/pm中的小时数(1~12)Number12
k一天中的小时数(1~24)Number24
Kam/pm中的小时数(0~11)Number0
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific Standard Time; PST; GMT-08:00
Z时区RFC 822 time zone-800 

通常表11.17 中的字符出现的数量会影响数字的格式。例如,yyyy表示4位年份,这样输入会显示2021:y表示,这样输入会显示为21:只有一个y的话,会按照yyyy显示;如果超过 y,如yyyyyy,会在4位年份左侧补0,结果为02021常的日期时间格式如表11.18

表11.18常用时间格式
 

日期时间对应的格式
2021/10/25yyyy/MM/dd
2021.10.25yyyy.MM.dd
2021-09-15 13:30:25yyyy-MM-dd HHmm:ss 
2021年10月24日0时25分07秒星期日yyyy年MM月dd日HH时mm分ss秒EEEE 
下午3时ah 时 
今年已经过去了297天今年已经过去了D天

例题11.17用中文形式打印当前的日期和时间

打开JavaAPI档看javauilDate提供的大部分法都已经过时了,因为Date类设切没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此JDK 提供了新的时间处理类--Calendar日历类。
Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF MONTHHOU日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protecte Calendar提供了一个类方法 getInstanceO,以获得此类型的一个通用的对象。Calendar getInstanceO方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如 Calendar rightNow=Calendar.getinstance();
说明
由于 Calendar 类是一个抽象类,不能用 new 创建实例对象,因此除了使用getInstance(方法创建其对象,如果需要创建其对象,必须使用其子类,

如 GregorianCalendar 类字段及其说明如表11.19所示。

表11.19 Calendar类提供的常用字段及其说明 
 

字段名说明
DATEget 和 set 的字段数字,指示一个月中的某天 
DAY_OF_MONTHget 和 set 的字段数字,指示一个月中的某天 
DAY_OF_WEEKget 和 set 的字段数字,指示一个星期中的某天
DAY_OF_WEEK IN MONTHget和set的字段 数字,指示当前月中的第几个星期
DAY_OF_YEARget 和 set 的字段 数字,指示当前年中的天数
HOURget 和 set 的字段 数字,指示上午或下午的小时
HOUR_OF_DAYget和set的字段 数字,指示一天中的小时
MILLISECONDget和set的字段类 数字,指示一秒中的毫秒  
MINUTEget 和 set 的字段 数字,指示一小时中的分钟 
MONTH指示月份的get和 set的字段数字 
SECONDget 和 set 的字段类 数字,指示一分钟中的秒 
time日历的当前设置时时间,以毫秒为单位,表示自格林威治标准时间1970年1月1日0:00:00后经过的时间
WEEK_OF_MONTHget 和 set 的字段数 数字,指示当前月中的星期数
WEEK_OF_YEARget和set的字段数 数字,指示当前年中的星期数 
YEAR指示年的 get 和 set的字段数字

11.20

方法说明
 add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
after(Object when)判断此Calendar示时间是否指定Object表示时间之后,回判断结果判断此
before(Object when)判断此Calendar示时间是否指定Object表示时间之后,回判断结果判断此
get(int field)返回给定日历字段的值
 getInstance()使用默认时区和语言环境获得一个日历
getTime()返回一个表示此Calendar对时间值从现在的毫秒偏移量)的Date 对象
getTimeInMillis()返回此 Calendar 对象的时间值,以毫秒为单位
roll(int field,boolean up)在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段
set(int field, int value)将给定的日历字段设置为给定值
set(int year, int month, int date)设置日历字段YEAR、MONTH和DAY_OF_MONTH 的值
set(int year, int month int date. int hourOfDay, int minute)设置日历字段YEAR、MONTH、DAY_OF_MONTHHOUR_OF DAY和MINUTE的值
set(int year. int month. int date. int hourOfDay, int minute, int second)设置字段YEAR、MONTH、DAY OF MONTHHOUR、MINUTE和SECOND的值
setTime(Date date)使用给定的Date 对象设置此Calendar对象的时间
 setTimeInMillis(long millis)用给定的long 值设置此Calendar对象的当前时间值

例题11.18今天离中华人名共和国成立100周年差多少天

最后对Calendar类的使用做出几点总结:
cset(CalendarDAY_OFMONH)获取的是上个月的最后一天,所以调用前需要将月份往后
加一个月。
CalendarMONTH的第一个月使用0记录的,所以在获得月份数字后要加1。44年和日是从开始记录的,不需要加1。
CalendarDAY_OF_WEEK 的第一天是周日,周一是第二天,周六是最后一天。

Runtime类

Runtime 类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道, Java 程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime类不能使用 new关键字创建
实例,只能通过Runtime.getRuntime()方法获取实例。 制台 
Runtime类的常用方法如表11.21所示,本节将重点讲解利用Runtime类执行本地命令和查看Java虚拟机所占内存这两个操作。

方法功能描述 
getRuntime()区回与当前Java应用程序相关的运行时对象 
exec(String command)在单独的进程中执行指定的字符串命令
exec(String[] cmdarray)在单独的进程中执行指定命令和指令参数
totalMemory()返回Java虚拟机中的内存总量
freeMemory()返回Java虚拟机中的空闲内存量
load(String filename)加载作为动态库的指定文件名 
loadLibrary(String libname)加载具有指定库名的动态库 

执行本地命令

本地命令指的是操作系统的命令。例如,在Linux系统下就表示shell命令,在Windows系统下
表示cmd命令。

Runtime 类提供 execO方法让Java 代码可以执行系统的命令,execO方法有很多重载的形式,例如。 

Process exec(String command)
 Process exec(Stringlcmdarray)

 command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下:

Runtime.getRuntime().exec("javac hello.java");

使用第二种重载方式的代码如下:

String command[={"javac","hello.java" }; 
Runtime.getRuntime().exec(command);

exec()方法会返回一个 Process 对象。Process类是Java 中进程类,该类是抽象类,不能使用new
返回的信息。
关键字创建实例。Process 类的常用方法如表 11.22所示,开发可以使用getInputStream()方法获取进程返回的信息
 

方法功能描述方法功能描述
destroy()结束进程getInoutStream()获取进程的输入流
getErrorStram()获取进程的错误流getOutputStream()获取进程的输入流

例题11.19让java 程序执行Windows系统的help命令

 

Runtime 类可以通过freeMemory0方法查看当前 Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张

例题11.20监控虚拟机内存使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值