一,包装类
java是一种面向对象语言,java中的类把方法与数据链接在一起,构成了自包含式的处理单元。
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 对象。
例如,以 String型变量作为参数创建Integer对象,代码如下
Integer number = new Integer("45");
注意:
如果要使用字符串变量创建 Integer 对象,字符串变量的值一定要是数值型的,如"123",否则将会抛出 NumberFormatException 异常
2、常用方法 Integer 类的常用方法如表所示:
下面通过一个实例演示Integer 类的常用方法的使用: 创建一个 Demo 类,其中首先使用 Integer 类的 parseInt 方法将一个字符串转换为 int 数据;然后创建一个 Integer 对象,并调用其 equa ls 方法与转换的 int 数据进行比较;最后演示使用 Integer 类的 toBinaryString 方法toHexString 方法去、toOctalString方法和toString方法将int数据转换为二进制、十六进制、八进制和不常使用的十五 i进制表示形式。
代码
结果
3.常量
Integer类提供了以下 4个常量:
MAX_VALUE:表示int类型可取的最大值,即2(31)-1
MIN_VALUE:表示int类型可取的最小值,即-2(31)。 、
SIZE:用来以二进制补码形式表示 int 值的位数。
TYPE:表示基本类型 int 的 Class 实例。
代码
结果
2,Double类
Double 类和 Float 类是对double、float 基本类型的封装,它们都是 Number 类的子类,都是小数进行操作,所以常用方法基本相同,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");
2、常用方法
Double 类的常用方法如表所示:
代码
3. 常量
Double类主要提供了以下常量:
(1)MAX_EXPONENT:返回 int 值,表示有限 double 变量可能具有的最大指数。
(2)MIN EXPONENT:返回 int 值,表示标准化 double变量可能具有的最小指数。
(3)NEGATIVE INFINITY:返回 double值,表示保存double类型的负无穷大值的常量。(4)POSITIVE INFINITY:返回 double 值,表示保存 double类型的正无穷大值的常量。
3,Boolean类
Boolean为boolean值包装在一个对象中。一个Boolean类型的对象只包含一为boolean 的字段。此外,此类还为 boolean 和 String的相互转换提供了许多方法,并提供了处理boolean 时非常有用的其他一些常量和方法。
常用方法
Boolean类的常用方法如表所示:
代码
常量
Boolean 提供了以下3个常量:
(1)TRUE:对应基值true的Boolean 对象。
(2)FALSE:对应基值 false 的 Boolean 对象。
(3)TYPE:基本类型 boolean 的 Class 对象。
4,Character类
Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。
常用方法
character 类的常用方法如表所示
代码
常量
Character 类提供了大量表示特定字符的常量,例如:
(1)CONNECTOR_PUNCTUATION:返回 byte 型值,表示Unicode规范中的常规类别“Pc”。
(2)UNASSIGNED:返回 byte 型值,表示 Unicode 规范中的常规类别“Cn”。
(3)TITLECASE LETTER:返回byte型值, 表示Unicode规范中的常规类别“Lt”。
5,Number类
前面介绍了 Java 中的包装类,对于数值型的包装类,它们有一个共同的父类--Number类,该类是一个抽象类,它是Byte、Integer、Short、Long、Float和Double类的父类,其子类必须提供将表示的数值转换为byte、int、short、long、float和double的方法。例如,doubleValue(方法返回双精度值,floatValueO方法返回浮点值。
二,数字处理
在java语言中,提供了一个执行数学基本运算的Math类,该类包括常用的数学运算方法,
1,数字格式化
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.textDecimalFormat格式化数字。
在 Java 中,没有格式化的数据遵循以下原则:如果数据绝对值大于0.001并且小于10000000,使以常规小数形式表示。如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Jav中,可以使用DecimalFormat类进行格式化操作。DecimalFormat类是NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一艘情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中applyPattern0方法来实现数字格式化。当格式化数字时,可在 DecimalFormat 类中使用一些特殊字符构成一个格式化模板,使数字按照定的特殊字符规则进行匹配。表 11.7 列举了格式化模板中的特殊字符及其所代表的含义。
代码
import java.text.DecimalFormat; // 导包
public class demo {
// 使用实例化对象时设置格式化模式
public static void SimgleFormat(String pattern,double value){
// 实例化DecimalFormat对象
DecimalFormat myFormat=new DecimalFormat(pattern);
// 将数字进行格式化
String output=myFormat.format(value);
System.out.println(value+" "+pattern+" "+output);
}
//使用applyPattern方法对数字进行格式化
public static void UseApplyPatternMethodFormat(String pattern,double value){
DecimalFormat myFormat=new DecimalFormat();
myFormat.applyPattern(pattern); // 调用applyPattern方法设置格式化模板
System.out.println(value+" "+pattern+" "+myFormat.format(value));
}
public static void main(String[] args) {
SimgleFormat("###,###.###",123456.789);
// 调用SimgleFormat方法,在数字后加上单位
SimgleFormat("00000000.###kg",123456.789);
// 按照模板格式化数字,不存在的位以0显示
SimgleFormat("000000.000",123.78);
// 将数字转换位百分数形式
UseApplyPatternMethodFormat("#.###%",0.789);
// 将小数点后格式化位两位
UseApplyPatternMethodFormat("###.##",123456.789);
// 将数字转换位千分数形式
UseApplyPatternMethodFormat("0.00\u2030",0.789);
}
}
结果
2,Math类
Math 类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取量大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便可以使用如下形式调用:
Math. 数学方法
在Math类中,除函数方法外还存在一些常用数字常量,如PI、E等。这些数学常量作为Math 关的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI
Math.E
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
三角函数方法
Math 类中包含的三角函数方法如下
: public static double sin(doublea):返回角的三角正弦。public static double cos(double a):返回角的三角余弦。
public static double tan(double a):返回角的三角正切。public static double asin(doublea): 返回一个值的反正弦。
public static double acos(doublea): 返回一个值的反余弦。
public static double atan(doublea):返回一个值的反正切。
public static double toRadians(double angdeg): 将角度转换为弧度。 public static double toDegrees(double angrad): 将弧度转换为角度。
代码
public class demo_2 {
public static void main(String[] args) {
// 取90度的正弦
System.out.println("90度的正弦值是:"+Math.sin(Math.PI/2));
// 取0度的余弦
System.out.println("0度的余弦值:"+Math.cos(0));
// 取60度的正切
System.out.println("60度的正切值:"+Math.tan(Math.PI/3));
// 取2的平方根与2商的反正弦
System.out.println("2的平方根与2商的反正弦值:"+Math.asin(Math.sqrt(2)/2));
// 取1的反正切
System.out.println("1的反正切值:"+Math.atan(1));
// 取120度的弧度值
System.out.println("120度的弧度值:"+Math.toRadians(120.0D));
// 取π/2的角度
System.out.println("π/2的角度值:"+Math.toDegrees(Math.PI/2));
}
}
结果
代码
结果
3,Random类
seedValue:随机数生成器的种子。
在Random类中,提供了获取各种数类机数的方法,下面列举几个常用的方法:
public int nextint():返回一个随机整数。
public int nextInt(int n): 返回大于等于0且小于n 的随机整数。
public long nextLong():返回一个随机长整型值。
public boolean nextBoolean():返回一个随机布尔型值。
public float nextFloat0: 返回一个随机单精度浮点型值。
public double nextDouble():返回一个随机双精度浮点型值。
public double nextGaussian(): 返回一个概率察度为高斯分布的双精度浮点型值。
例题代码如下
结果
代码
import java.util.Random;
public class demo_2 {
public static void main(String[] args) {
Random r=new Random();
System.out.println("随机产生一个整数:"+r.nextInt());
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());
}
}
结果
4,BigInteger类
BigInteger 类的数字范围校 Integer类的数字范围要大得多。前文介绍计 Ineger 类是int的包装类,int的最大值为 ,如果要计算更大的数字,使用 Integer 类就无法实现了,所以Java中提供了BigInteger类来处理更大的数字。Biglnteger 类支持任意精度的整数,也就是说,在运算中BigInteger类可以准确地表示任何大小的整数值而不会丢失信息。在BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。使用BigInteger 类,可以实例化一个BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但是直接的一种方式是参数以字符串形式代表有处理的数字。例如,将 2 转换为 BigInteger 类型,可以使用以下语句进行初始化操作:
Biginteger twolnstance = new Bigintegor(\"2\");
一且创建了对象实例,就可以调用 BigInteger 类中的一些方法进行运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值等操作。
代码
结果
代码
结果
5,BigDecimal类
BigDecimal类和 BigInteger 类都能实现大数字的运算,不同的是 BigDecimal 类加入了小数的概念。一般的 float 型和 double 型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal 类。BigDecimal 类支持任何精度的定点数,可以用它来精确计算货币值。
代码
结果
三,System类
System类的JDK中提供的系统类,该类是用final修饰的,所以不允许继承。System类提供了很多系统层面的操作方法。
这个类其实我们并不陌生,像输出语句,就是调用System类中静态方法来实现的。而很多工具类内部其实也是使用System类中的方法实现的。
如同Arrays类中的copyOf数组复制方法,底层也是通过调用System类中的方法来实现的
1.控制台输出字符
通过使用System类中的currentTimeMillis()方法来获取某段程序的运行时间。
代码
结果
2,计时
System.currentTimeMillis()方法可以获取自 1970年1月1日零点至今的毫秒数。Date日期类也有类似的方法,但代码会比 System 类多,所以 System.currentTimeMillis()方法是为获取当前毫秒数最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。
四,Scanner类
与C语言不同,Java从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫Scanner的类来实现的,它的用途可以将数字化信息流转为人类可识别的文字,控制台输出内容用到了System.out就表示向控制台输出,System.in就表示从控制台输入,让Scanner扫描System.in就可以获取用户输入的值了。
由于Scanner类不是在Java.lang包下的,所以使用时需要导包。
import java.util.Scanner;
1
Scanner类提供了很多获取不同数值类型的方法。但是却没提供读取单个字符的方法,那么如果想要读取单个字符,除了使用Java的其它类之外,还有一个小技巧也能达到读取的那个字符的效果。
Scanner in=new Scanner(System.in);
System.out.println(in.nextLine().charAt(0));
代码
结果
五,日期时间类
1,Date类
Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象
需要注意的是创建Date对象时,使用的的是long类型整数,而不是double类型,这主要是因为double类型可能会丢失精度。
代码
结果
2,日期时间格式化
如果在程序中直接输出Date类,显示的结果是:“日期:Sun May 21 09:19:52 CST 2023”这种格式的日期时间,那么如何让其显示为 “2023/5/21"或"9:26" 这样的时间格式呢?Java提供了DateFormat类来实现类似的功能。
DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。
DateFormat 类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括 SHORT、MEDIUM、LONG 和FULL4种:
3,Calendar类
Calendar是一个日历类,可以对日期时间进行加减运算等复杂的操作。Calendar类是抽象类,它为特定瞬间与一组日历字段之间的转换提供一些的方法,并为操作日历字段提供了一些方法。这些字段与方法被定义为protected。
Calendar提供了一个类方法 getInstance(),以获取一个通用的对象。
使用方法:Calendar rightNow=Calendar.getInstance();
1
由于Calendar是一个抽象类,所以不能使用new创建对象,因此除了使用上述方法创建其对象外,必须使用其子类,如GregorianCalendar类创建对象。
最后对 Calendar 类的使用做出几点总结:
c.set(CalendarDAY_OF_MONTH,0)获取的是上个月的最后一天,所以调用前需要将月份往后加一个月。
Calendar.MONTH的第一个月是使用0记录的,所以在获得月份数字后要加1。年和日是从1开始记录的,不需要加 1。
Calendar.DAY OF WEEK 的第一天是周日,周一是第二天,周六是最后一天。
六,Runtime类
Runtime 类是 JDK 供的运行时类,该类为 Java程序提供了与当前运行环境相连接的一个通道。
Runtime 类将唯一的一个无参构造给私有化了,所以外界不能使用 new 关键字创建实例,只能通过 Runtime. getRuntime()方法获取实例。
1,执行本地命令
本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示 shell 命令,在 Windows 系统下表示 cmd 命令。
Runtime 类提供 exec()方法让 Java 代码可以执行系统的命令,exec()方法有很多重载的形式。
Process类
exec()方法会返回一个Process对象。Process类是Java中的进程类,该类是抽象类,不能使用new创建其对象。
2,查看内容
Runtime类可以通过 freeMemory()方法查看当前Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
总结
在本章中,学习了大量的AIP(Application Programming Interface)的使用,在程序中合理的运行这些API的话,能使得程序的编写变得事半功倍,但是大量的API的学习,不一定学完就记住了,毕竟本章的篇幅可谓是很长的,一般都是在使用的过程中,才会逐渐加深印象,但是如果有时想运用某个API的时候记不到了怎么办,这个时候就需要查阅Java的API文档了,在文档中有着详细的介绍,通过AIP文档,我们就能知道某个API内部的字段、方法、子类、父类等信息。