11.1包装类
11.1.1-Integer类
Integer类提供以下4个常量:
MAX_VALUE:表示int类型可取的最大值,即 .
MIN_VALUE:表示int类型可取的最小值,即 。
SIZE:用来以二进制补码形式表示int值得位数。
TYPE:表示基本类型int得class实例。
11.1.2-Double类
Double类主要提供了以下常量:
MAX_EXPONENT:返回int值,表示有限double变量可能具有的最大指数
MIN_EXPONENT:返回int值,表示标准化double变量可能具有的最小指数
NEGATIVE_INFINTY:返回double值,表示保存double类型的负无穷大值的常量
POSITIVE_INFINITY:返回double值,表示保存double类型得正无穷大值的常量
11.1.3Boolean类
Boolean提供了以下3个常量
TRUE:对应基础true的Boolean对象
FALSE:对应基础falses的Boolean对象
TYPE:基本类型Boolean的class对象
11.1.4Character类
Character类提供了大量表示特定字符的常量
CONNECTOR_PUNCTUATION:返回值byte值,表示Unicode规范种的常规类别“Pc”
UNASSIGNED:返回byte型值,表示Unicode规范种的常规类别“Cn”
TITLECASE_LETTER:返回byte型值,表示Unicode规范种的常规类别“li”
11.1.5Nmuber类
前面介绍了 Java 中的包装类,对于数值型的包装类,它们有一个共同的父类一Number 类,该类是一个抽象类,它是 Byte、Integer、Short、Long、Float 和 Double 类的父类,其子类必须提供将表示的数值转换为 byte、int、short、long、 float 和 double 的方法。例如,doubleValue0方法返回双精度浮点值,floatValue0方法返回单精度浮点值,这些方法如表 11.6 所示。
11.2数字处理
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数数宇格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 javDecimelFormat格式化数字
如果数据绝对值大于 0.001 并且小于 10000000,使以常规小数形式表示口如果数据绝对值小于 0.001 或者大于 10000000,使用科学记数法表示
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。。在加可以使用DecimalFormat 类进行格式化操作
DecimalFormat类是NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字带化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中applyPattem0方法来实现数字格式化
11.2.1数字格式化
DecimalFormat df =new DecimalFormat();
df.applyPattern("###,###,###");//指定格式
String dff=df.format(4568932);//格式化
System.out.println(dff);
DecimalFormat df2 =new DecimalFormat();
df2.setGroupingSize(2);//设置分组大小(以多少为一组)
df2.setGroupingUsed(false);//类似开关,true打开,false关闭
String dff2 =df2.format(13456789);
System.out.println(dff2);
//SimgleFormat
11.2.2Math类
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
1.三角函数方法图
例题
public class a{
public static void main(String[]args){
System.out.println("90°的正弦值:"+Math.sin(Math.PI/2));//取90°的正弦
System.out.println("0°的余弦值:"+Math.cos(0)); //取0°的余弦
System.out.println("60°的正切值:"+Math.tan(Math.PI/3));//取60°的正切
//取2的平方根于2商的反正弦
System.out.println("2的平方根于2商的反正弦值:"+Math.asin(Math.sqrt(2)/2);
//取2的平方根与2商的反余弦
System.out.println("2的平方根于2商的反余弦值:"+Math.acos(Math.sqrt(2)/2")
System.out.println("1的正切值:"+Math.atan(1));//取1的正反切
System.out.println("120°的弧度制:"+Math.toRadians(120.0));//取120°的弧度制
System.out.println("Π/2的角度值:"+Math.toDEGREES(Math.PI/2));//取Π/2的角度
课堂
//11.2.2Math类
System.out.println(Math.toRadians(45));
double temp =Math.toRadians(45);
System.out.println(Math.tan(Math.toRadians(45)));
2指数函数
指数运算包括求方根、取对数以及求 n 次方的运算。为了使读者更好地理解这些运算函数用法,下面举例说明。
例题11.8
public class ExceponentFunction {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("e的平方值"+Math.exp(2));
System.out.println("以e为底的2的对数值"+Math.log(2));
System.out.println("以10为底2的对数值"+Math.log10(2));
System.out.println("4的平方根值"+Math.sqrt(4));
System.out.println("8的立方根值"+Math.cbrt(8));
System.out.println("2的2次方值"+Math.pow(2, 2));
}
}
课堂
//指数函数
System.out.println(Math.cbrt(64));
System.out.println(Math.pow(12,3));
3取整函数方法
例题11.9
public class IntFunction {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("使用ceil()方法取整"+Math.ceil(5.2));
System.out.println("使用floor()方法取整"+Math.floor(2.5));
System.out.println("使用rint()方法取整"+Math.rint(2.7));
System.out.println("使用rint()方法取整"+Math.rint(2.5));
//将参数加上0.5后返回最接近的整数
System.out.println("使用round()方法取整"+Math.round(3.4f));
//将参数加上0.5后返回最接近的整数,并且将结果强制转换为长整型
System.out.println("使用round()方法取整"+Math.round(2.5));
}
}
课堂
//取整函数
System.out.println(Math.ceil(3.1));
System.out.println(Math.floor(3.9));
System.out.println(Math.rint(3.49));
System.out.println(Math.rint(3.51));
System.out.println(Math.rint(3.5));
System.out.println(Math.round(3.6f));
System.out.println(Math.round(3.1));
System.out.println();
4.取最大值、最小值、绝对值函数方法
例题11.10
public class AnyFunction {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("4和8较大者"+Math.max(4, 8));
System.out.println("4.4和4较小者"+Math.min(0, 0));
System.out.println("-7的绝对值"+Math.abs(-7));
}}
课堂
//最大最小以及绝对函数值
System.out.println(Math.max(3.45, 5.2));
System.out.println(Math.min(3.45, 5.2));
System.out.println(Math.abs(114514));
11.2.3Random类
课堂
//11.2.3Random类
Random d = new Random();
System.out.println(d.nextInt());//随机生成整数
System.out.println(d.nextInt(100));//大于等于0小于100的整数
System.out.println(d.nextDouble());//双精度浮点型
System.out.println(d.nextFloat());//单精度浮点型
System.out.println(d.nextGaussian());//概率密度为高斯分布的双精度浮点型
System.out.println(d.nextBoolean());//布尔
例题11.11
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r = new Random();
//随机产生一个整数
System.out.println("随机产生一个整数"+r.nextInt());
//随机产生一个大于等于0且小于10的整数
System.out.println("随机产生一个大于等于0且小于10的整数"+r.nextInt(10));
//随机产生一个布尔型的值
System.out.println("随机产生一个布尔型的值"+r.nextBoolean());
//随机产生一个双精度浮点型的值
System.out.println("随机产生一个双精度浮点型的值"+r.nextDouble());
//随机产生一个单精度浮点型的值
System.out.println("随机产生一个单精度浮点型的值"+r.nextFloat());
//随机产生一个概率密度为高斯分布的双精度浮点型的值
System.out.println("随机产生一个概率密度为高斯分布的双精度浮点型的值"+r.nextGaussian());
}}
11.2.4BigInteger类
igInteger类的数字范围较 Integer类的数字范围要大得多/前文介绍过Integer 类是 int 的包装int的最大值为 2-1,如果要计算更大的数字,使用 Integer 类就无法实现了,所以 Java 中提供BigInteger 类来处理更大的数字。BigInteger 类支持任意精度的整数,也就是说,在运算中 Biglntg类可以准确地表示任何大小的整数值而不会丢失信息。
在 Biginteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反最大公约数以及判断是否为质数等操作。
使用 Bigimeger类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigIntege天具有很多构造函数。但最直接的一种方式是参数以字符串形式代表要处理的数字。
//11.2.4 BigInteger
BigInteger bi1 = new BigInteger("1145145751");
BigInteger bi2 = new BigInteger("11451457515");
BigInteger mul1 = bi1.multiply(bi2);
System.out.println(mul1);
11.2.5BigDecimal类
BigDecimal 类和 Biglnteger 类都能实现大数字的运算,不同的是 BigDecimal类加入了小数的豪般的 float 型和 double 型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字福及比较高,所以要用到 BigDecimal类。BigDecimal 类支持任何精度的定点数,可以用它来精确计算负币值。在BigDecimal 类中,常用的两个构造方法如表 11.8 所示。
//11.2.5 BigDecimal
BigDecimal bd1 = new BigDecimal("0.1145145751");
BigDecimal bd2 = new BigDecimal("0.1145145");
BigDecimal mul2 = bd1.multiply(bd2);
例题13
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//11.2.4 BigDecimal
BigDecimal b1=new BigDecimal("0.728382834535");
BigDecimal b2=new BigDecimal("0.00045353");
System.out.println("两个数字相加结果:"+b1.add(b2));
System.out.println("两个数字相减结果:"+b1.subtract(b2));
System.out.println("两个数字相乘结果:"+b1.multiply(b2));
//除法运算,商小数点后保留9位,并将结果进行四舍五入操作
System.out.println("两个数字相除,保留小数点后9位:"+b1.divide(b2,9,RoundingMode.HALF_UP));
}}
11.3System类
Svstem 类是JDK 中提供的系统类,该类是用 final 修饰的,所以不允许被继承。System 类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。System 类提供的较常用方法如表 11.11所示。本节重点讲解利用 System 类控制台输出和计时这两个操作。
11.3.1控制台输出字符
1.不会自动换行的 print()方法
print0方法的语法如下:
System.out.print("Hello!");
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换
2.可以自动换行的 println()方法
printn0方法在 print 后面加上了“In”后缀(就是 line 的简写),语法如下:
:System.out.println(“书籍是人类进步的阶梯!");
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头print0方法与 println0方法输出的对比效果如表 11.12 所示
综上所述,Java 输出换行的方法有以下两种:
System.out.print("n");System.out.println();
//利用换行符n 实现换行//空参数即可实现换行
误区警示使用这两个输出方法时还要注意以下两点:
(1)“System.out.println("n");”会打印两个空行。
(2)“System.out.print0;”无参数会报错
11.3.2计时
public static void main(String[]args){
long start =System.currentTimeMillis();
String str=null;
for(int i =0;i<10000;i++){
str + =i;
}
long end System.currentTimeMillis();
System.out.println("循环用时:"+(end-start)+"毫秒");
}}
11.4Scanner类
与C语言不同,Java 从控制台中读出用户输入的值,用到的不是一行可以直接使用的代吗,而是由一个叫Scanner的类来实现的。Scanner 英文直译就是扫描仪,它的用途就和现实生活的扫播仪一样.可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台输出.Systemi就表示从控制台输入,让Scanner 扫描Systemin就可以获取用户输入的值了使用Scanner 类首先要引入该类,其语法如下:
import java.util.Scanner; //引入Scanner类
表11.13 Scanner类的几个常用方法
11.5日期时间类
11.5.1Date类
例题15
impor java.util.Date;
public class DateDemo{
public static void main(String[]args){
Date date = new Date();
long value =date.getTime();
Date d1 = new Date();
System.out.println(d1);
Date d2 = new Date(1542621232002L);
System.out.println(d2);
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));
System.out.println(d1.getTime());
System.out.println(d1);
d1.setTime(1782927261567L);
System.out.println(d1);
11.5.2日期时间格式化
例题17
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo{
public static void main(String[]args){
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日EEEEHH时mm分ss秒");
System.out.println("各位观众大家好,现在是");
System.out.println(df.format(new Date()));
System.out.println("欢迎收看新闻。")
}}
DateFormat df1 =DateFormat.getInstance();
System.out.println(df1.format(d1));
DateFormat m =DateFormat.getDateInstance();
System.out.println(m.format(d1));
DateFormat df3 =DateFormat.getTimeInstance();
System.out.println(df3.format(d1));
11.5.3Calendar类
例题18
package shiyi;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class 例题18 {
public static void main(String[] args) {
System.out.println("——————中华人民共和国成立100周年倒计时——————");
Date date =new Date();//当前时间
//创建SimpleDateFormat对象,指定目标格式
SimpleDateFormat t=new SimpleDateFormat("yyyy年MM月dd日");
//调用format方法,格式化时间,转换为指定格式
String today =t.format(date);
System.out.println("今天是"+today);//输出当前日期
//获取自1970年1月1日至当前时间所经过的毫秒数
long time1=date.getTime();
//使用默认时区和语言环境获得一个日历calendar
Calendar c=Calendar.getInstance();
//设置日历calendar中的年、月、日的值。因为月份是从0开始计算的,所以这里要减1
c.set(2049,10-1, 1);
//计算自1970年1月1日至2049年10月1日所经过的毫秒数
long time2=c.getTimeInMillis();
//计算2049年10月1日距离当前时间相差的天数
long day=(time2-time1)/(1000*60*60*24);
System.out.println("距离2049年10月1日还有"+day+"天");
}
}
11.6Runtime类
Runtime 类是JDK 提供的运行时类,该类为Java 程序提供了与当前运行环境相连接的一个通Java 程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime 类不能使用 new 关键
实例,只能通过 Runtime,getRuntime0方法获取实例。Runtime 类的常用方法如表 11,21 所示,本节将重点讲解利用 Runtime 类执行本地命令和查看l虚拟机所占内存这两个操作。
11.6.1执行本地命令
11.6.1 执行本地命令
本地命令指的是操作系统的命令。例如,在 Liux 系统下就表示 shell 命令,在 Windows 系统下表示cmd命令。
Runtime 类提供exec0方法让 Java 代码可以执行系统的命令,exec0方法有很多重载的形式,.
Process exec(String command)Process exec(Stringll cmdarray)
日 command:要执行的系统命令,字符串类型。
日cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hello.java”这行命令,使用第一种重载方式的代码如下!
Runtime.getRuntime(.exec( javac hello.java");
使用第二种重载方式的代码如下:
String command] = ( javac", "hello.java" );Runtime.getRuntime(.exec(command):
exec0方法会返回一个 Proess 对象。Proe,我是中进该类是抽象类,不能使用e关键字创建实例。Proces 类的常用方法如表 11.22 所示,开发可以使用 getlmpulStream0方法获取进程的返回信息
11.6.2查看内存
Runtime 类可以通过 freeMemory0方法查看当前Java 虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
freeMemory0方法得到的剩余内存量是近似值。