11.1 包装类:
Java是一种面向对象语言,但在Java中不能定义基本数据类型的对象,为了能够将基本数据类型视为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int类型的包装类Integer,boolean型的包装类Boolean等,这样便可以把这些基本数据类型转换为对象进行处理
11.1.1 Integer类:
java.lang 包中的 Integer 类、Byte类、Short 类和 Long 类,分别将基本数据类型int、byte、shor和long成一类,于这类都是Number 类的子类,区别就是封装不同的数据类型,其包含方法基本相同
ateger 类一本数据类型int的值,该类的对象包含一个int 类型的字段。此外,该类提供了多个方法,能在int 类型和String类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法
Integer类提供了以下四个常量:
MAX_VALUE:表示int类型可取的最大值,即3^31-1
MIN_VALUE:表示int类型可取的最小值,即-2^31
SIZE:用来以二进制补码形式表示int值的位数
TYPE:表示基本类型int的Class实例
11.1.2 Double类:
Double 类和Float 类是对 double、float 基本类型的封装,”它们都是Number类的子类,都是对浮点数进行操作,所以常用方法基本相同对于 Float 类,可以参考Double类的相关内容。
Double类在对象中包装一个基本类型为double的值,每个 Double 类的对象都包含一个double 类型的字段。此外,该类还提供多个方法,可以将 double 类型转换为 String 类型,将 String 类型转换为doublo类型,也提供了其他一些处理 double类型时有用的常量和方法。
Double 类主要提供了以下常常量:
MAX EXPONENT:返回 int 值,表示有限 double变量可能具有的最大指数。
MIN EXPONENT:返 回int 值,表示标准化 double变量可 能具有的最小指数。
NEGATIVE INFINITY 返回 double 值,表示保存 double类 类型的负无穷大值的常量。
POSITIVE INFINITY: 返回double值,表示保存double类 型的正无穷大值的常量。
11.1.3 Boolean类:
Boolean类将基本类型为boolean的值包装在一个对象中,一个Boolean类型的对象只包含一个类型为boolean的字段,此外,此类还为boolean类型和String类型的相互转换提供了很多方法,并提供了处理boolean类型时非常有用的其他一些常量和方法
11.1.4 Character类:
Character类在对象中包装了一个基本数据类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母,数字等),并可以很方便的将字符从大写转换为小写,反之亦然,Character类提供了很多方法来完成对字符的操作
Character 类提供了大量表示特定字符的常量, 例如:
M CONNECTOR PUNCTUATION:返回by te型值,表示Unicode规范中的常规类别“Pc”。
UNASSIGNED:返回byte型值,表示U nicode 规范中的常规类别“Cn”。
TITLECASE LETTER:返回byte型值, 表示Unicode规范中的常规类别“Lt”。
11.1.5 Number类:
前面介绍了Java中的包装类,对于数值型的包装类类,它们有一个共同的父类--Number类,该类是一个抽象类,它是Byte、Integer、Short、Long、Flo oat 和 Double 类的父类,其子类必须提供将表示的数值转换为byte、int、short、long、float和double的的方法。例如,doubleValue()方法返回双精度浮点值,floatValue()方法返回单精度浮点值
Number类的方法分别被其各子类所实现,也就是说,在Number类的所有子类中都包含以上这几种方法
11.2 数字处理:
Java 语言中,提供了一个执行数学基本运算的Math类,该类包括常用的数学运算方法,如三函数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之是供了一些常用的数学常量,如 PI、E 等。本节将讲解 Math类及其中的一些常用方法。
实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在 Java中主要提供了两种生成随机数的方式,分别为调用Math类的rando法成随机数和调用Random类生成各种数据类型的随机数。
在Java中,还提供了大数字的操作类,即javamathBigInteger类与javamathBigDecimal类。这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。
11.2.1 数字格式化:
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保存两位有效数字,数字格式化操作主要针对的是浮点型数据,包括double型和float型数据;在Java中,没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001并且小于10000000,使用常规小数形式表示
如果数据绝对值大于0.001并且小于10000000,使用科学计数法表示
11.2.2 Math类:
Math类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值,取最小值,以及平均值函数方法,这些方法都被定义为static形式,所以在程序中比较简便,可以使用如下形式调用:
Math.数学方法
在Math类中,除函数外还存在一些常用数字常量,如PI,E等,这些数字常量作为Math类的成员变量出现,调用起来也很简单,可以使用如下形式调用:
Math.PI
Math.E
1.三角函数方法
1.三角函数方法
Math 类中包含的三角函数方法如下:
M public static double sin(double a):返回角的三角正弦。
public static double cos(double a):返回角的三角余弦。public static double tan(double a):返回角的三角正切。
public static double asin(doublea):返回一个值的反正弦。
public static double acos(double a):返回一个值的反余弦。
public static double atan(double a):返回一个值的反正切。
public static double toRadians(double angdeg):将角度转换为弧度。public static double toDegrees(double angrad):将弧度转换为角度。
以上每个方法的参数和返回值都是 double 型的。将这些方法的参数的值设置为double 型是有一定道理的,参数以弧度代替角度来实现,其中1°等于π/180 弧度,所以 180°可以使用π弧度来表示。除了可以获取角的正弦、余弦、正切、反正弦、反余弦、反正切,Math类还提供了角度和弧度相互转换的方法toRadians()和toDegrees。但需要注意的是,角度与弧度的转换通常是不精确的
2.指数函数方法
Math 类中与指数相关的函数方法如下。
public static double exp(doublea):用于获取e的a次方,即取 e。public static double log(double a):用于取自然对数,即取 lna 的值。
public static double log10(double a):用于取底数为 10的 a的对数。
M public static double sqrt(double a):用于取 a的平方根,其中 a的值不能为负值。
M public static double cbrt(double a):用于取a的立方根。
public static double pow(double a,double b):用于取a的b次方。
3.取整数函数方法
在具体的问题中,取整操作使用也很普遍,所以 Java在N中主要包括以下几种取整方法:
Math类中添加了数字取整方法。Math类M 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 后返回 与参数最近的整数。
Mpublic static long round(double a):将参数加上0.5后近返回与参数最近的整数,然后强制转换为长整型。
4.取最大值,最小值,绝对值函数方法
在程序中最常用的方法就是取最大值、最小值、绝对值等,Math类中包括的操作方法如下: M public static double max(double a,double b):取a与b 之间的最大值。
public static int min(int a,int b):取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,doubleb):取a与b之间的最小值,参数为双精度浮点型。 public static int abs(inta):返回整型参数的绝对值。
public static long abs(longa):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
public static double abs(double a):返回双精度浮点型参数的绝对值。
11.2.3 Random类:
Random类是JDK中随机数生成器类,可以通过实例化一个Random对象创建一个随机数生成器,语法如下:
Random r = new Random();
以这种方法实例对象时,Java编译器将以系统当前时间作为随机数生成器的种子,因为每时每刻的时间不同,所以生产的随机数不同,但是如果运行速度过快,也会产生两个运行结果相同的随机数
用户可以在实例化Rabdom类对象时,设置随机数生成器的种子,语法如下:
Random r = new Random(seedValue);
r:Random类对象。
seedValue:随机数生成器的种子。
在Random 类中,提供了获取各种数据类型随机数的方法, 下面列举几个常用的方法:
public int nextInt0):返回一个随机整数。
public int nextInt(intn):返回大于等于0且小于n的随机整数。public long nextLong0):返回一个随机长整型值。
public boolean nextBooleanO:返回一个随机布尔型值。public float nextFloatO:返回一个随机单精度浮点型值
public double nextDouble0):返回一个随机双精度浮点型型值。
public double nextGaussian():返回一个概率密度为高期新分布的双精度浮占刑值
11.2.4 BigInteger类:
BigInteger 类的数字范围较 Integer 类的数字范围要大得多。前有文介绍过Integer 类是int的包装类, int的最大值为2-1,如果要计算更大的数字,使用Integer类就无法实现了,所以 Java 中提供了 BigInteger 类来处理更大的数字。BigInteger类支持任意精度的整数,也就是说,在运算中 BigInteger类可以准确地表示任何大小的整数值而不会丢失信息。
在BigInteger类中封装了多种操作,除了基本的加、减、乘、 除操作,还提供了绝对值、相反数、
最大公约数以及判断是否为质数等操作。
使用BigInteger 类,可以实例化一个BigInteger对象,并自动力调用相应的构造函数。BigInteger 类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将2转换为 BigInteger 类型,可以使用以下语句进行礼始化操作:
BigInteger twolnstance =new BigInteger("2");
旦创建了对象实例,就可以调用BigInteger类中的一方法进行运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值等操作。下面列举了 BigInteger 类中常用的几种运算方法:
public BigInteger add(BigInteger val):做加法运算。
public BigInteger subtract(BigInteger val):做减法运算。
public BigInteger multiply(BigIntegerval):做乘法运算。
public BigInteger divide(BigInteger val):做除法运算。
public BigInteger remainder(BigInteger val):做取余操作。
public BigInteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(int exponent):进行取参数的 exponent 次方操作。public BigInteger negate():取相反数。
public BigInteger shiftLeft(intn):将数字左移n位,如果n为负数,做右移操作。public BigInteger shiftRight(intn):将数字右移n位,如果n为负数,做左移操作。
public BigInteger and(BigInteger val):做与操作。
public BigInteger or(BigInteger val):做或操作。
public int compareTo(BigInteger val):做数字比较操作。
public boolean equals(Objectx):当参数x是BigInteger类型的数字并且数值与对象实例的数值相等时,返回 true。
public BigInteger min(BigIntegerval):返回较小的数值。public BigInteger max(BigInteger val):返回较大的数值
11.2.5 BigDecimal类:
BigDecimal 类和 BigInteger 类都能实现大数字的运算,不同的是 BigDeci mal类加入了小数的概念。一般的float 型和double型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度
比较高,所以要用到 BigDecimal 类。F BigDecimal 类支持任何精度的定点数, 可以用它来精确计算货币值
BigDecimal类型数字可以用来做超大的浮点数的运算,如加,减,乘,除,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点的末位的处理还需要考虑的,BigDecimal类实现的加,减,乘,除的方法如表
在上述方法中,BigDecimal类中的divide()有很多种设置,用于返回商小数点的末位的处理,这些模式的名称与含义如下表:
11.3 System类:
System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承。System类提供了很多系统层面的操作方法,并且这些方法全部都是静态的
11.3.1 控制台输出字符:
System类提供了标准输入,标准输出和错误输出流,也就是说,System类提供了3个静态对象,in,out和err
1.不会自动换行的print()方法
print()方法的语法如下:
System.out.println("Hello!");
此方法输出’Hello‘文字,输出完毕后,光标会停留在’ Hellow‘文字末尾,捕获自动换行
2.可以自动换行的println()方法
println()方法在print后面加上了‘ln’后缀(就是line简写),语法如下:
System.out.println("书籍是人类进步的阶梯!");
此输出“书籍是人类进步的阶梯”后会自动换行,光标停留在下一行的开头
11.3.2 计时:
System.currentTimeMillis()方法获取自1970年1月1日零点至今的毫秒数,虽然Date日期类也有类似的方法,但代码会比System类多,所以System.currentTimeMillis()方法是为获取当前毫秒数最常用的方法因为该方法的返回值紧缺到毫秒,所以可以利用该方法来记录程序的运行时间
11.4 Scanner类:
与c语言不同,Java从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,二十由一个叫Scanner的类来实现的,Scanner英文直译就是扫描器,他的用途就是和现实生活的扫描器一样,可以将数字化信息流转位人类可识别的文字,控制台输出内容用到了System.out表示向控制台输出,System.in就表示从控制台输入,让Scanner扫描System.in就可以获取用户输入的值了
使用Scanner类首先要引入该类,其语法如下:
import java.util.Scanner; //引入Scanner类
11.5 日期时间类:
在程序开发中,经常需要处理日期时间,Java提供了专门的日期时间类来处理相应的问题
11.5.1 Date类:
Date类用于表示时间日期,使用该类表示时间需要使用其构造方法创建对象,其构造方法及其如表:
11.5.2 日期时间格式化:
如果在程序中直接输出Date 对象,显示的是“Mon Feb 2917:39:50CST2016”这种格式的日期时间,那么应该如何将其显示为“2016-02-29”或者“17:39:50”这样的日期时间格式呢?Java中提供了 DateFormat类来实现类似的功能。
DateFormat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。 DateFormat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间 Formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL4种:
SHORT:完全为数字,如 12.13.52或3:30pm。
M MEDIUM:较长,如 Jan 12,1952。
LONG:更长,如January12,1952或3:30:32pm。
MFULL:完全指定,如 Tuesday、April 12、1952AD或3:30:42pmPST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此可以使用其静态方法getDateInstanceO进行创建,语法如下:
DateFormat df = DateForamt.getDateInstance();
使用getDateInstance()方法获取的是所在国家或地区的标准格式,另外,DateFormat类还提供了一些其他静态方法,例如,使用getTimeInstance()方法可获取所在国家或地区的时间格式,使用getDateTimeInstance()方法可获取日期和时间格式,DateFormat类的常用方法及其说明如表:
由于DateFormat类是一个抽象类,不能用new创建实例对象,因此,除了使用getXXXInstance()方法来创建对象,还可以使用子类,如SimpleDateFormat类,该类是一个与语言环境相关的方式来格式化和分析日期的具体类,它允许进行格式化(日期,文本),分析(文本,日期)和规范化。
SimpleDateFormat类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式化字符如表:
11.5.3 Calendar类:
打开 Java API 文档可以看到java.util.Date类提供的大部分方法都已经过时了,因为Date类在设计之初没有考虑到国际化,而且很多方法也不能能满足用户需求,比如需要获取指定时间的年月日时分秒信息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此 JDK 提供了新的时间处理类--Calendar日历类。
Calendar类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH DAY OF MONTH HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
ce(),以获得此类型的一个通用的对象。Calendar类的日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar 提供了一个类方法 getInstano getInstance()方法返回一个 Calendar对象,其使用方法入下:
Calendar rightNow = Calendar.getInstance();
从表11.20可以看到,add()方法和roll()方法都用来给定的日历和字段添加或减去指定的时间量,它们的主要区别在于;使用 add()方法时会影响大的字段,像数学里的加法进位或错位,而使用roll()方法设置的日期字段只是进行增加或减少,不会改变更大字段
最后对Calendar类的使用做出几点总结:
M c.set(CalendarDAY_OFMONTH0)获取的是上个月的最后一天 ,所以调用前需要将月份往后
加一个月。
CalendarMONTH的第一个月是使用0记录的,所以在获得月个开始记录的,不需要加 1。
份数字后要加1。年和日是从1
CalendarDAY OF WEEK的第一天是周日,周一是第二天,周六是最后一天
11.6 Runtime类:
Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道,Java程序可以利用该类对当前的运行环境执行一些简单的操作,Runtime 类不能使用new 关键字创建实例,只能通过 Runtime.getRuntime()方法获取实例。
Runtime 类的常用方法如表11.21所示,讲解利用Runtime类执行本地命令和查看 Java本节将重点虚拟机所占内存这两个操作。
11.6.1 执行本地命令:
本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示 shell 命令,在Windows系统下就表示cmd命令。
Runtime 类提供 exec()方法让Java代码可以执行系统的命令,exec()方法有很多重载的形式,例如
Process exec(String command)Process exec(Stringl cmdarray)
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示,开可使用getInputStreamO方法获取进程返回的信息
11.6.2 查看内存:
Runtime类可以通过freeMemory()方法查看当前Java虚构机可用内存的剩余量,如果程序能够实时监控内存剩余余量,就可以尽量控制程序对内存的占用,从而避免出现’内存溢出‘的情况,同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张