11.1包装类
表11.1 包装类及其对应的基本数据类型
11.1.1 Integer 类
Integer 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含了一个 int 类型的字节。
例题:
package elevenbao;
public class 例题1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = Integer.parseInt("456");
Integer iNum = Integer.valueOf("456");
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);
}
}
MAX_VALUE: 表示 int 类型可取的最大值,即2的31次方减一。
MIN_VALUE:表示 int 类型可取的最小值,即-2的31次方。
SIZE:用来以二进制补码的形式表示 int 值的位数
TYPE:表示基本类型 int 的Cless 实例。
例题11.2:
package elevenbao;
public class 例题2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
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);
}
}
结果:
11.1.2 Double类
Double 类在对象中包装一个基本数据类型为 double 的值,每个 Double 类的对象都包含一个 double 类型的字段。此外,该类还提供了多个方法,可以将 double 类型转换为 String 类型,将 String 类型转化为 double 类型。
例题11.3:
package elevenbao;
public class 例题3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
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));
}
}
结果:
11.1.3 Boolean类
Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean 类型的对象只包含一个类型为boolean的字段。此外,此类还为boolean类型和String 类型的相互转换提供了许多方法,并提供了处理boolean 类型时非常有用的其他一些常量和方法。Boolean类的常用方法如表11.4 所示。
例题11.4:
public class BooleanDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Boolean b1 =Boolean.valueOf("true"); //创建Boolean对象
Boolean b2 =Boolean.valueOf("ok");
System.out.println("b1:"+b1.booleanValue());
System.out.println("b2:"+b2.booleanValue());
}
}
//例11.4
运行结果:
11.1.4 Character 类
该提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转化为小写,反之亦然。Character 类的常用方法:
例题:
public class UpperOrLower {
public static void main(String[] args) {
// TODO Auto-generated method stub
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(mychar1+"是小写字母");
//转换为大写字母输出
System.out.println("转换为小写字母的结果:"+Character.toUpperCase(mychar2));
}
}
}//例题11.5
结果:
Character类提供了大量表示特定字符的常量,例如:
☑CONNECTOR_PUNCTUATION:返回 byte 型值,表示 Unicode 规范中的常规类别“ Pc ”。
☑ UNASSIGNED:返回byte 型值,表示Unicode规范中的常规类别“Cn”。
☑TITLECASE_LETTER:返回 byte 型值,表示 Unicode 规范中的常规类别“ Lt ”。
说明:Character类提供的常量有很多,详细列表可查看Java API文档。
11.1.5 Number类
数值包装类的共有方法:
11.2 数字处理
11.2.1 数字格式化
数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.textDecimalFormat 格式化数字。
DecimalFormat 类是 NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。
DecimalFormat 类中的特殊字符及其说明:
例题:
package elevenbao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Random;
public class MathTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//11.2 数字处理
//11.2.1 数字格式化
DecimalFormat myFormat = new DecimalFormat();
myFormat.applyPattern("###,###,###");
String my = myFormat.format(7857478);
System.out.println(my);
DecimalFormat myFormat1 = new DecimalFormat();
myFormat1.setGroupingSize(2);
myFormat1.setGroupingUsed(true);
String my1 = myFormat1.format(7857478);
System.out.println(my1);
}
}
11.2.2 Math 类
Math 类 提供了众多数学函数方法。主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便。
1.三角函数方法![](https://i-blog.csdnimg.cn/blog_migrate/659eec17e0467852aaf9f46c717db168.png)
package elevenbao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Random;
public class MathTest {
public static void main(String[] args) {
//11.2.2 math类
//三角函数
System.out.println(Math.toRadians(45));
double temp = Math.tan(Math.toRadians(45));
System.out.println(temp);
System.out.println(Math.tan(Math.toRadians(45)));
}
}
2. 指数函数方法
package elevenbao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Random;
public class MathTest {
public static void main(String[] args) {
//指数函数Mat
System.out.println(Math.cbrt(64));
System.out.println(Math.pow(3, 5));
}
}
3. 取整函数方法
package elevenbao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Random;
public class MathTest {
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(3.5));
System.out.println(Math.rint(2.5));
}
}
4. 取最大值、最小值、绝对值函数方法
11.2.3 Random 类
Random 类是 JDK 中的随机数生成器类,可以通过实例化一个 Random 对象创建一个随机数生成器,语法如下:
Random r = new Random();
也可以设置随机数生成器的种子。语法如下:
Random r = new Random(seedValue);
package elevenbao;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Random;
public class MathTest {
public static void main(String[] args) {
//11.2.3 Random类
Random r = new Random();
System.out.println(r.nextInt());
System.out.println(r.nextInt(100));
System.out.println(r.nextDouble());
}
}
1.2.4 BigInteger 类
BigInteger 类的数字范围教 Integer 类的数字范围大的多。
在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
使用 BigInteger 类。可以实例化一个 BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将 2 转换为BigInteger 类型,可以使用以下语句进行初始化操作:
BigInteger twolnstance = new BigInteger("2");
11.2.5 BigDecimal 类
BigDecimal 类和 BigInteger 类都能实现大数字的运算,不同的是 BigDecimal 类加入了小数的概念。
BigDecimal 类中的常用构造方法:
BigDecimal类实现的加减乘除的方法如下:
BigDecimal类中divide()方法有多种设置,用于但会商小数点后的末尾的处理,名称和含义如下:
例题:
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.13
11.3 System 类
System 类是 JDK 中提供的系统类,该类是用 final 修饰的,所以不允许被继承。
System 类提供的常用方法:
11.3.1 控制台输出字符
1. 不会自动换行的 print() 方法
System.out.print("Hello");
2.可以自动换行的 println() 方法
System.out.println("Hello");
使用这俩个输出方法时还要注意一下两点:
(1)“System.out.println("\n");” 会打印两个空行。
(2) “System.out.print();” 无参数会报错。
11.3.2 计时
System.currentTimeMillis() 方法可以获取自1970年1月1日零点至今的毫秒数。
例题:
package elevenbao;
public class 例题14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
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.4 Scanner 类
使用Scanner 类首先要引入该类,其语法如下:
import.java.util.Scanner;
使用 Scanner 类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
import javax.print.attribute.standard.QueuedJobCount;
import javax.swing.*;
import java.util.Random;
import java.util.Scanner;
public class 猜数字 {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(200) - 100; //-100到100
System.out.println(number);
Scanner sc = new Scanner(System.in);
int a = 0;
while(true){
System.out.println("请输入你要猜的数字");
//int a = sc. nextInt();
//占内存
a = sc.nextInt();
if(a > number){
System.out.println("大了");
}else if(a < number){
System.out.println("小了");
}else if(a == number){
System.out.println("猜中了");
break;
}else {
System.out.println("输入错误");
}
}
System.out.println("恭喜你答对了");
sc.close();
}
}
结果:
11.5 日期时间类
11.5.1 Date 类
Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象。
例题:
package elevenbao;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//11.5 日期时间类
Date d1 = new Date();
System.out.println(d1);
Date d2 = new Date(1664732264079L);
System.out.println(d2);
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));
System.out.println(d1.getTime());
d1.setTime(1985432264079L);
System.out.println(d1.getTime());
System.out.println();
}
}
结果:
11.5.2日期时间格式化
DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。DateFormat类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括SHORT、MEDIUM、LONG和FULL4种:
SHORT:完全为数字,如12.13.52或3:30pm。
MEDIUM:较长,如Jan 12,1952。
LONG:更长,如January 12,1952或3:30:32pm。
FULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建DateFormat类的一个对象,由于它是抽象类,因此可以使用其静态方法 getDateInstance()进行创建,语法如下:
DateFormat df =DateFormat.getDatelnstance();
DateFormat 类的常用方法及其说明如下:
SimpleDateFormat类提供了19个格式化字符,如下:
一些常用的日期时间格式如下:
例题11.7
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日 EEEE HH时mm分ss秒");
System.out.print("各位观众大家好,现在是");
System.out.print(df.format(new Date()));
System.out.println(",欢迎收看新闻。");
}
}
//例题11.17
运行结果:
11.5.3Calendar类
Calendar 提供了一个类方法 getnstance(),以获得此类型的一个通用的对象。Calendar类的grtnstance()方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow =Calendar.getlnstance();
说明:由于Calendar类是一个抽象类,不能用new创建实例对象,因此除了使用getInstance0方法创建其对象,如果需要创建其对象,必须使用其子类,如GregorianCalendar类。
Calendar类提供的常用字段及其说明如下:
Calendar类提供的常用方法及其说明如下:
例题11.8:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CountDown {
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); // 输出当前日期
// 获取自1970年1月1日至当前时间所经过的毫秒数
long time1 = date.getTime();
// 使用默认时区和语言环境获得一个日历calendar
Calendar calendar = Calendar.getInstance();
// 设置日历calendar中的 年、月 和日的值。因为月份是从0开始计算的,所以这里要减一
calendar.set(2049, 10 - 1, 1);
// 计算自1970年1月1日至2049年10月1日所经过的毫秒数
long time2 = calendar.getTimeInMillis();
// 计算2049年10月1日距离当前时间相差的天数
long day = (time2 - time1) / (1000 * 60 * 60 * 24);
System.out.println("距离2049年10月1日还有 " + day + " 天!");
}
}
//例题11.18
运行结果:
最后对Calendar类的使用做出几点总结:
c.set(Calendar.DAY_OF_MONTH,0)获取的是上个月的最后一天,所以调用前需要将月份往后
加一个月。
Calendar.MONTH的第一个月是使用()记录的,所以在获得月份数字后要加1。年和日是从
开始记录的,不需要加1。
Calendar.DAY OF_WEEK的第一天是周日,周一是第二天,周六是最后一天。
11.6Runtime类
Runtime类的常用方法如下:
11.6.1执行本地命令
本地命令指的是操作系统的命令。例如,在Linux系统下就表示shell命令,在Windows系统下就表示cmd命令。
Rutime类提供exec()方法让Java代码可以执行系统的命令,exec)方法有很多重载的形式,例如:
Process exec(String command)
Process exec(String, cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hellojava”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command,=("javac","hello.java"];
Runtime.getRuntime().exec(command);
exec)方法会返回一个 Process对象。Process类是Java中进程类,该类是抽象类,不能使用new关键字创建实例。Process类的常用方法如表11.22所示,开发可以使用getlnputStream)方法获取进程返回的信息。
例题11.9
11.6.2查看内存
例题11.20
package a;
public class MemoryDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Runtime r = Runtime.getRuntime();
Integer ints[] =new Integer[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("数组用掉的内存字节数:"+(before-after));
}
}
运行结果: