目录
9.1包装类
2···
前6个都是Number的子类
9.1(1)手动装箱/手动拆箱
public class IntegerTest02 {
public static void main(String[] args) {
// 123这个基本数据类型,进行构造方法的包装达到了:基本数据类型向引用数据类型的转换。
// 基本数据类型 -(转换为)->引用数据类型(装箱)
Integer i = new Integer(123);
// 将引用数据类型--(转换为)-> 基本数据类型
float f = i.floatValue();
System.out.println(f); //123.0
// 将引用数据类型--(转换为)-> 基本数据类型(拆箱)
int retValue = i.intValue();
System.out.println(retValue); //123
}
}
自动装箱/自动拆箱(java5新特性)
1.什么是自动装箱和自动拆箱?
- 自动装箱:基本数据类型自动转换成包装类。
- 自动拆箱:包装类自动转换成基本数据类型
2.自动装箱和自动拆箱的好处?
- 方便编程
- 有了自动拆箱之后,Number类中的方法就用不着了
-
public class IntegerTest05 { public static void main(String[] args) { // 900是基本数据类型 // x是包装类型 // 基本数据类型 --(自动转换)--> 包装类型:自动装箱 Integer x = 900; // 等同于:Integer z = new Integer(900); System.out.println(x); // x是包装类型 // y是基本数据类型 // 包装类型 --(自动转换)--> 基本数据类型:自动拆箱 int y = x; System.out.println(y); } }
注意:自动装箱底层实际上还是new对象了。
-
public class IntegerTest05 { public static void main(String[] args) { // z是一个引用,z是一个变量,z还是保存了一个对象的内存地址。 Integer z = 1000; // 等同于:Integer z = new Integer(1000); // 分析为什么这个没有报错呢? // +两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱。将z转换成基本数据类型 // 在java5之前你这样写肯定编译器报错。 System.out.println(z + 1);//1001 Integer a = 1000; // Integer a = new Integer(1000); a是个引用,保存内存地址指向对象。 Integer b = 1000; // Integer b = new Integer(1000); b是个引用,保存内存地址指向对象。 System.out.println(a == b); //false } }
注意:
- == 这个运算符不会触发自动拆箱机制
- == 永远判断的都是两个对象的内存地址是否相同。
- 只有
+ - * /
等运算的时候才会触发自动拆箱机制
9.1.1Integer类
Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中。
Integer类在对象中包装了一个基本类型int的值,也就是每个Integer对象包含一个int类型的字段。在Integer源码中如下定义:
private final int value;
构造方法
Integer类提供了两种构造方法:它们都会返回一个Integer对象
(1)Integer(int value);
Integer number=new Integer(7);
(2)Integer(String str); //要注意的是字符串不能包含非数字字符,否则会抛出NumberFormatException
Integer number=new Integer("7");
(3)除此之外,还可以给Integer对象直接赋值,如:Integer a = 10;一些重要的方法
常用方法
例题9.1创建一个 Demo类,其中首先使用Integer类的 parseInt方法将一个字符串转换为i"nt数据:然后创建一个 Integer对象,并调用其equals方法与转换的int数据进行比较;最后演示使用Integer类的toBinaryString方法、toHexString方法、toOctalString方法和 toString方法将int 数据转换为二进制、十六进制、八进制和不常使用的十五进制表示形式。代码如下:
package 第九章;
public class Demo {
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);
System.out.println("圆周率π的值为:" + Math.PI);
System.out.println("自然对数底数e的值为:" + Math.E);
}
}
int常量:
[static int] MAX_VALUE:值为 231-1 的常量,它表示 int 类型能够表示的最大值。
[static int] MIN_VALUE:值为 -231 的常量,它表示 int 类型能够表示的最小值。
[static int] SIZE: 用来以二进制补码形式表示 int 值的比特位数。
[static Class] TYPE:表示基本类型 int 的 Class 实例。
[static int] BYTES:返回int值所占的字节数。
例题9.2在项目中创建类GetCon,在主方法实现Integer类的常量值输出
public class GetCon {
// 创建类GetCon
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.2Double类
Double 类中的构造方法有如下两个。
Double(double value):构造一个新分配的 Double 对象,它表示转换为 double 类型的参数。
Double double1 = new Double(5.556); // 以 double 类型的变量作为参数创建 Double 对象
Double(String str):构造一个新分配的 Double 对象,它表示 String 参数所指示的 double 值。
Double double2 = new Double("5.486"); // 以 String 类型的变量作为参数创建 Double 对象
常用方法
例题9.3创建一个useDouble类,首先使用double类的valueOf方法创建一个Double对象然后使用Double的常用方法对该对象进行操作,并查看结果
public class useDouble {
public static void main(String[] args) {
Double dNum = Double.valueOf("3.14"); // 通过构造函数创建一个Integer对象
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));// 转换为十六进制
}
}
Double 类的常用常量
在 Double 类中包含了很多常量,其中较为常用的常量如下。
MAX_VALUE:值为 1.8E308 的常量,它表示 double 类型的最大正有限值的常量。
MIN_VALUE:值为 4.9E-324 的常量,它表示 double 类型数据能够保持的最小正非零值的量。
NaN:保存 double 类型的非数字值的常量。
NEGATIVE_INFINITY:保持 double 类型的负无穷大的常量。
POSITIVE_INFINITY:保持 double 类型的正无穷大的常量。
SIZE:用秦以二进制补码形式表示 double 值的比特位数。
TYPE:表示基本类型 double 的 Class 实例。
9.1.3Boolean类
Boolean类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段。
构造方法
1、Boolean(boolean value)
该方法创建一个表示value参数的Boolean对象,示例如下:
Boolean b = new Boolean(true);
2、Boolean(String str)
该方法以String变量作为参数创建Boolean对象,如果String参数不为null且在忽略大小写时等于true,则分配一个表示true的值的Boolean对象,否则获得一个false值的Boolean对象,示例如下:
Boolean bool = new Boolean("ok");
常用方法
例题9.4在项目中创建GetBoolean,在主方法中以不同的构造方法创建Boolean对象并调用booleanvalue()方法将创建对象重新转换为boolean数据输出
public class GetBoolean {
public static void main(String args[]) { // 主方法
Boolean b1 = new Boolean(true); // 创建Boolean对象
Boolean b2 = new Boolean("ok"); // 创建Boolean对象
System.out.println("b1:" + b1.booleanValue());
System.out.println("b2:" + b2.booleanValue());
}
}
Boolean常量
Boolean提供了以下几个常量:
1、TRUE:对应基值true的Boolean对象
2、FALSE:对应基值false的Boolean对象
3、TYPE:基本类型boolean的Class对象
9.1.4Character类
Character类在对象中包装了一个基本类型char的值。一个Character类型的对象包含类型为char的单个字段。
构造方法
Character(char value)
该类的构造函数必须是一个char类型的数据。通过该构造函数创建的Character类对象包含由char类型参数提供的值,一旦Character类被创建,它包含的数值就不能改变,示例如下:
Character mychar = new Character("s");
Character常用方法
加
例题9.5在项目里创建UpperOrLower,在主方法中创建Character类的对象,通过判断字符大小写来确定转换
public class UpperOrLower {
public static void main(String args[]) { // 主方法
Character mychar1 = new Character('A'); // 声明Character对象
Character mychar2 = new Character('a'); // 声明Character对象
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));// 转换为大写
}
}
}
Character常量
Character类提供了大量表示特定字符的常量,例如:
1、CONNECTOR_PUNCTUATION:返回byte型值,表示Unicode规范中的常规类别"Pc";
2、UNASSIGNED:返回byte型值,表示Unicode规范中的常规类别"Ca";
3、TITLECASE_LETTER:返回byte型值,表示Unicode规范中的常规类别"Lt";
9.1.5Number类
是前几个的父类
一般情况下我们会使用数据的基本数据类型:byte、int、short、long、double、float、boolean、char;
对应的包装类型也有八种:Byte、Integer、Short、Long、Double、Float、Character、Boolean;
包装类型都是用final声明了,不可以被继承重写;
Number类是java.lang包下的一个抽象类,提供了将包装类型拆箱成基本类型的方法,所有基本类型(数据类型)的包装类型都继承了该抽象类,并且是final声明不可继承改变;
9.2Math类
9.2.1Math类的描述
在运算中,Math提供了基本的数学常数,如三角函数、指数、对数运算的双曲函数等。
9.2.2常用数学运算方法
1.三角函数
例题9.6在项目里创建TrigonometricFunction类,在类主方法中调用Math类提供的三角函数运算方法,并输出结果
public class TrigonometricFunction {
public static void main(String[] args) {
// 取90度的正弦
System.out.println("90度的正弦值:" + Math.sin(Math.PI / 2));
System.out.println("0度的余弦值:" + Math.cos(0)); // 取0度的余弦
// 取60度的正切
System.out.println("60度的正切值:" + Math.tan(Math.PI / 3));
// 取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的反正切
// 取120度的弧度值
System.out.println("120度的弧度值:" + Math.toRadians(120.0));
// 取π/2的角度
System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI / 2));
}
}
2.指数函数方法
例题9.7 在项目里创建ExponentFunction类,在类的主方法里调用Math类提供的指数函数运算方法,并输出结果
public class ExponentFunction {
public static void main(String[] args) {
System.out.println("e的平方值:" + Math.exp(2)); // 取e的2次方
// 取以e为底2的对数
System.out.println("以e为底2的对数值:" + Math.log(2));
// 取以10为底2的对数
System.out.println("以10为底2的对数值:" + Math.log10(2));
System.out.println("4的平方根值:" + Math.sqrt(4)); // 取4的平方根
System.out.println("8的立方根值:" + Math.cbrt(8)); // 取8的立方根
System.out.println("2的2次方值:" + Math.pow(2, 2)); // 取2的2次方
}
}
3.取整函数方法
例题9.8在项目里创建IntFunction类,调用Math类提供的实现取整函数方法,并输出结果
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));
}
}
4.取最大值,最小值,绝对值函数方法
例题9.9在项目创建AnyFunction类,在类的主方法调用Math类提供的最大值方法,并输出结果
public class AnyFunction {
public static void main(String[] args) {
System.out.println("4和8较大者:" + Math.max(4, 8));
// 取两个参数的最小值
System.out.println("4.4和4较小者:" + Math.min(4.4, 4));
System.out.println("-7的绝对值:" + Math.abs(-7)); // 取参数的绝对值
}
9.3随机数
在java中提供了两种方法 Math类的random方法还有Random类提供的方法
9.3.1Math.random()方法
在编写代码的过程中难免要用到随机数,有时生成数很简单,但有时生成很复杂。本文总结了常见的生成随机数的方法。
生成常见随机数的方法
1、[ 0,1 )
double d = Math.random();
2、double型[0,99)
double d = Math.random()*99;
3、int型[0,99)
int i = (int) Math.random()*99;
总结:99是可以变的,如果要生成[0,50),
那就int i = (int) Math.random()*50;
4、int型[0,99]
int i = (int) Math.random()*100;
5、[m,n)
double d = m+Math.random()*(n-m);
6、[m,n]
double d = m+Math.random()*(n-m+1);
例题9.10使用 Math.random()方法一个间年的猜数字小诳戏,要求:使用 Math.random()方法生成一个0~100间的想机双于公A用尸物入有阕的数子,判断输入的数字是否与随机生成的数字匹配,如来个匹配,呢小相应的B忌,如采匹配,则表示猜中,游戏结束。代码如下
import java.util.Scanner;
public class NumGame {
public static void main(String[] args) {
System.out.println("——————猜数字游戏——————\n");
int iNum;
int iGuess;
Scanner in = new Scanner(System.in);// 创建扫描器对象,用于输入
iNum = (int) (Math.random() * 100);// 生成1到100之间的随机数
System.out.print("请输入你猜的数字:");
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)// 若最后一次输入的数字是-1,循环结束的原因是用户选择退出游戏
{
System.out.println("退出游戏!");
} else// 若最后一次输入的数字不是-1,用户猜对数字,获得成功,游戏结束
{
System.out.println("恭喜你,你赢了,猜中的数字是:" + iNum);
}
System.out.println("\n———————游戏结束———————");
}
生成字符 (char)(‘a’ + Math.random() * (‘z’ - ‘a’ +1);a到z
例题9.11在项目中创建MathRandomChar类在类中编写GetRandomChar()方法生成随机字符,并在主方法中输出字符
public class MathRandomChar {
// 定义获取任意字符之间的随机字符
public static char GetRandomChar(char cha1, char cha2) {
return (char) (cha1 + Math.random() * (cha2 - cha1 + 1));
}
public static void main(String[] args) {
// 获取a~z之间的随机字符
System.out.println("任意小写字符" + GetRandomChar('a', 'z'));
// 获取A~Z之间的随机字符
System.out.println("任意大写字符" + GetRandomChar('A', 'Z'));
// 获取0~9之间的随机字符
System.out.println("0到9任意数字字符" + GetRandomChar('0', '9'));
}
9.3.2Random类
Random类中的常用方法
Random类中的方法比较简单,每个方法的功能也很容易理解。需要说明的是,Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。下面对这些方法做一下基本的介绍:
a、public boolean nextBoolean():是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
b、public double nextDouble():是生成一个随机的double值,数值介于[0,1.0)之间。
c、public int nextInt():是生成在-231到231-1之间int值。如果需要生成指定区间的int值,则需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。
d、public int nextInt(int n):是生成一个介于[0,n)的区间int值,包含0而不包含n。如果想生成指定区间int值,也需要进行一定的数学变换,具体参看下面的使用示例中的代码。
e、public void setSeed(long seed):是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。
f、 public float nextFloat(int n):返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
g、 public long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
h、public double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
2、Random类使用示例
使用Random类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字。以下生成随机数的代码均使用以下Random对象r进行生成:
Random r = new Random();
a、生成[0,1.0)区间的小数
double d1 = r.nextDouble();//直接使用nextDouble方法获得。
b、生成[0,5.0)区间的小数
double d2 = r.nextDouble() * 5;//因为扩大5倍即是要求的区间。同理,生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。
1
c、生成[1,2.5)区间的小数
double d3 = r.nextDouble() * 1.5 + 1;//生成[1,2.5)区间的随机小数,则只需要首先生成[0,1.5)区间的随机数字,然后将生成的随机数区间加1即可。
例题9.12使用Random模拟抢红包功能
import java.text.DecimalFormat;
import java.util.Random;
import java.util.Scanner;
/**
* 模拟微信抢红包功能
*/
public class RedBags { //创建一个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
DecimalFormat df = new DecimalFormat("###,###,###.##"); //创建DecimalFormat类的对象df,并设置格式
for (int i = 1; i < bagsnum; i++) { //设置“循环”
double safe = (total - (bagsnum - i) * min) / (bagsnum - i); //通过公式模拟数学中的离散模型
double money = (double) random.nextInt((int) ((safe - min) * 100)) / 100 + min; //根据离散模型得到每个红包的金额
total = total - money; //替换total的值
String temp = df.format(money); //调用format()方法,对数字money格式化
System.out.println("第" + i + "个红包:" + temp + "元"); //输出结果
}
String left = df.format(total); //调用format()方法,对数字total格式化
System.out.println("第" + bagsnum + "个红包:" + left + "元"); //输出结果
sc.close(); //关闭控制台输入
}
}
9.4日期时间类
9.4.1Date类
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
DateFormat类
DateFormat子类:
DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化和分析日期或时间。DateFormat类中最重要的两个方法是format和parse,简单来说format(是将日期Date类的对象转化为用户所能看懂的字符串形式如2019年1月28日 )parse(是将用户所能看懂的字符串形式的日期转化为日期Date类)
常用静态工厂方法:
(1)getInstance()方法,使用SHORT样式的日期和时间获取格式化的日期和时间程序,输出样式:2019/1/28 下午5:23
(2)getDateInstance()方法,获取具有默认语言环境的默认格式样式的日期格式化程序,输出样式:2019/1/28
getDateInstance(int style)方法 //style为下面的日期长度参数,如SHORT
getDateInstance(int style,Locale alocale)方法 //alocale为语言环境,如CHINA
(3)getDateTimeInstance()方法,获取具有默认语言环境的默认格式样式的日期和时间格式化程序,输出样式:2019/1/28 下午5:23:12
getDateTimeInstance(int datastyle,int timestyle)方法 //datastyle为下面的日期长度参数,timestyle为时间长度参数
getDateTimeInstance(int datastyle,int timestyle,Locale alocale)方法
(4)getTimeInstance()方法,获取具有默认语言环境的默认格式样式的时间格式化程序,输出样式:下午5:23:12
getTimeInstance(int style)方法 //style为下面的时间长度参数
getTimeInstance(int style,Locale alocale)方法 //alocale为语言环境,如CHINA
(5)getCalendar()方法,获取与此日期/时间格式化程序关联的日历。
(6)getNumberFormat()方法,获取此日期/时间格式化程序用于格式化和解析时间的数字格式化程序。
例题9.13使用Date类的getTime方法获得从1970年1月1日00:00:00GMT到现在的毫秒数并输出
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
Date date = new Date(); // 创建现在的日期
long value = date.getTime(); // 获得毫秒数
System.out.println("日期:" + date);
System.out.println("到现在所经历的毫秒数为: " + value);
}
可以将不同的选项传递给这些工厂方法来控制结果的长度; 从SHORT到MEDIUM到LONG到FULL到DEFAULT。确切的结果取决于区域设置,但通常:
SHORT: 2019/1/28 下午5:23
MEDIUM: 2019年1月28日 下午5:23:12
LONG: 2019年1月28日 CST 下午5:23:12
FULL: 2019年1月28日星期一 中国标准时间 下午5:23:12
DEFAULT: 2019年1月28日 下午5:23:12
SimpleDateFormat类:
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期 - >文本),解析(文本 - >日期)和规范化。
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串,从带引号的字母 'A'来'Z'和'a'到 'z'被解释为代表的日期或时间字符串的组件模式字母。可以使用单引号(')引用文本以避免解释。 "''"代表单引号。不解释所有其他字符; 它们只是在格式化过程中被复制到输出字符串中,或者在解析过程中与输入字符串匹配。
以下模式字母(从所有其他字符限定 'A'到'Z'和从'a'到 'z'保留):
字母 | 日期或时间组件 | 举例 |
G | 时代指示符 | AD |
y | 年 | 1996; 96 |
M | 一年中的月份 | July; Jul;07 |
w | 一年中的周数 | 27 |
W | 一月中的周数 | 2 |
D | 一年中的天数 | 189 |
d | 一个月的天数 | 10 |
F | 一个月中的周数 | 2 |
E | 一周中的天数 | Tuesday; Tue |
a | 上午/下午标记 | AM;PM |
H | 一天中的小时数(0-23) | 0 |
k | 一天中的小时数(1-24) | 24 |
K | 上午/下午中的小时数(0-11) | 0 |
h | 上午/下午中的小时数(1-12) | 12 |
m | 一小时中的分钟数 | 30 |
s | 一分钟中的秒钟数 | 55 |
S | 毫秒数 | 978 |
z | 时区 | Pacific Standard Time; PST;GMT-08:00;CST |
Z | 时区 | -0800 |
例题9.14使用DateFormat类的getInstance方法和SimpleDateFormat类的构造方法
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 df1 = 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("yyyy-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默认的日期格式: " + df1.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.4.2Calendar类
Calendar类是日历类,提供操作日历字段的方法
想得到一个Calendar类对象的话,不能采用new对象的方式。因为Calendar类的构造函数被protected修饰符修饰
应该
Calendar calBegin = Calendar.getInstance();
常用方法
例题9.15使用Calendar类输出2022年“北京一张家口”冬奥会的倒计时
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 输出2022年冬奥会倒计时(暂定冬奥会举办时间为2022年2月2日)
*/
public class OlympicWinterGames { //创建OlympicWinterGames类
public static void main(String[] args) {
System.out.println("——————————冬奥会倒计时——————————\n");
Date date = new Date(); //实例化Date
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); //创建SimpleDateFormat对象,制定目标格式
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
calendar.set(2022, 2-1, 4); //设置日历calendar中的 YEAR、MONTH 和 DAY_OF_MONTH 的值
long time2 = calendar.getTimeInMillis(); //计算“自 1970 年 1 月 1 日 00:00:00 至 2022 年 2 月 2 日所经过的毫秒数
long day = (time2 - time1)/(24 * 60 * 60 * 1000); //计算2022 年 2 月 2 日距离当前时间的天数
System.out.println("距离2022年“北京-张家口”冬奥会还有 " + day + " 天!");
}
}
9.5小结
本章主要讲解了Java 中吊用尖的使用万法,包括封装基本数据类型的包装类、Math 数学运算类、Random随机数尖、Date 尖以仅 Calendar 尖,在买际升发中,这些类经常会用到,希望通过本章的学习,读者能够熟练掌握Java 中常用类的使用方法,并能够在实际开发中灵活应用。