11.1包装类
为了实现能将基本数据类型视为对象进行处理,java提出了包装类的概念,它主要是要将基本数据类型封装在包装类中。
包装类及其对应的基本数据类型:
包装类 对应基本数据类型 包装类 对应基本数据类型
Byte byte Short short
Integer int Long long
Float float Double double
Character char Boolean boolean
11.1.1Integer类
(以Integer类讲解整数包装类)
方法 功能描述
valueOf(String str) 返回保存指定的String值的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型返回此Intger对象
byteValue() 以byte型返回此Intger对象
compareTo(Integer anotherInteger) 在数字上比较两个Intger对象。如果这两个值相等,则返回0,如果调用对象的数值小于anotherIntger的数值,则返回负值;如果调用对象的数值大于anotherIntger的数值,则返回正值。
例子:Integer类常用方法
例子:查看Integer类的常量值
11.1.2Double类
Double类和Float类是对double,float基本类型的封存,他们都是Number类的子类,都是对浮点数进行操作,常用方法基本相同。
Double类的常用方法
方法 功能描述
valueOf(String str) 返回保存用参数字符串str表示的double值的Double对象
parseDouble(String 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(Object obj) 将此对象与指定的对象相比较
toString() 返回此Double对象的字符串表示形式
toHexString(double d) 返回double参数的十六进制字符串表示形式
例子:Double类的常用方法
Double类主要提供了以下常量:
MAX_EXPONENT
MIN_EXPONENT
NEGATIVE_INFINITY
POSITIVE_INFINITY
11.1.3Boolean类
Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段。
Boolean类的常用方法如下:
方法 功能描述
boolean Value() 将Boolean对象的值以对应的boolean值返回
equals(Object obj) 判断调用该方法的对象与obj是否相等。当且仅当参数不是null,而且与调用方法的对象一样都表示同一个boolean值的Boolean对象时,才返回true
parseBoolean(String s) 将字符串参数解析为boolean值
toString() 返回表示该boolean值的String对象
valueOf(String s) 返回一个用指定的字符串表示的boolean值
例子:Boolean类的常用方法
Boolean提供了以下三个常量:
TRUE
FALSE
TYPE
11.1.4Character类
Character类在对象中包装一个基本类型为char的值。
Character类的常用方法:
方法 功能描述
valueOf(char a) 返回保存指定char值的Character对象
compareTo(Character anotherCharacter) 根据数字比较两个Character对象,若这两个对象相等则返回0
equals(Object obj) 将调用该方法的对象与指定的对象相比较
toUpperCase(char ch) 将字符参数转换为大写
toLowerCase(char ch) 将字符参数转换为小写
toString() 返回一个表示指定char值的String对象
charValue() 返回此Character对象的值
isUpperCase(char ch) 判断指定字符是否为大写字符
isLowerCase(char ch) 判断指定字符是否为 小写字符
isLetter(char ch) 判断指定字符是否为字母
isDigit(char ch) 判断指定字符是否为数字
例子 :Character类的常用方法
Character类提供了大量表示特定字符的常量:
CONNECTOR_PUNCTUATION
UNASSIGNED
TITLECASE_LETTER
11.1.5Number类
对于数值型的包装类,他们有一个共同的父类———Number类,该类是个抽象类,他是Byte,Integer,Short,Long,Float和Double类的父类。
数值型包装类的共有方法:
方法 功能描述
byteValue() 以byte形式返回指定的数值
intValue() 以int形式返回指定的数值
floatValue() 以float形式返回指定的数值
shortValue() 以short形式返回指定的数值
longValue() 以long形式返回指定的数值
doubleValue() 以double形式返回指定的数值
Number类的方法分别被其各子类所实现,也就是说,在Number类的所有子类中都包含以上这几种方法。
11.2数字处理
在java语言中提供了一个执行数学基本运算的Math类,该类包括常用的数学运算方法,如三角函数方法,指数函数方法,对数函数方法,平方根函数方法等,还提供了一些常用的数字常量。
11.2.1数字格式化
在java中,没有格式化的数据遵循以下原则:
如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示
上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在java中,可以使用DecimalFormat类进行格式化操作。
DecimalFormat类是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数,浮点数,百分数等。
例子表:DecimalFormat类中的特殊字符及其说明
数字格式化使用例子:
11.2.2Math类
Math类提供了数学函数方法,主要有:三角函数方法,指数函数方法,取整数函数方法,取最大值,最小值,以及平均值函数方法。这些方法都被定义为static形式,如下形式调用:
Math.数学方法:
Math.PI
Math.E
三角函数例子:
指数函数例子:
3,取整函数方法
public ststic 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.2.3Random类
Random类是JDK中的随机数生成器类,可以通过实例化一个Random对象创建一个随机数生成器,语法:Random r = new Random();
也可以实例化Random类对象时,设置随机生成器的种子,语法:Random r = new Random(seedValue);
例子:获取不同取值范围,不同类型的随机数
11.2.4BigInteger类
BigInteger类的数字范围较Integer类的数字范围要大得多。BigInteger类支持任意精度的整数。在运算BigInteger类可以准确地表示任何大小的整数值而不会丢失信息。
在BigInteger类中封装了多种操作,除了基本的加,减,乘除操作,还提供了绝对值,相反数,最大公约数以及判断是否为质数等操作。
BigInteger类的常用运算方法:
图片代码例子:
11.2.5BigDecimal类
BigDecimal类和BigInteger类都能实现大数字的运算,不同的是BigDecimal类加入了小数的概念。可以用它来精确计算货币值。
BigDecimal类中常用构造方法:
构造方法 功能说明
BigDecimal(double val) 实例化时将双精度浮点型转换为BigDecimal类型
BigDecimal(String val) 实例化时将字符串形式转换为BigDecimal类型
BigDecimal类实现的加减乘除的方法
方法 功能说明
add(BigDecimal augend) 做加法操作
subtact(BigDecimal subtahend) 做减法操作
multiply(BigDecimal multiplicand) 做乘法操作
divide(BigDecimal divisor,int scale,RoundingMode roundingMode) 做除法操作,方法中3个参数分别代表除数,商的小数点后的位数,近似处理模式
BigDecimal类中的divide()方法的多种处理模式如图:
例子:
11.3System类
System类是JDK中提供的系统类,该类是用final修饰的,所以不允许被继承,System类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。
System类提供的常用方法如图:
11.3.1控制台输出字符
System类提供了标准输入,标准输入和错误输出流,System类提供了三个静态对象:in,out,err.
1. 不会自动换行的print()方法
print()方法语法:
System.out.print("Hello!");
2.可以自动换行的println()方法
System.out.println("书籍是人类进步的阶梯“);
以上两种方法的效果对比如图所示:
11.3.2计时
System.currentTimeMillis()方法可以获取自1970年1月1日零点至今的毫秒数。可以利用该方法来记录程序的运行时间。
例子:
11.4Scanner类
java从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫Scanner的类来实现的。Scanner(扫描仪)。控制台输出内容用到了System.out就表示向控制台输出,System.in就表示从控制台输入,让Scanner扫描System.in就可以获取用户输入的值了。
使用Scanner类首先要引入该类,语法如下:
import java.util.Scanner; //引入Scanner类
Scanner类的几个常用方法:
使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
System.in表示控制台输入流。在创建Scanner对象时把System.in作为参数,这样创建出的扫描器对象扫描的目的就是用户在控制台中输入的内容。
例子:猜数字游戏:
11.5日期时间类
11.5.1Date类
Date类用于表示日期时间类,使用该类表示时间需要使用其构造方法创建对象
Date类的构造方法及其说明:
构造方法 说明
Date() 分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date(long date) 分配Date对象并初始化此对象,以表示自标准基准时间(即1970年1月1日00:00:00GMT)起经过指定毫秒数date后的时间
使用Date类的第二种构造方法创建一个Date类的对象,代码如下:
long timeMillis = System.currentTimeMillis(); //当前系统时间所经历的毫秒数
Date date = new Date(timeMillis);
Date类的常用方法及其说明:
方法 说明
after(Date when) 测试当前日期是否在指定的日期之后
before(Date when) 测试当前日期是否在指定日期之前
getTime() 获得自1970年1月1日00:00:00GMT开始到现在所经过的毫秒数
setTime(long time) 设置当前Date对象所表示的日期时间值,该值用以表示1970年1月1日00:00:00GTM以后time毫秒的时间点
11.5.2日期时间格式化
DateFormat类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。DateFormat类提供了很多类方法。如以下四种:
SHORT:完全为数字,如12.13.52或3:20pm
MEDIUM:较长,如Jan 12,1678
LONG:更长,如January 12,1456或3:30:56pm
FULL:完全指定,如Tuesday,April 12,1234AD或3:30:34pm PST
DateFormat还可以自定义日期时间的格式,首先需要创建DateFormat类的一个对象,可以使用静态方法getDateInstance()进行创建,语法: DateFormat df = DateFormat.getDateInstance();
DateFormat类的常用方法及其说明:
方法 说明
format(Date date) 将一个Date对象实例格式化为日期或时间字符串
getCalendar() 获取与此日期或时间格式器关联日历
getDateInstance() 获取日期格式器,该格式器具有默认语言环境的默认格式化风格
getDateTimeInstance() 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格
getInstance() 获取为日期和时间使用SHORT风格的默认日期/时间格式器
getTimeInstance() 获取时间格式器,该格式器具有默认语言环境的默认格式化风格
parse(String source) 将字符串解析成一个日期,并返回这个日期的Date对象
例子:
由于DateFormat类是一个抽象类,不能用new创建实例对象,因此除了使用getXXXInstance()方法创建对象,还可以使用其子类,如SimpleDateFormat类。
SimpleDateFormat的格式化字符:
字母 日期或时间元素 类型 示例
G Era标志符 Text AD
y 年 Year 199;96
常用时间格式:
日期时间 对应的格式
2021/10/25 yyyy/MM/dd
2021.10.25 yyyy.MM.dd
2021-09-25 13:30:25 yyyy-MM-dd HH:mm:ss
2021年10月24日10时25分07秒 星期日 yyyy年MM月dd日 HH时mm分ss秒EEEE
下午3时 ah时
今年已经过去了297天 今年已经过去了D天
例子
例子:
DateFormat类提供的Date parse(String source)方法可以将字符串转为其字面日期对应的Date对象,整个过程相当于日期格式化的逆操作。
例子代码:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2021-02-19");
11.5.3Calendar类
如果想要对日期时间进行加减运算等复杂操作,Date已经不能胜任,因此JDK提供了新的时间处理类----Calendar日历类。
Calendar类是一个抽象类,Calender提供了一个类方法----getInstance(),以此获得此类型的一个通用对象。
语法如下:
Calendar rightNow = Calendar.getInstance();
Calendar类提供的常用字段及其说明
字段名 说明
DATE get和set的字段数字,指示一个月中的某天
DAY_OF_MONTH get和set的字段数字,指示一个月中的某天
DAY_OF_WEEK get和set的字段数字,指示一个星期中的某天
DAY_OF_WEEK_IN_MONTH get和set的字段数字,指示当前月中的第几个星期
DAY_OF_YEAR get和set的字段数字,指示当前年中的天数
HOUR get和set的字段数字,指示上午或者下午的小时
HOUR_OF_DAY get和set的字段数字,指示一天中的小时
MILLISECOND get和set的字段数字,指示一秒中的毫秒
MINUTE get和set中的字段数字,指示一小时中的分钟
MONTH 指示月份的get和set的字段数字
SECOND get和set的字段数字,指示一分钟中的秒
time 日历的当前设置时间,以毫秒为单位,表示自格林威标准时间1970年1月1日0:00:00后经过的时间
WEEK_OF_MONTH get和set的字段数字,指示当前月中的星期数
WEEK_OF_YEAR get和set的字段数字,指示当前年中的星期数
YEAR 指示年的get和set的字段数字
Calendar类提供的常用方法及其说明:
方法 说明
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_MONTH,HOUR_OF_DAY和MINUTE的值
set(int year,int month,int date,int hourOfDay,int minute,int second) 设置字段YEAR,MONTH,DAY_OF_MONTH,HOUR,MINUTE和SECOND的值
setTime(Date date) 使用给定的Date对象设置此Calendar对象的时间
setTimeInMillis(long millis) 用给定的long值设置此Calendar对象的当前时间值
add()方法和roll()方法都用来为给定的日历字段添加或减去指定的时间量,他们主要区别在于:使用add()方法时会影响大的字段,像数学里的加法进位或错位,而使用roll()方法设置的日期字段只是进行增加或减少,不会改变更大的字段。
例子:
Calendar类总结:
c.set(Calendar.DAY_OF_MONTH,0):获取的是上个月的最后一天,所以调用前需要将月份往后加一个月
Calendar.MONTH:的第一个月是使用0记录的,所以在获得月份数字后要加1,年和日是从1开始记录的,不需要加1.
Calendar.DAY_OF_WEEK :第一天是周日,周一是第二天,周六是最后一天。
11.6Runtime类
Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连接的一个通道,Java程序可以利用该类对当前的运行环境执行一些简单的操作,Runtime类不能使用new关键字创建实例,只能通过Runtime.getRuntime()方法获取实例。
Runtime类的常用方法:
方法 功能描述
getRuntime 返回与当前Java应用程序相关的运行时对象
exec(String command) 在单独的进程中执行指定的字符串命令
exec(String[] cmdarray) 在单独的进程中执行指定命令和指令参数
totalMemory() 返回Java虚拟机中的内存总量
freeMemory() 返回Java虚拟机中的空闲内存量
load(String filename) 加载作为动态库的指定文件名
loadLibrary(String libname) 加载具有指定库名的动态库
11.6.1执行本地命令
Runtime类提供exec()方法让java代码可以执行系统命令,exec()方法有很多重载的形式,例如:
Process sxec(String command)
Process exec(String[] cmdarray)
command:要执行的系统命令,字符串类型
cmdarray:要执行的命令和相应的命令参数,字符串数组类型
重载方式代码:
Runtime.getRuntime().exec("javac hello.java");
第二种重载方式代码:
String command[] = {"javac","hello.java"};
Runtime.getRuntime().exec(command);
Process类的常用方法:
方法 | 功能描述 | 方法 | 功能描述 |
destroy() | 结束进程 | getInputStream() | 获取进程的输入流 |
getErrorStream() | 获取进程的错误流 | getOutputStream() | 获取进程的输出流 |
例子:
11.6.2
Runtime类可以通过freeMemory()方法查看当前java虚拟机可用内存的剩余量。
例子: