第九章Java常用类

9.1 包装类
Java是一种面向对象的语言,但在Java中不能定义基本数据类型的对象,为了能将基的型视为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中型数值的包装类Integer,boolean型的包装类Boolean等,这样便可以把这些基本数据类型的象进行处理。

Java中的包装类及其对应的基本数据类型


 

9.1.1 Integer类
java.lang包中的 Integer类、Byte类、Short类和Long类,分别将基本数据类型int、byte、 short扫一扫,看视频将基村 和long封装成一个类,由于这些类都是Number的子类,区别就是封装不同的数据类型,其包含的
及处理球 方法基本相同,所以本节以Integer类为例介绍整数包装类。
Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段,此外,该类提供了多个方法,能在int类型和String类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法。

1. 构造方法

Integer类有以下两种构造方法。
(1) Integer(int number)
该方法以一个int型变量作为参数来获取Integer对象。
例如,以int型变量作为参数创建Integer对象,代码如下:
Integer number = new Integer(7);
(2) Integer (String str)
该方法以一个String型变量作为参数来获取Integer对象。
代码如下:Integer number = new Integer("45");

注意:
如果要使用字符串变量创建Integer 对象,字符串变量的值一定要是数值型的,如“123”,否则将会抛出NumberFormatException异常。

Integer类的常用方法

 例 9.1 创建一个Demo“”类,“其中首先使用 Integer 类的parelnt方法将一个字符非转能。数据:然后创建一个Integcr对象,并调用其cquals方法与转换的int数据进行比较,最后黄Integer 类的toBimarySting方法、toHexsring方法、toOctalsring方法和toSting方法将四数趣换为二进制、十六进制、八进制和不常使用的十五进制表示形式。代码如下

public class Demo {
 
	public static void main(String[] args) {
		// 将字符串转换为int类型
		int num = Integer.parseInt("456");
		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);//输出数字的十五进制表示
	}
 
}


例 9.2 在项目中创建类GetCon,在主方法中实现将 图9.1IntInteger类的常量值输出

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

9.1.2 Double类
Double类和Float类是对double、float基本类型的封装,它们都是Number类的子类,都是对小数进行操作,所以常用方法基本相同,本节将对Double类进行介绍。对于Float类可以参考Double类的相关介绍。
Double类在对象中包装一个基本类型为double的值,每个Double类的对象都包含一个double类型的字段。此外,该类还提供多个方法,可以将double转换为String,将String转换为double,也提供了其他一些处理double时有用的常量和方法

 

1. 构造方法
Double类提供了以下两种构造方法来获得Double类对象。

(1) Double(double value)
基于double参数创建Double类对象。
例如,以double型变量作为参数创建Double对象,代码如下:
Double number = new Double("3.14");

(2) Double(String str)
基于String参数创建Double类对象。
例如,以String型变量作为参数创建Double对象,代码如下:
Double number = new Double("3.14");

 Double类常用方法

例 9.3 创建一个useDouble类,其中首先使用Double类的valueOr方法创建一个Dotheg然后使用Double类的常用方法对该对象进行操作,并查看它们的显示结果。代码如下: 

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

3.常量
Double类主要提供了以下常量:
(1)MAX_EXPONENT:返回int值,表示有限double变量可能具有的最大指数.
(2)MIN_EXPONENT:返回int值,表示标准化double变量可能具有的最小指数.
(3)NEGATIVE_INFINITY:返回double值,表示保存double类型的负无穷大值的常量.
(4)POSITIVE_INFINITY:返回double值,表示保存double类型的正无穷大值的常量。

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

1.构造方法
Boolean类提供了以下两种构造方法来获得Boolean类对象。
(1) Boolean(boolean value)
该方法创建一个表示value参数的Boolean对象。
例如,创建一个表示value参数的Boolean对象,代码如下:
Boolean b = new Boolean(true);

public class GetBoolean {
	private static String ture;
	public static void main(String[] args) {//主方法
		Boolean b1="ture";
		Boolean b2=new Boolean("ok");//创建Boolean对象
		System.out.println("b1:"+b1);
		System.out.println("b2:"+b2.booleanValue());
 
	}
 
}

9.1.5 Number类
前面介绍了Java中的包装类,对于数值型的包装类,它们有一个共同的父类——Number类,该类是一个抽象类,它是Byte、Integer、Short、Long、Float和Double类的父类,其子类必须提供将表示的数值转换为byte、int、short、long、float和double的方法。例如,doubleValue)方法返回双精度值,floatValue方法返回浮点值,这些方法如表9.6所示。
Number类的方法分别被Number的各子类所实现,也就是说,在Number类的所有子类中都包含以上这几种方法。

数值型包装类的共有方法 

Math 类
Java中提供了一个执行数学基妈的Math类,该类包括常用的数学运算方法,如三角函数方法、指数函数方法、对数函数方能方根函数方法等一些常用数学函数,除此之外还提供了一些常用的数学常量,如P1、E等,介绍 Math类以及其中的一些常用方法。
9.2.1Math 类概述
Math类表示数学类,它位于java.lang包中,由系统默认调用,该类中提供了众多数学面法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值以及绝对值函数法,这些方法都被定义为static形式,因此在程序中可以直接通过类名进行调用。

Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI //表示圆周率 PI的值
Math.E //表示自然对数底数e的值
例如,下面代码用来分别输出PI和E的值。代码如下:
System.out.print1n(”圆周率n的值为:”+Math.PI);
System.out.print1n(”自然对数底数e的值为:"+Math.E);
上面代码的输出结果为:
圆周率的值为:3.141592653589793

自然对数底数e的值为:2.718281828459045
 

Math 类中常用的取整方法

例9.8在项目中创建IntFunction类,在类的主方法中调用Maub类中的方法实现取整函数的运算,并输出运算结果

public class IntFunction {
	public static void main(String[] args) {
		//返回第一个大于等于参数的整数
		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));
 
	}
 
}

 9.3.1Math.random()方法
在Mah类中存在一个random0方法,用于生成题机数字,该方法默以生成大于等于00小于10的double型随机数,即0<=Math.random0=1.0,虽然Math.random0方法只可以生成01之同的duble型数字,但只要在Math.random)语句上稍加处理,就可以使用这个方法生成任意范围的随机数
(int)(Math.RandomO*n) 返回大于等于0小于n的随机数
m+(int)(Math.Random()*n) 返回大于等于m小于m+n(不包括m+n)的随机数

为了更好地解释这种生成随机数的方式,下面举例说明。

例9.10使用Math.random()方法实现一个简单的猜数字小游戏,要求:使用ah zndn(方法生成一个0-100之间的随机数字,然后用户输入猜测的数字,判断输入的数字是否与随机生成的数字匹配,如果不匹配,提示相应的信息,如果匹配,则表示猜中,游戏结束。代码如下:

 

import java.util.Scanner;//导入import java.util.Scanner包
public class NumGame {
	public static void main(String[] args) {
		System.out.println("----猜数字游戏----");
		int iNum;
		int iGuess;
		Scanner in=new Scanner(System.in);//创建扫描器对象,用于输入
		iNum=(int) (Math.random()*100);//生成0到100之间的随机数
		System.out.println("请输入你猜的数字:");
		iGuess=in.nextInt();//输入首次猜测的数字
		while((iGuess!=-1)&&(iGuess!=iNum)) {//判断输入的数字不是-1或者基数
			if(iGuess<iNum)//若猜测的数字小于基准数,则提示用户输入的数太小,并让用户重新输入
			{System.out.print("太小,请重新输入:");			
			iGuess=in.nextInt();
		}else//若猜测的数字大于基准数,则提示用户输入的数太大,并让用户重新输入
		{System.out.print("太大,请重新输入:");			
		iGuess=in.nextInt();
	}}if(iGuess==-1)
	{System.out.println("退出游戏!");//若最后一次输入的数字是-1,循环结束的原因是用户选择退出游戏
	}else {System.out.println("恭喜你,你赢了,猜中的数字是:"+iNum);
	}System.out.println("\n----游戏结束----");
	}
}

9.3.2Random

除了Math类中的random0方法可以获取随机数之外,Java中还提供了一种可以获取随机数,那就是java.util.Random类,该类表示一个随机数生成器,可以通过实例化一个Random对象创建一个随机数生成器。语法如下:
Random r=new Random();
其中,r是指Random对象。
以这种方式实例化对象时,Java编译器以系统当前时间作为随机数生成器的种子,因为每时每刻的时间不可能相同,所以生成的随机数将不同,但是如果运行速度太快,也会生成两次运行结果相同的随机数。 同时也可以在实例化Random类对象时,设置随机数生成器的种子。

 例 9.12 使用Random类模拟微信的抢红包功能,具体实现时,在项目中创建Rtk后根据用户输入的红包额度和个数随机生成每个红包的金额。代码如下:

import java.util.Random;
import java.util.Scanner;
public class RedBage {//创建一个RedBags类
	public static void main(String[] args) {//主方法
	System.out.println("--模拟微信抢红包--\n");
	Scanner sc = new Scanner(System.in);//控制台输入
	System.out.print("请输入要装入红包的总金额(元):");
	double total = sc.nextDouble();//输入“红包的总金额”
	System.out.print("请输入红包的个数(个):");
	int bagsnum= sc.nextInt();//输入“红包的个数”
	double min = 0.01;//初始化“红包的最小金额”
	Random random = new Random();//创建随机数对象random
	for(int i= 1; i < bagsnum;i++){//设置“循环”
	/*
	*
	*通过公式模拟数学中的离散模型计算一个红包可以放的最大金额
	*本次红包可用最大金额=可分配金额-(红包总数-已发出的红包数)
	*/
	double max = total-(bagsnum- i) *min;
	double bound = max -min;//设置随机金额的取值范围
 
	/*据随机金额的取值范围,随机生成红包金额。
	*由于nextInt(int bound)只能用整型做参数,所以先将bound乘100
	*获取到一个整数后,将这个整数除100(小数点向左挪两位)并转换成与金额相同的浮点类型
	*/
	double safe =(double) random.nextInt((int) (bound*100))/100;
	double money = safe + min;// 最后加上红包的最小金额,以防safe出现0值
	total = total - money;//替换total的值
	System.out.println("第"+i+"个红包:"+String.format("%.2f",money)+"元");
	}
	System.out.println("第"+ bagsnum+"个红包:"+String.format("%.2f",total)+"元");
	sc.close();// 关闭控制台输入
 
	}
 
}

9.4 日期时间类
在程序开发中,经常需要处理日期时间,Java中提供了专门的日期时间类来处理相应的操作,本节将对Java中的日期时间类进行详细讲解。
9.4.1 Date 类
Date 类用于表示日期时间,它位于java.util包中,程序中使用该类表示时间时,需要使用其造方法创建Date类的对象,其构造方法及说明如表9.12所示。

例9.14 创建一个Java类,在其中首先创建 Date类的对象;然后使用 Datefomnat类的getlnstance方法和SimpleDateFormat类的构造方法创建不同的DateFormat对象,并指定不同的日期时间将式并对当前日期时间进行格式化,并输出。代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatTest {
	public static void main(String[] args) {
		
	//创建日期
	Date date = new Date();
	//创建不同的日期格式
	DateFormat dfl= DateFormat.getInstance();
	DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE");
	DateFormat df3 = new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒EE",Locale.CHINA);
	DateFormat df4=new SimpleDateFormat ("yyy-MM-dd hh:mm:ss EE", Locale.US);
	DateFormat df5 = new SimpleDateFormat("yyyy-MM-dd");
	DateFormat df6= new SimpleDateFormat("yyyy年MM月dd日");// 将日期按照不同格式进行输出
	System.out.println("-----将日期时间按照不同格式进行输出-----");
	System.out.println("按照Java默认的日期格式:"+dfl.format(date));
	System.out.println("按照指定格式 yyyy-MM-dd hh:mm:ss,系统默认区域:"+df2.format(date));
	System.out.println("按照指定格式yyyy年MM月dd日hh时mm分ss秒,区域为中文:"+df3.format(date)); 
	System.out.println("按照指定格式yyyy-MM-dd hh:mm:ss,区域为美国:"+df4.format(date));
	System.out.println("按照指定格式yyyy-MM-dd:"+ df5.format (date));
	System.out.println("按照指定格式yyyy年MM月dd日:"+df6.format (date));
	}
 
}

例 9.15创建一个Java程序,在其中通过使用Calendar类的相关方法输出202年”家口”冬奥会的倒计时、代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class O1ympicWinterGames {//创建01ympicWinterGames类
	public static void main(String[] args) {
		System.out.println("-----冬奥会倒计时-----");
		Date date=new Date();// 实例化 Date
		//创建SimpleDateFormat对象,指定目标格式
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyy-MM-dd");
		String today=simpleDateFormat.format(date);//调用format 方法,格式转换为指定方法
		System.out.println("今天是"+today);//输出当前日期
		long time1=date.getTime();// 计算自1970年1月1日00:00:00 至当前经过的毫秒数
		Calendar calendar=Calendar.getInstance();
		//设置日历calendar中的年、月和日的值。因为月份是从0开始计算的,所以这里要减1
		calendar.set(2002,2-1, 4);
		//计算自1970年1月1日00:00:00至2022年2月4日所经过的毫秒数
		long time2=calendar.getTimeInMillis();
		// 计算2022年2月4日距离当前时间相差的天数
		long day=(time2-time1)/(1000*60*60*24);
		System.out.println("距离2022年"+"北京一张家口"+"冬奥会还有"+day+"天!");
	}
 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值