第十一章常用类库

本文详细介绍了Java中的数值包装类,如Integer、Double、Boolean和Character,以及它们的常量和功能。接着讨论了数字处理,特别是如何使用DecimalFormat进行数字格式化。此外,文章还涵盖了Math类中的数学运算方法,包括三角函数、指数函数、取整函数以及最大值、最小值和绝对值函数。还提到了Random类用于生成随机数,以及BigInteger和BigDecimal类处理大数运算。最后,简述了System类的控制台输出、计时功能,Scanner类的输入操作,以及日期时间类Date、Calendar的相关知识和Runtime类的使用。
摘要由CSDN通过智能技术生成

11.1包装类

11.1.1-Integer类

 

 

Integer类提供以下4个常量:

MAX_VALUE:表示int类型可取的最大值,即 2^{31}-1.

MIN_VALUE:表示int类型可取的最小值,即 -2^{31}

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方法得到的剩余内存量是近似值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值