Java是一种面向对象语言,但在Java中不能定义基本数据类型的对象,为了能将基本数据类型视为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int型的包装类Interger、boolean型的包装类Boolean等,这样便可以把这些基本数据类型转换为对象进行处理。
表11.1 包装类及其对应的基本数据类型
包装类 | 对应基本数据类型 | 包装类 | 对应基本数据类型 |
Byte | byte | Short | short |
Integer | int | Long | long |
Float | float | Double | double |
Character | char | Boolean | boolean |
11.1.1 Integer类
常用方法:
【例11.1】Integer类的常用方法
Integer类提供的四个常量:
【例11.2】查看Integer类的常量值
11.1.2 Double类
常用方法:
【例11.3】Double类的常用方法
Double类提供的四个常量:
MAX_EXPONENT:返回int值,表示有限double变量可能具有的最大指数
MIN_EXPONENT: 返回int值,表示有限double变量可能具有的最小指数
NEGATIVE_INFINITY:返回double值,表示保存double类型的负无穷大值的常量
POSITIVE_INFINITY:返回double值,表示保存double类型的正无穷大值的常量
11.1.3Boolean类
常用方法:
【例11.4】Boolean类的常用方法
11.1.4Character类
常用方法:
Character类中表示特定字符的常量:
CONNECTOR_PUNCTUATION:返回byte型值,表示Unicode规范中的常规类别“Pc”
UNASSIGNED:返回byte型值,表示Unicode规范中的常规类别“Cn”
TITLECASE_LETTER:返回byte型值,表示Unicode规范中的常规类别“Lt”
【例11.5】Character类的常用方法
11.1.5 Number类
是所有数值型的父类(抽象类)
数值型包装类的共有方法:
11.2.1数字格式化
表DecimalFormat类中的特殊字符及其说明
字符 | 说明 |
0 | 代表阿拉伯数字,使用特殊字符“0”表示数字的一位阿拉伯数字,如果该位不存在数字,则显示0 |
# | 代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位不存在数字,则显示字符,如果该位不存在数字,则不显示 |
. | 小数分割符或货币小数分隔符 |
- | 负号 |
, | 分组分隔符 |
E | 分割科学记数法中的尾数和指数 |
% | 放置在数字的前缀和后缀,将数字乘以100显示为百分数 |
\u2030 | 放置在数字的前缀或后缀,将数字乘以1000显示为千分数 |
\u00A4 | 放置在数字的前缀或后缀,作为货币记号 |
' | 单引号,当上述特殊字符出现在数字中时,应为特殊符号添加单引号,系统会将此符号视为普通符号处理 |
下面以实例说明数字格式化的使用
【例11.6】DecimalFormat类的常用方法
import java.text.DecimalFormat;
public class DecimalFormatSimmpleDemo{
//使用实例化对象时设置格式化模式
static public void SimgleFormat(String pattern,double value){
DecimalFormat myFormat = new DecimalFormat(pattern);//实例化DecimalFormat对象
String output = myFormat.format(value);//将数字进行格式化
System.out.println(value + " " + pattern + " " + output);
}
//使用applyPattern()方法对数字进行格式化
static public void UsedApplyPatternMethodFormat(String pattern,double value){
DecimalFormat myFormat = new DecimalFormat();//实例化DecimalFormat对象
myFormat.applyPattern(pattern);//调用appPattern()方法设置格式化模板
System.out.println(value + " " + pattern + " " + myFormat.format(value));
}
public static void main(String[]args){
SimgleFormat("###,###,###",123456.789);
SimgleFormat("000000000.###kg",123456.789);
//按照格式模板格式化数字,不存在的位以0显示
SimgleFormat("0000000.000",123.78);
//调用静态UsedApplyPatternMethodFormat()方法
UsedApplyPatternMethodFormat("#.###%",0.789);
UsedApplyPatternMethodFormat("###.##",123456.789);
UsedApplyPatternMethodFormat("0.00\u2030",0.789);
}
}
11.2.2Math类
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 a):将角度转换为弧度。
public static double toDegrees(double a):将弧度转换为角度。
【例11.7】在Java代码中进行三角函数运算
2. 指数函数方法:
public static double exp(double a):用于获取e的a次方
public static double log(double a):用于取自然对数,lna的值
public static double log10(double a):用于取底数为10的a的对数
public static double sqrt(double a):用于取a的平方根,其中a的值不能为负值
public static double cbrt(double a):用于取a的立方根
public static double pow(double a,double b):用于取a的b次方
例11.8 在Java代码中进行指数函数运算
3.取整函数方法:
public static double ceil(double num):返回大于等于参数的最小整数
public static double floor(double num):返回小于等于参数的最大整数
public static double rint(double num):返回与参数最接近的整数,如果存在两个相同接近的整数,则结果取偶数
public static int round(float num):将参数加上0.5后返回与参数最近的整数
public static long round(double num):将参数加上0.5后返回与参数最近的整数,然后强制转换为长整型
例11.9 各场景下取整数函数的运算结果
4.取最大值,最小值,绝对值函数方法
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,double b):取a,b中的最小值
public static int abs(int a):取a的绝对值
public static long abs(long a):取a的绝对值
public static float abs(float a):取a的绝对值
public static double abs(double a):取a的绝对值
例11.10 取最大值、最小值、绝对值的方法
11.2.3 Random类
语法:Random r = new Random(seedvalue);
常见方法:
public int nextInt():返回一个随机整数
public int nextInt(int num):返回大于等于0且小于num的随机整数
public long nextLong():返回一个随机长整数值
public boolean nextBoolean():返回一个随机的布尔值
public float nextFloat():返回一个随机单精度浮点型值
public double nextDouble():返回一个随机双精度浮点型值
public double nextGaussian():返回一个概率密度为高斯分布的双精度浮点型值
例11.11 获取不同取值范围、不同类型的随机数
11.2.4 BigInteger类
Java中用BigInteger类来处理更大的数字,支持任意精度的整数,它可以准确地表示任何大小的整数值而不会丢失信息。
BigInteger num = new BigInteger("2");
常用方法:
public BigInteger add(BigInteger val):加法运算
public BigInteger subtract(BigInteger val):减法运算
public BigInteger multiply(BigInteger val):乘法运算
public BigInteger divide(BigInteger val):除法运算
public BigInteger remainder(BigInteger val):取余操作
public BigInteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数
public BigInteger pow(int n):进行取参数的n次方操作
public BigInteger negate():取相反数
public BigInteger shiftLeft(int n):将数字左移n位,如果n为负数,做右移操作
public BigInteger shiftRight(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类进行数学运算
11.2.5 BigDecimal 类
与BigInteger类都能进行大数字运算不同的是加入了小数的概念,它支持商业计算,任何精度的定点数,用来精确计算货币值。
构造方法:
构造方法 | 功能说明 |
BigDecimal(double val) | 实例化时将双精度浮点型转换为BigDecimal类型 |
BigDecimal(String val) | 实例化时将字符串形式转换为BigDecimal类型 |
BigDecimal 类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。BigDecimal 类实现的加、减、乘、除的方法如下表:
方法 | 功能说明 |
add(BigDecimal augend) | 做加法操作 |
subtract(BigDecimal subtrahend) | 做减法操作 |
multiply(BigDecimal multiplicand) | 做乘法操作 |
divide(BigDecimal divisor,int scale,RoundingModeroundingMode) | 做除法操作,方法中3个参数分别代表除数、商的小数点后的位数、近似处理模式 |
在上述方法中,BigDecimal类中divide()方法有多种设置,用于返回商小数点后的末位的处理,这些模式的名称与含义如下表:
例11.13 使用BigDecimal类进行数学运算
11.3 System 类
System类属于JDk提供的系统类,被final修饰,不允许被继承,所有方法属于静态。
常用方法:
方法 | 功能描述 |
currentTimeMills() | 返回以毫秒为单位的当前时间 |
exit(int status) | 通过启动虚拟机的关闭序列,终止当前正在运行的Java虚拟子,该方法从不正常返回,可以将变量作为一个状态码,非零表示非正常终止,零表示正常 |
Map |
返回一个不能修改的当前系统环境的字符串映射视图 |
getenv(String name) | 获取指定的环境变量值 |
getProperties() | 确定当前的系统属性 |
getProperty(String key) | 获取用指定键描述的系统属性 |
setIn(InputStream in) | 重新分配标准输入流 |
11.3.1 控制台输出符
11.3.2 计时
System.currentTimeMills()方法可以获取1970年1月1日零点至今的毫秒数,是最常见的方法,可以利用该方法来记录程序的运行时间。
例11.12 查看执行一万次字符串拼接所消耗的时间
11.4 Scanner类
使用Scanner类可以达到程序输入的目的。
常用语法:
import java.util.Scanner
常用方法:
方法名 | 返回类型 | 功能说明 | 方法名 | 返回类型 | 功能说明 |
next() | String | 查找并返回此扫描器获取的下一个完整标记 | nextInt() | int | 扫描一个值返回int类型 |
nextBoolean() | boolean | 扫描一个布尔值标记并返回 | nextLine() | String | 扫描一个值返回String类型 |
nextByte() | byte | 扫描一个值返回byte类型 | nextLong() | long | 扫描一个值返回long类型 |
nextDouble() | double | 扫描一个值返回double类型 | nextShort() | short | 扫描一个值返回short类型 |
nextFloat() | float | 扫描一个值返回float类型 | close() | void | 关闭此扫描器 |
使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
例11.15 猜数字游戏
11.5 日期时间类
11.5.1 Date类
构造方法:
构造方法 | 说明 |
Date() | 分配Date对象并初始化此对象,以表示分配它的时间(精准到毫秒 |
Date(long date) | 分配Date对象并初始化对象,以表示自标准基准时间(即1970年1月1日 00:00:00GMT)起经过指定毫秒数date后的时间 |
常用方法:
方法 | 说明 |
after(Date when) | 测试当前日期是否在指定的日期之后 |
before(date when) | 测试当前日期是否在指定的日期之前 |
getTime() | 获得1970年1月1日 00:00:00GMT开始到现在所经过的毫秒数 |
setTime(long time) | 设置当前Date对象所表示的日期时间值,该值用来表示1970年1月1日 00:00:00GMT以后time毫秒的时间点 |
例11.16 获取当前的日期和时间
11.5.2 日期时间格式化
使用DateFormat类实现日期时间的输出
格式化风格:
使用DateFormat可以自定义日期时间格式
DateFormat df = DateFormat.getDateInstance();
getDateInstance()方法获取所在国家或地区的标准日期格式
常用方法:
方法 | 说明 |
format(Date date) | 将一个Date对象实例格式化为日期/时间字符串 |
getCalendar() | 获取与此日期/时间格式器关联的日历 |
getDateInstance() | 获取日期格式器,该格式器具有默认语言环境的默认格式化风格 |
getDateTimeInstance() | 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格 |
getInstance() | :获取为日期和时间使用SHORT风格的默认日期/时间格式器 |
getTimeInstance() | 获取时间格式器,该格式器具有默认语言环境的默认格式化风格 |
parse(String source) | 将字符串解析成一个日期,并返回这个日期的Date对象 |
SimpleDateFormat类提供了19个格式化字符,让开发者自由编写
SimpleDateFormat的格式化字符:
常用时间格式:
例11.17 以中文形式打印当前 的日期和时间
11.5.3 Calendar类
由于在Date类的设计没有考虑到国际化,所以大部分方法都不被使用,而且很多方法也无法满足用户需求,因此JDK提供了Calendar日历类
其操作日历字段,这些字段和方法都被定义为protected
语法:
Calendar now = Calendar.getInstance();
Calendar类提供的常用字段及说明
Calendar类的常用方法:
方法 | 说明 |
add(int field,int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
after(Objecrt when) | 判断此Calendar对象表示的时间是否在指定Object表示的时间之后,返回判断结果 |
before(Object when) | 判断此Calendar对象表示的时间是否在指定Object表示的时间之前,返回判断结果 |
get(int field) | 返回给定日历字段的值 |
getInstance() | 使用默认时区和语言环境获得的一个日历 |
getTime() | 返回一个表示此Calendar对象时间值(从历元至现在的毫秒偏移量)的Date对象 |
getTimeInMills() | 返回此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_MONTH,HOUR_OF_DAY,MINUTE的值 |
set(int year,int month,int date,int hourofday,int minute,int second) | 设置日历字段YEAR,MONTH,DAY_OF_MONTH,HOUR_OF_DAY,MINUTE,SECOND的值 |
setTime(Date date) | 使用给定的Date对象设置此Calendar对象的时间 |
setTimeInMills(long mills) | 使用给定的long值设置此Calendar对象的当前时间值 |
例11.18 今天离中华人民共和国成立100周年差多少天
11.6 Runtime类
Runtime是JDK提供的运行时类,可以用来获取运行时间。
常用方法:
方法 | 功能描述 |
getRuntime() | 返回与当前Java应用程序相关的运行时对象 |
exec(String command) | 在单独的进程中执行指定的字符串命令 |
exec(String[] cmdarray) | 在单独的进程中执行指定命令和指令参数 |
totalMemory() | 返回Java虚拟机中的内存总量 |
freeMemory() | 返回Java虚拟机中的空闲内存量 |
load(String filename) | 加载作为动态库的指定文件名 |
loadLibrary(String libname) | 加载具有指定库名的动态库 |
11.6.1 执行本地命令
本地命令指操作系统的命令
Runtime类的exec()方法重载形式:
Process exec(String command)
Process exec(String[] cmdarray)
command:要执行的系统命令
cmdarray:要执行的命令和相应的命令参数 ,字符串数组类型
第一种重载方式的代码:
Runtime.getRuntime().exec("java hello.java");
第二种重载方式的代码:
String command[] = {"javac","hello.java"};
Runtime.getRuntime().exec(command)
开发可以使用getInputStream()方法获取进程返回的信息
Process类常用方法:
方法 | 功能描述 | 方法 | 功能描述 |
destroy() | 结束进程 | getInputStream() | 获取进程的输入流 |
getErrorStream() | 获取进程的错误流 | getOutputStream() | 获取进程的输出流 |
例11.19 让Java程序执行Windows系统的help命令
11.6.2 查看内存
Runtime 类可以通过 freeMemoryO方法查看当前Java 虚拟机可用内存的剩余量。
例11.20 监控虚拟机内存使用情况