Java的第十一章:常用类库

包装类

        Java是一种面向对象语言,但在Java中不能定义基本数据类型的对象,为了能将基本数据类型视为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中。包装类及其对应的基本数据类型如表所示:

包装类对应基本数据类型包装类对应基本数据类型
BytebyteShortshort
IntegerintLonglong
FloatfloatDoubledouble
CharactercharBooleanboolean

Integer类

    Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。此外,该类提供了多个方法,能在int类型和String类型之间相互转换,同时还提供了其他一些处理int类型时非常有用的常量和方法。

Integer类的常用方法。代码如下:

public class Test2{
	public static void main(String[] args) {
		int num=Integer.parseInt("456");//将字符串转换为int类型
		Integer iNum=Integer.valueOf("456");//创建一个Integer对象
		System.out.println("int数据与Integer对象的比较:"+iNum.equals(num));
		String str2=Integer.toBinaryString(num);//获取数字的二进制表示
		String str3=Integer.toHexString(num);//获取数字的十六进制表示
		String str4=Integer.toOctalString(num);//获取数字的八进制表示
		String str5=Integer.toString(num,15);//获取数字的十五进制表示
		System.out.println("456的二进制表示为:"+str2);
		System.out.println("456的十六进制表示为:"+str3);
		System.out.println("456的八进制表示为:"+str4);
		System.out.println("456的十五进制表示为:"+str5);
	}
}

运行结果:

 查看Integer类的常量值。代码如下:

public class Test2{
	public static void main(String[] args) {
	//获取Integer类的常量值
		int maxint=Integer.MAX_VALUE;
		int minint=Integer.MIN_VALUE;
		int intsize=Integer.SIZE;
		System.out.println("int类型可取的最大值是:"+maxint);//将常量值输出
		System.out.println("int类型可取的最小值是:"+minint);
		System.out.println("int类型二进制位数是:"+intsize);
	}
}

运行结果:

 Double类

      Double类在对象中包装一个基本类型为double的值,每个Double类的对象都包含一个double类型的字段。也可以将double类型转换为String类型,将String类型转换为double类型,也提供了其他一些处理double类型时有用的常量和方法。

  Double类常用方法。代码如下:

public class Test2{
	public static void main(String[] args) {
		Double dNum=Double.valueOf("3.14");
		//判断是否为非数字值
		System.out.println("3.14是否为非数字值:"+Double.isNaN(dNum.doubleValue()));
		System.out.println("3.14转换为int值为:"+dNum.intValue());
		//判断大小
		System.out.println("值为3.14的Double对象与3.14的比较结果:"+dNum.equals(3.14));
		//转换为十六进制
		System.out.println("3.14的十六进制表示为:"+Double.toHexString(dNum));
}
	}

运行结果:

 Boolean类

     Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段。此外,此类还为boolean类型和String类型的相互转换提供了许多方法,并提供了处理boolean类型时非常有用的其他一些常量和方法。

 Boolean类的常用方法。代码如下:

public class Test2{
	public static void main(String[] args) {
		Boolean b1=Boolean.valueOf("true");//创建Boolean对象
		Boolean b2=Boolean.valueOf("ok");
		System.out.println("b1:"+b1.booleanValue());
		System.out.println("b2:"+b2.booleanValue());
	}
}

运行结果:

 

Character类

      Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字),并可以很方便地将字符从大写转换成小写,反之亦然。

Character类的常用方法 。代码如下:

public class Test2{
	public static void main(String[] args) {
		Character mychar1=Character.valueOf('A');
		Character mychar2=Character.valueOf('a');
		if(Character.isUpperCase(mychar1)) {//判断是否为大写字母
			System.out.println(mychar1+"是大写字母");
			//转换为小写转换并输出
			System.out.println("装换为小写字母的结果:"+Character.toLowerCase(mychar1));
		}
		if(Character.isLowerCase(mychar2)) {
			System.out.println(mychar2+"是小写字母");
			//转换为大写并输出
			System.out.println("装换为大写字母的结果:"+Character.toUpperCase(mychar2));
	}
}

运行结果:

 Number类

      对于数值型的包装类,他们有一个共同的父类—— Number类,该类是一个抽象类,它是Byte、Integer、Short、Long、Float和Double类的父类,其子类必须提供将表示的数值转换为byte、int、short、long、float、和double的方法。

数字处理

 数字格式化

      数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字。数字格式化操作主要针对的是浮点型数据,包括double型和float型数据。在Java中使用java.text.DecimalFormat格式化数字。

 在Java中,没有格式化的数据遵循以下原则:

  1. 如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。
  2. 如果数据绝对值小于0.001并且大于10000000,使用科学记数法表示。

由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在Java中,可以使用DecimaFormat类进行格式化操作。

DecimaFormat类的常用方法和调用setGroupingSize()与setGroupingUsed()。代码如下:

public class Test1{
	public static void main(String args[]) {
		//11.2数字处理
		//11.2.1数字格式化
		DecimalFormat myFormat1=new DecimalFormat();//实例化DecimalFormat对象
		myFormat1.applyPattern("###,###,###");
		String my1=myFormat1.format(7857478);//将数字格式化
		System.out.println(my1);
			
	  DecimalFormat myFormat2=new DecimalFormat();
	  myFormat2.setGroupingSize(3);//设置将数字分组为3
	  myFormat2.setGroupingUsed(true);//设置允许数字进行分组
	  String my2=myFormat2.format(7857478);
	  System.out.println(my2);
	  }
}

 运行结果:

Math类

       Math类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值,最小值,以及平均值函数方法。这些方法都被定义为static形式,所以在程序中应用比较简便。可以使用如下形式调用:

Math.数学方法

1、三角函数 

 在Java代码中进行三角函数运算。代码如下:

public class Test1{
	public static void main(String args[]) {
 //三角函数
	  System.out.println(Math.toRadians(45));//取45度弧度值
	  double temp=Math.tan(Math.toRadians(45));
	  System.out.println(temp);
	  System.out.println(Math.tan(Math.toRadians(45)));
}
}

 运行结果:

2、指数函数方法 

 在Java代码中进行指数函数运算。代码如下:

public class Test1{
	public static void main(String args[]) {
 //指数函数
	  System.out.println(Math.cbrt(64));//求64的立方根
	  System.out.println(Math.pow(3,5));//求3的5次方
}
}

运行结果 :

3、取整函数方法

Math类中主要包括以下几种取整方法: 

 各场景下取整函数的运算结果。代码如下:

public class Test1{
	public static void main(String args[]) {
 //取整函数
	  System.out.println(Math.ceil(3.1));//返回一个等于参数的整数
	  System.out.println(Math.floor(3.9));//返回一个小于等于参数的整数
	  System.out.println(Math.rint(3.51));//返回与参数最接近的整数
	  System.out.println(Math.rint(3.49));
	  System.out.println(Math.rint(2.5));

运行结果:

4、取最大值、最小值、绝对值函数方法 

 取最大值、最小值、绝对值方法。代码如下:

public class Test1{
	public static void main(String args[]) {
 //最大最小 绝对值
	  System.out.println(Math.max(3.5,4.6));
	  System.out.println(Math.min(7,9));
	  System.out.println(Math.abs(9));
	  System.out.println(Math.abs(-3.25));
}
}

运行结果:

Random类

      Random类时JDK中的随机数生成器类,可以通过实例化一个Random对象创建一个随机数生成器,语法如下:

Random r=new Random();

 获取不同取值范围、不同类型的随机数。代码如下:

import java.util.Random;
public class Test1{
	public static void main(String args[]) {
// Random类
	  Random r=new Random();//实例化一个Random类
	  System.out.println(r.nextInt());//随机产生一个整数
	  System.out.println(r.nextInt(100));//随机产生一个大于等于0且小于100的整数
	  System.out.println(r.nextDouble());//随机产生一个双精度浮点型的值
}
}

运行结果:

BigInteger类 

      BigInteger 类的数字范围较 Integer 类的数字范围要大得多。前文介绍过 Integer 类是 int 的包装类, int 的最大值为2^{31}-1,如果要计算更大的数字,使用 Integer 类就无法实现了,所以 Java 中提 gInteger 类来处理更大的数字。BigInteger类支持任意精度的整数,也就是说,在运算中 BigInto类可以准确地表示任何大小的整数值而不会丢失信息。
      在BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
使用 BigInteger 类,可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
      例如,将2转换为BigInteger 类型,可以使用以下语句进行初始化操作:
BigInteger twolnstance= new BigInteger("2");

使用BigInteger类 进行数学运算。代码如下:


import java.math.BigInteger;
public class Test1{
	public static void main(String args[]) {
// BigInteger类
	  BigInteger bi1=new BigInteger("7893568990");//第1个大数字
	  BigInteger bi2=new BigInteger("2793070743");//第2个大数字
	  BigInteger mull=bi1.multiply(bi2);
}
}

运行结果:

BigDecimal类

      BigDecimal类和BigInteger类都能实现大数字的运算,不同的是BigDecimal类加入了小鼠的概念。一般的float型和double型数据只可以用来做科学计算或工程计算,但由于在商业计算重要计算中要求数字精度比较高,所以要用到BigDecimal类。BigDecimal类支持任何精度的定点数,可以用来精度计算货币值。

使用BigDecimal类进行数字运算。代码如下:

import java.math.BigDecimal;
public class Test1{
	public static void main(String args[]) {
 // BigDecimal类
	  BigDecimal bd1=new BigDecimal("7893568990");
	  BigDecimal bd2=new BigDecimal("2793070743");
	  BigDecimal mul2=bd1.multiply(bd2);
	  System.out.println(mul2);
}
}

运行结果:

日期时间类

Date类 

       Date类用来表示日期时间,使用该类表示时间需要使用其构造方法创建对象,

构造方法说明
Date()分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date(long date)分配Date对象并初始化此对象,以表示自标准基准时间(即1970年1月1日00:00:00GMT)起经过指定毫秒数date后的时间

        System类的currentTimeMillis0方法主要用来获取当前系统时间距标准基准时间的毫秒数。另外,这里需要注意的是,创建 Date 对象时使用的是 long 型整数,而不是 double 型,这主要是因为double类型可能会损失精度。

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毫秒的时间点

获取当前的日期和时间并输出。代码如下:

import java.util.Date;
public class DateTest {
	public static void main(String[] args) {
		//11.5 日期时间类
		//Date类
		Date d1=new Date();//当前时间
		System.out.println(d1);
		Date d2=new Date(16647320884L);//指定时间
		System.out.println(d2);
		
		System.out.println(d1.after(d2));
		System.out.println(d1.before(d2));
		System.out.println(d1.getTime());
		d1.setTime(198543979L);
		System.out.println(d1.getTime());
}
}

运行结果:

日期时间格式化

      DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化DateFormat 类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL4种。

DateFormat类的常用方法及其说明

方法说明
format(Date date)将一个Date对象实例格式化为日期/时间字符串
getCalendar()获取与此日期/时间格式器关联的日历
getDatelnstance()获取日期格式器,该格式器具有默认语言环境的默认格式化风格
getDateTimeInstance()获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格
getInstance0)获取为日期和时间使用SHORT风格的默认日期/时间格式器

getTimeInstance()
获取时间格式器,该格式器具有默认语言环境的默认格式化风格
parse(String source)将字符串解析成一个日期,并返回这个日期的Date对象

常用时间格式 

日期时间对应的格式
2023/10/25yyyy/MM/dd
2023.10.25yyyy.MM.dd
2023-09-15yyyy-MM-dd
2023年10月24日 10时25分07秒  星期二yyyy年MM月dd日 HH时mm分ss秒 EEE
下午5时ah时
今天已经过去了297天今天已经过去了D天

以中文形式打印当前的日期和时间。代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
	public static void main(String[] args) {
// 日期时间格式化
		DateFormat df1=DateFormat.getInstance();
		System.out.println(df1.format(d1));
		DateFormat df2=DateFormat.getDateInstance();
		System.out.println(df2.format(d1));
		DateFormat df3=DateFormat.getTimeInstance();
		System.out.println(df3.format(d1));
		
		DateFormat df4=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 kk时mm分ss秒");
		System.out.println(df4.format(d1));
	}
}

运行结果:

Calendar类

      Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY OF MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected.Calendar 提供了一个类方法 getInstance0,以获得此类型的一个通用的对象。

今天离中华人民共和国成立100周年差多少天。代码如下:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Test2{
	public static void main(String[] args) {
		System.out.println("-----------中国人民共和国成立100周年倒计时-----------");
		Date date=new Date();//当前时间
		//创建SimpleDateFormat对象,指定目标格式
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日");
		//调用format方法,格式化时间,转换为指定格式
		String today=simpleDateFormat.format(date);
		System.out.println("今天是"+today);
		long time1=date.getTime();
		//使用默认时区和语言环境获得一个日历calendar
		Calendar calendar=Calendar.getInstance();		
		calendar.set(2049,10-1,1);
		long time2=calendar.getTimeInMillis();
		long day=(time2-time1)/(1000*60*60*24);
		System.out.println("距离2049年10月1日还有"+day+"天!");
	}
	}

运行结果:

System类

       System类是JDK中提供的系统类,该类是用 final修饰的,所以不允许被继承。System 类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。

控制台输出字符

       System类提供了标准输入、标准输出和错误输出流,也就是说,System类提供了3个静态对象:n、out和err。本书中的代码多次使用了这些对象,最常见的就是 out 对象。

java输出换行的方法有以下两种:

System.out.print("\n");

System.out.println();

计时 

     System.currentTimeMillis()方法可以获取自1970年1月1日零点至今的毫秒数。该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。

查看执行一万次字符串所有拼接所消耗的时间。代码如下:

public class Test2{
	public static void main(String[] args) {
		long start=System.currentTimeMillis();//程序开始记录时间
		String str=null;//创建null字符串
		for(int i=0;i<10000;i++) {//循环一万次
			str+=i;//字符串与循环变量拼接
			}
		long end=System.currentTimeMillis();//记录循环结束时间
		System.out.println("循环用时:"+(end-start)+"毫秒");
		
		}
	}

运行结果:

Scanner类

      与C语言不同,Java 从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫 Scanner 的类来实现的。Scanner 英文直译就是扫描仪,它的用途就和现实生活的扫描仪一样,可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台输出System.in就表示从控制台输入,让Scanner 扫描System.in就可以获取用户输入的值了。

使用Scanner 类首先要引入该类,其语法如下:
import java.util.Scanner;    //引入Scanner 类

猜数字游戏。代码如下:

import java.util.Random;
import java.util.Scanner;
public class ScannerTest2{
	public static void main(String[] args) {
		Random r=new Random();//随机数对象
		int num=r.nextInt(100);//从1~99取值
		int input=-1;//记录用户输入的值
		Scanner sc=new Scanner(System.in);//扫描器扫描控制台输入
		while(true) {
			System.out.println("猜猜随机数是多少?");
			input=sc.nextInt();//获取用户输入的一个整数
			if(input>num) {//如果大于随机数
				System.out.println("你输入的数字大了!");
			}else if(input<num) {
				System.out.println("你输入的数字小了!");
			}else if(input==num) {//如果等于随机数
				break;//循环结束
			}else {
				System.out.println("你输入有误!");
			}
		}
		System.out.println("恭喜你答对了!");
		sc.close();//关闭扫描器
	}
}

 运行结果:

 Runtime类

Runtime类是JDK提供的运行时类,该类为Java程序提供了与当前运行环境相连的一个通道,Java程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime类不能使用new关键字创建实例,只能通过Runtime.getRuntime()方法获取实例。

执行本地命令 

      本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示 shell 命令,在 Windows 系统下就表示cmd命令。
      Runtime类提供exec0方法让Java代码可以执行系统的命令,exec0方法有很多重载的形式,例如:
Process exec(String command)

Process exec(Stringl cmdarray)

command:要执行的系统命令,字符串类型

ccmdarray:要执行的命令和相应的命令参数,字符串数组类型。

查看内存

       Runtime类可以通过 freeMemory0方法查看当前Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。

监控虚拟内存使用情况。代码如下:

public class Demo {
	public static void main(String args[]) {
		Runtime r=Runtime.getRuntime();//获取本地Runtime对象
		Integer ints[]=new Integer[10000];//创建长度为10000的整型数组
		long before=r.freeMemory();//获取当前空闲内存数
		System.out.println("赋值前空闲内存字节数:"+before);
		for(int i=0,length=ints.length;i<length;i++) {//循环为整型数组赋值
			ints[i]=i;//赋值
		}
		long after=r.freeMemory();//获取当前空闲内存数
		System.out.println("赋值后空闲内存字节数:"+after);
		System.out.println("数组用掉的内存字节数:"+after);//输出数组用掉的内存量
		}
	}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值