Java第十一章总结

Java是一种面向对象语言,Java中的类把方法与数据连接在一起,构成了自包含式的处理单元。

为了提升Java程序的开发效率,Java的类包中提供了很多常用类以方便开发人员使用。正所谓,

术业有专攻,在常用类中主要包含可以将基本数据类型封装起来的包装类、解决常见数学问题的

Math类、生成随机数的Random类,以及处理日期时间的相关类等。

本章的知识架构及重难点如下:

Java第十一章总结_第1张图片

11.1 包装类 

Java是一种面向对象语言,但在Java中不能定义基本数据类型的对象,为了能将基本数据类型视

为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int型

的包装类Integer、boolean型的包装类Boolean等,这样便可以把这些基本数据类型转换为对象进

行处理。Java中的包装类及其对应的基本数据类型如下表包装类及其对应的基本数据类型所示:

Java第十一章总结_第2张图片

11.1.1 lineger类

java.lang包中的Integer类、Byte类、Short类和Long类,分别将基本数据类型intbyte、short和long

封装成一个类,由于这些类都是Number类的子类,区别就是封装不同的数据类型,其包含的方法

基本相同,所以本节以Integer类为例讲解整数包装类

Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。此外,

该类提供了多个方法,能在int类型和String类型之间互相转换,同时还提供了其他一些处理int类型

时非常有用的常量和方法。Integer类的常用方法如下表Integer类的常用方法所示:

Java第十一章总结_第3张图片

 例题如下:

Java第十一章总结_第4张图片

Integer类提供了以下4个常量:

MAX_VALUE:表示int类型可取的最大值,即2(31次方)-1。

MIN_VALUE:表示int类型可取的最小值,即-2(31次方) 。

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

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

例题如下:

Java第十一章总结_第5张图片

 11.1.2、Double类

Double类和Float类是对double、float基本类型的封装,它们都是Number类的子类,都是对浮点数

进行操作,所以常用方法基本相同,本节将对Double类进行讲解。对于Float类,可以参考Double

类的相关内容Double类在对象中包装一个基本类型为double的值,每个Double类的对象都包含一

个double类型的字段。此外,该类还提供多个方法,可以将double类型转换为String类型,将

String类型转换为double类型,也提供了其他一些处理double类型时有用的常量和方法。Double类

的常用方法如下表Double类的常用方法所示:

Java第十一章总结_第6张图片

例题如下:

 Java第十一章总结_第7张图片 

Double类主要提供了以下常量:

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

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

VNEGATIVE_INFINITY:返回double值表示保存double类型的负无穷大值的常量。

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

11.1.3 Boolean类

Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型

为boolean的字段。此外,此类还为boolean类型和String类型的相互转换提供了许多方法,并提供

了处理boolean类型时非常有用的其他一些常量和方法。Boolean类的常用方法如下表Boolean类的

常用方法所示:

Java第十一章总结_第8张图片

例题如下:

Java第十一章总结_第9张图片

Boolean提供了以下3个常量:

TRUE:对应基值true的Boolean对象。

FALSE:对应基值false的Boolean对象。

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

11.1.4 Character类

Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小

写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然Character类提供了很多方

法来完成对字符的操作,常用的方法如下表Character类的常用方法所示:

Java第十一章总结_第10张图片

例题如下:

Java第十一章总结_第11张图片

Character类提供了大量表示特定字符的常量,例如:

CONNECTOR PUNCTUATION:返回byte型值,表示Unicode规范中的常规类别"Pc"。

UNASSIGNED:返回byte型值,表示Unicode规范中的常规类别"Cn"。

TITLECASE LETTER:返byte型值表示Unicode规范中的常规类别"Lt"。

11.1.5 Number类

前面介绍了Java中的包装类,对于数值型的包装类,它们有一个共同的父类--Number类,该类是

一个抽象类,它是Bytenteger、Short、Long、Float和Double类的父类,其子类必须提供将表示的

数值转换为byte、int、short、long、float和double的方法。例如,doubleValue(方法返回双精度浮

点值,floatValue0方法返回单精度浮点值,这些方法如下表数值型包装类的共有方法所示:

Java第十一章总结_第12张图片

Number类的方法分别被其各子类所实现,也就是说,在Number类的所有子类中都包含以上这几种方法。 

11.2 数字处理

在Java语言中,提供了一个执行数学基本运算的Math类,该类包括常用的数学运算方法如三角函

数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之外还提

供了一些常用的数学常量如PI、E等。本节将讲解Math类以及其中的一些常用方法。

在实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在Java中主要提供了两

种生成随机数的方式,分别为调用Math类的random0方法生成随机数和调用Random类生成各种数

据类型的随机数。

在Java中,还提供了大数字的操作类,即米java.math.Biglnteger与java.math.BigDecimal类。这两

个类用于高精度计算,其中Biglnteger类是针对大整数的处理类,而BigDecimal类则是针对大小数

的处理类。

11.2.1 数字格式化

数字格式化在解决实际问题时应用非常普遍如表示某超市的商品价格,需要保留两位有效数字。数

字格式化操作主要针对的是浮点型数据,包括double型和float型数据。在Java中使用

java.text.DecimalFormat格式化数字本节将着重讲解DecimalFormat类。

在Java中,没有格式化的数据遵循以下原则:

如果数据绝对值大于0.001并且小于<10000000,使以常规小数形式表示。

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

由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在Java

中,可以使用DecimalFormat类进行格式化操作。

DecimalFormat类是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式

化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一

般情况下,可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的

applyPattern(方法来实现数字格式化。

当格式化数字时,可在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一

定的特殊字符规则进行匹配。下表DecimalFormat类中的特殊字符及其说明列举了格式化模板中的

特殊字符及其所代表的含义:

Java第十一章总结_第13张图片

例题如下:

Java第十一章总结_第14张图片

在本实例中可以看到,代码的第一行使用import关键字将javatext.DecimalFormat这个类导入,这

是告知系统下面的代码将使用到DecimalFormat类。然后定义了两个格式化数字的方法,这两个方

法的参数都为两个,分别代表数字格式化模板和具体需要格式化的数字。虽然这两个方法都可以实

现数字的格式化,但采用的方式有所不 同SimgleFormat0)方法是在实例化DecimalFormat对象时

设置数字格式化模板,而UseApplyPatternMethodFormat()方法是在实例化DecimalFormat对象后

调用applyPattern0方法设置数字格式化模板。最后,在主方法中根据不同形式模板格式化数字。

在结果中可以看到以“0”特殊字符构成的模板进行格式化时,当数字某位不存在时将显示0;而以“#”

特殊字符构成的模板进行格式化操作时,格式化后的数字位数与数字本身位数一致。

11.2.2 Math类

Math类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最

大值、最小值,以及平均值函数方法。这些方法都被定义为static形式,所以在程序中应用比较简

便。可以使用如下形式调用:

Math.数学方法

在Math类中,除函数方法外还存在一些常用数学常量,如PI、E等。这些数学常量作为Math类的成

员变量出现,调用起来也很简单。可以使用如下形式调用: 

Math.PI

Math.E

Math类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法指数函数

方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。

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):返回一个值的反正切

publicstaticdoubletoRadians(double angdeg):将角度转换为弧度。

publicdouble

以上每个方法的参数和返回值都是double型的。将这些方法的参数的值设置为double型是有一定道

理的,参数以弧度代替角度来实现,其中1°等于i/180狐度,所以180°可以使用r弧度来表示。除了

可以获取角的正弦、余弦、正切、反正弦、反余弦、反正切,Math类还提供了角度和弧度相互转

换的方法toRadians0和toDegrees()。但需要注意的是,角度与弧度的转换通常是不精确的。

例题如下:

Java第十一章总结_第15张图片

通过运行结果可以看出,90°的正弦值为10°的余弦值为1,60°的正切与Math.sqrt(3)的值应该是一

致的,也就是取3的平方根。在结果中可以看到,第4~6行的值是基本相同的,这个值换算后正是

45°,t也就是获取的Math.sqrt(2)/2反正弦、反余弦值与1的反正切值都是45°。最后两行打印语句实

现的是角度和弧度的转换其中Math.toRadians(120.0)语句是获取120°的弧度值,而

Math.toDegrees(Math.PI/2)语句是获取r/2的角度值。读者可以将这些具体的值使用T的形式表示出

来,与上述结果应该是基本一致的,这些结果不能做到十分精确,因为T本身也是一个近似值。

2. 指数函数方法

Math类中与指数相关的函数方法如下:

public static double exp(double a):用于获取e的a次方,即取e(a的次方)。

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

public static double log10(doublea):用于取底数为10的a的对数。

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

public static double cbrt(double a):用于取a的立方根。

pow(doublepublic static double a,double b):用于取a的b次方。

指数运算包括求方根、取对数以及求n次方的运算。为了使读者更好地理解这些运算函数方法的用

法,例题如下:

Java第十一章总结_第16张图片

 在本实例中可以看到,使用Math类中的方法比较简单,直接使用Math类名调用相应的方法即可。

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后返回与参数最近的整数,然后强制转换为长整

型。

下面以1.5作为参数,获取取整函数的返回值。在坐标轴上表示如下图所示:

Java第十一章总结_第17张图片

 例题如下:

Java第十一章总结_第18张图片

4. 取最大值、最小值、绝对值函数方法

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

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

public static int min(int aint b):取a与b之间的最小值,参数为整型。

public static long min(long alongb):取a与b之间的最小值,参数为长整型。

public static float min(float afloat

public static double min(doublea,double b):取a与b之间的最小值,参数为双精度浮点型。

public static int abs(int a):返回整型v参数的绝对值。

public staticlong abs(long a):返回长整型参数的绝对值。

public static float abs(float a):返回单V精度浮点型参数的绝对值。

public static double abs(double a) :返回双精度浮点型参数的绝对值。

例题如下:

Java第十一章总结_第19张图片

11.2.3 Random类

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

Random r = new Random(); 

以这种方式实例化对象时,Java编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻

的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同

的随机数。用户也可以在实例化Random类对象时,设置随机数生成器的种子。语法如下:

Random r = new Random(seedValue); 

r:Random类对象。

seedValue:随机数生成器的种子。

在Random类中,提供了获取各种数据类型随机数的方法,下面列举几个常用的方法

public int nextlnt0:返回一个随机整数。

public int nextlnt(int n):返回大于等于0且小于n的随机整数。

public long nextLong():返回一个随机长整型值。

public boolean nextBoolean():返回一个随机布尔型值。

public float nextFloat(): 返回一个随机单精度浮点型值 。

public double nextGaussian():返回一V个概率密度为高斯分布的双精度浮点型值。

例题如下:

Java第十一章总结_第20张图片

 11.2.4 BigInteger类

BigInteger类的数字范围较Integer类的数字范围要大得多。前文介绍过Integer类是int的包装类,int

的最大值为2(31次方)-1,如果要计算更大的数字,使用Integer类就无法实现了,所以Java中提

供了Biglnteger类来处理更大的数字。Biglnteger类支持任意精度的整数,也就是说,在运算中

Biglnteger类可以准确地表示任何大小的整数值而不会丢失信息。

在Biglnteger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、

最大公约数以及判断是否为质数等操作。

使用BigInteger类,可以实例化一个Biglnteger对象,并自动调用相应的构造函数。Biglnteger类具

有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理是的数字。

例如,将2转换为Biglnteger类型,可以使用以下语句进行初始化操作:

BigInteger twoInstance = new BigInteger("2");

一旦创建了对象实例,就可以调用BigInteger类中的一些方法进行运算操作,包括基本的数学运算

和位运算以及一些取相反数、取绝对值等操作。下面列举了Biglnteger类中常用的几种运算方法:

public Biglnteger add(Biglntegerval):做加法运算。

public Biglnteger subtract(Biglnteger

public Biglnteger multiply(Biglnteger

public Biglnteger divide(Biglntegervval):做除法运算。

publicBiglntegerremainder(Biglnteger val):做取余操作。

publicBiglntegerll

个值为商,第二个值为余数。 

publicBiglntegerpow(intexponent):进行取参数的exponent次方操作。

public Biglnteger negate():取相反数。

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

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

public Biglnteger and(Biglntegerval):做与操作。

public Biglnteger or(Biglnteger val):做或操作。

public int compareTo(Biglntegerval):做数字比较操作。

public boolean equals(Object x):当参数x是Biglnteger类型的数字并且数值与对象实例的数值相等

时,返回true。

public Biglnteger min(Biglntegerval):返回较小的数值。

public Biglnteger max(Biglntegerval):返回较大的数值。

例题如下:

Java第十一章总结_第21张图片

11.2.5 BigDecimal类

BigDecimal类和Biglnteger类都能实现大数字的运算,不同的是BigDecimal类加入了小数的概念。

一般的float型和double型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精

度比较高,所以要用到BigDecimal类。BigDecimal类支持任何精度的定点数,可以用它来精确计算

货币值。在BigDecimal类中,常用的两个构造方法如下表BigDecimal类中的常用构造方法所示:

BigDecimal类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算

中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。BigDecimal类

实现的加、减、乘、除的方法如下表BigDecimal类实现的加、减表11.9乘、除的方法所示:

Java第十一章总结_第22张图片

在上述方法中,BigDecimal类中divide0方法有多种设置,用于返回商小数点后的末位的处理,这

些模式的名称与含义如下表BigDecimal类中的divide0方法的多种处理模式所示:

 Java第十一章总结_第23张图片

例题如下:

Java第十一章总结_第24张图片

11.3 System类

System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承。System类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。System类提供的较常用方法如表11.11所示。System提供的常用方法: 

Java第十一章总结_第25张图片

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

1. 不会自动换行的print0方法

print0方法的语法如下:

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

此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行。

2.可以自动换行的println0方法

println()方法在print后面加上了“n”后缀(就是line的简写),语法如下 :

System.out.println("书籍是人类进步的阶梯!");

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

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

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

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

11.3.2 计时

System.currentTimeMillis0方法可以获取自1970年1月1日零点至今的毫秒数。虽然Date日期类也有

类似的方法,但代码会比System类多,所以System.currentTimeMillis0方法是为获取当前毫秒数最

常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。例题

如下:

 Java第十一章总结_第26张图片

11.4 Scanner类 

与C语言不同,Java从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码而是由一

个叫Scanner的类来实现的Scanner英文直译就是扫描仪,它的用途就和现实生活的扫描仪一样,

可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台

输出System.in就表示从控制台输入,让Scanner扫描Systemin就可以获取用户输入的值了。使用

Scanner类首先要引入该类,其语法如下:

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

Scanner类提供了如下表所示的几种常用的方法,通过这些方法可以获取控制台中输入的不同

类型的值。 

Java第十一章总结_第27张图片

使用Scanner类扫描控制台的代码如下:

Scanner sc =new Scanner(System.in); 

System.in 表示控制台输入流,在创建Scanner对象时把System.in作为参数,这样创建出的扫描器

对象扫描的目标就是用户在控制台中输入的内容,再通过上表中列出的方法将用户输入的内容

转为Java的数据类型就可以对数据进行加工、显示了。

例题如下:

Java第十一章总结_第28张图片

11.5 日期时间类

在程序开发中,经常需要处理日期时间,Java中提供了专门的日期时间类来处理相应的问题。

11.5.1 Date类

Date类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象,其构造方法及其说明

如下表Date类的构造方法及其说明所示:

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

long timeMillis = System.currentTimeMillis();   //当时系统时间所经历的毫秒数

Date date = new Date(timeMillis);

上述代码中的System类的currentTimeMillis0方法主要用来获取当前系统时间距标准基准时间的毫

秒数。另外,这里需要注意的是,创建Date对象时使用的是long型整数,而不是double型,这主要

是因为double类型可能会损失精度。Date类的常用方法及其说明如下表Date类的常用方法及其说

明所示:

Java第十一章总结_第29张图片

 例题如下:

Java第十一章总结_第30张图片

11.5.2 日期时间格式化  

如果在程序中直接输出Date对象,显示的是“Mon Feb 29 17:39:50 CST 2016”这种格式的日期时

间,那么应该如何将其显示为“2016-02-29”或者“17:39:50”这样的日期时间格式呢?Java中提供了

DateFormat类来实现类似的功能

DateFormat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。

DateFormat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期

时间Formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL 4种:

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

MEDIUM:较长,如Jan 12,1952。

LONG:更长,如January 12,1952或3:30:32pm

FULL:完全指定,如Tuesday、April12、1952 AD或3:30:42pm PST

另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,

首先需要创建DateFormat类的一个对象,由于它是抽象类,因此可以使用其静态方法

getDatelnstance(进行创建,语法如下:

DateFormat df = DAteFoemat.getDateInstance();

使用getDatelnstance0方法获取的是所在国家或地区的标准日期格式。另外DateFormat类还提供了

一些其他静态方法。例如,使用getTimelnstance0方法可获取所在国家或地区的时间格式,使用getDateTimelnstance0

方法可获取日期和时间格式。DateFormat类的常用方法及其说明如下表DateFormat类的常用方法

及其说明所示:

Java第十一章总结_第31张图片

 DAteFoemat df = DAteFoemat.getDateInstance();

System.out.println(df.format(new Date()));

由于DateFormat类是一个抽象类,不能用new创建实例对象。因此,除了使用getXXXInstance0方

法创建其对象,还可以使用其子类,如SimpleDateFormat类,该类是一个以与语言环境相关的方

式来格式化和分析日期的具体类,它允许进行格式化(日期一文本)、分析(文本一日期) 和规范化。

SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式化字

符如下表SimpleDateFormat的格式化字符所示:

 Java第十一章总结_第32张图片

通常上表中的字符出现的数量会影响数字的格式。例如,yyyy表示4位年份,这样输入会显示

2021;yy表示两位,这样输入就会显示为21;只有一个y的话,会按照yyyy显示如果超过4个y,如

yyyyyy,会在4位年份左侧补0,结果为02021。一些常用的日期时间格式如下表常用时间格式 所

示:

Java第十一章总结_第33张图片

例题如下:

Java第十一章总结_第34张图片

 DateFormat类提供的 Date parse(Stringsource)方法可以将字符串转为其字面日期对应的Date对

象,整个过程相当于日期格式化的逆操作。

例如,将“2021-02-19”这个字符串转成Date对象,可以使用如下代码:

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date date = sdfparse("2021-02-19");

 11.5.3 Calendar类

打开Java API文档可以看到java.util.Date类提供的大部分方法都已经过时了,因为Date类在设计之

初没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时分秒

信息,或者想要对日期时间进行加减运算等复杂的操作,Date类已经不能胜任,因此JDK提供了新

的时间处理类一Calendar日历类。

Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、

HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段如获得下星期的日期)提供了一

些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被

定义为protected。

Calendar提供了一个类方法getlnstance()以获得此类型的一个通用的对象。Calendar类的

getlnstance()方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化其使用方法如

下:

Calendar rightNow = Calendar.getlnstance();

Calendar类提供的常用字段及其说明如下表Calendar类提供的常用字段及其说明所示:

Java第十一章总结_第35张图片

Calendar类提供的常用方法及其说明如下表Calendar类提供的常用方法及其说明所示:
 Java第十一章总结_第36张图片

从上表可以看到,add0方法和roll0方法都用来为给定的日历字段添加或减去指定的时间量,它们的

主要区别在于: 使用add0方法时会影响大的字段,像数学里加法的进位或错位,而使用roll0方法设

置的日期字段只是进行增加武减少不会改变更大的字段。

例题如下: 

Java第十一章总结_第37张图片

最后对Calendar类的使用做出几点总结:

c.set(CalendarDAY OF MONTH,0)获<取的是上个月的最后一天,所以调用前需要将月份往后加

一个月。

CalendarMONTH的第一个月是使用0记录的,所以在获得月份数字后要加1。年和日是从1开始记

录的,不需要加1。

Calendar.DAY OF WEEK的第一天是周日,周一是第二天,周六是最后一天。

11.6 Runtime类

Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道,

Java程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime类不能使用new关键字创

建实例,只能通过Runtime.getRuntime0方法获取实例。Runtime类的常用方法如表11.21所示,本

节将重点讲解利用Runtime类执行本地命令和查看Java虚拟机所占内存这两个操作。

Java第十一章总结_第38张图片

11.6.1 执行本地命令

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

示cmd命令。Runtime类提供exec0方法让Java代码可以执行系统的命令,exec0方法有很多重载的

形式,例如:

Process exec(String command)

Process exec(Stringl] cmdarray)

command:要执行的系统命令,字符串<类型。

cmdarray:要执行的命令和相应的命令<参数,字符串数组类型。

其实这两个重载方式很类似,如执行“javachello.java”这行命令,使用第一种重载方式的代码如

下 :

Runtime.getRuntime().exec("javachello.java");

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

Stringcommandll= {"javac""hello.java"};

Runtime.getRuntime(.exec(command);

exec0方法会返回一个Process对象。Process类是Java中进程类,该类是抽象类,不能使用new关

键字创建实例。Process类的常用方法如表11.22所示,开发可以使用getlnputStream0方法获取进

程返回的信息。 

 例题如下:

Java第十一章总结_第39张图片

 11.6.2查看内存

Runtime类可以通过freeMemory0方法查看当前Java虚拟机可用内存的剩余量。如果程序能够实时

监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也

可以用来对测试程序性能检验程序算法是否导致内存紧张。

例题如下:

Java第十一章总结_第40张图片

你可能感兴趣的:(java,jvm,开发语言)