Date日期类、Calendar日历类、Math数学类、包装类、System类
A.日期类Date
描述:日期类是封装的当前系统的时间
使用:new Date(); 并不是中国人熟知的日期格式(xxxx年xx月xx日,xx时xx分xx秒)
如想要按照国人的习惯格式输出,需要借用工具类:SimpleDateFormat(“yyyy年MM月dd日,hh时mm分ss秒”);
Date date = new Date();
//标准格式输出
System.out.println(date.toString());
//自定义格式输出: SimpleDateFormat工具类
//MM月为了和mm分区分,必须区分大小写,其他的不用
SimpleDateFormat sm = new SimpleDateFormat("yyyy年MM月dd日,hh时mm分ss秒");
System.out.println(sm.format(date));
B.日历类Calendar
描述:该类封装,区年月日,时分秒的方法,还能取当前时间是星期几。
Calendar cd = Calendar.getInstance();
System.out.println(cd.get(cd.YEAR) + "年");//年:2021年
System.out.println(cd.get(cd.MONTH) + 1 + "月");//月:取月份从零开始,注意+1
System.out.println(cd.get(cd.DAY_OF_MONTH) + "日");//日:会根据月份判断取值范围
System.out.println("星期:" + cd.get(cd.DAY_OF_WEEK));//星期(从周日开始):7、1、2、3、4、5、6、7...
System.out.println(cd.get(cd.HOUR_OF_DAY) + "时");//时
System.out.println(cd.get(cd.MINUTE) + "分");//分
System.out.println(cd.get(cd.SECOND) + "秒");//秒
C.数学类Math
返回大于等于指定小数的最小整数:static double cell(double a):
返回小于等于指定小数的的最大整数:static double floor(double a);
四舍五入:static double round(double b);
返回一个大于0.0小于1.0之间的小数:static double random();
[小案例]4位验证码生成:
//4位验证码生成
public String valueDate() {
String str = "";
char[] chars = new char[]{'a', 'd', 'c', 'H', 'G', 'h', 'e', 'Q', 'A', '1', '2', '5', '9'};
//初始化随机数
Random rd = new Random();
//初始化接收随机数的StringBuilder
StringBuilder sb = new StringBuilder();
//设置循环,取4次随机的值
for (int i = 0; i < 4; i++) {
//随机取chars数组里的数字,并添加到sb中
sb.append(chars[rd.nextInt(chars.length)]);
}
str = sb.toString();
System.out.println("验证码:" + str);
return str;
}
D .包装类
描述: 指定时java中的每一种基本数据类型,都会对应唯一的包装类,基本数据类型与其包装类都可以通过包装类的静态或者成员方法进行转换
**注意:**包装类都是final修饰的,它们无法被继承或者重写
1.基本数据类型和包装类对应表
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.包装类和基本数据类型之间的转换
从基本使用情况看,基本类型和包装类型都可以通过直接赋值语法赋值给对应的变量类型
-
Integer i =1;
-
int i = new Integer(1);
首先,这种语法Java是可以编译通过的,但是,java作为强类型语言,对象直接赋值是给引用类型的,而基本数据类型只能赋给基本数据类型变量,但是为什么包装类之间可以相互赋值呢?这是因为,java给包装类做了障眼法,其实它后面封装代码中,使用了一个很关键的方法:valueOf(1);
我们以 Integer i=1;举例:
1.首先生成一个常量 1
2.然后调用Integer.valueOf(int)方法返回了一个Integer对象
3.最后将对象地址(引用)赋给变量 i
Integer i=1其实Java真正的写法是:Integer i=Integer.valueOf(1);
“语法糖”
3.规避一些特性:
1.空指针异常 Integer i=null;int j=i; 这句话的完整写法应该是:int j=i.intValue();
2.两个包装类引用等特性:
在java中,==符号判断的是:基本数据类型值是否相等,引用数据类型引用地址是否相等。
Integer a1 = 1;
Integer a2 = 1;
System.out.println(a1 == a2);//true
//判断时Integer取值范围:-128~127,从常量池中取值,超过则会new一个新的
Integer b1 = 200;
Integer b2 = 200;
System.out.println(b1 == b2);//false
4.拆、装箱
**装箱:**基本数据类型转换成包装类
(1)自动装箱(基本数据类型赋给包装类)
int i=1;
Integer j=i;
(2)手动装箱
Integer a=new Integer(i);
**拆箱:**包装类转换成基本数据类型
(1)自动拆箱(包装类赋给基本数据类型)
int b=j;
(2)手动拆箱
int c=j.intValue();
==注意事项:Java中,除了float和double的基本数据类型,都是有常量池的,所以只要它们在相同的作用域中,内存地址也是相同的。(即上面符号判断中,如果是Float或者Double的都不相等,都返回false)。
E.System类
描述:系统类
1.接收系统的输入:System.in
2.接收系统的输出:System.out
3.获取当前操作系统的名称:System.getPreperty(“”);
4.获取当前path环境变量的值 System.getenv(“path”);
5.获取当前系统的时间,返回值以毫秒记:long System.currentTimeMills();
6.退出:System.exit(int status); 0为正常退出。
java中System.getProperty()方法详解
System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号
System.out.println("Java提供商名称:" + System.getProperty("java.vendor")); // Java提供商名称
System.out.println("Java提供商网站:" + System.getProperty("java.vendor.url")); // Java提供商网站
System.out.println("jre目录:" + System.getProperty("java.home")); // Java,哦,应该是jre目录
System.out.println("Java虚拟机规范版本号:" + System.getProperty("java.vm.specification.version")); // Java虚拟机规范版本号
System.out.println("Java虚拟机规范提供商:" + System.getProperty("java.vm.specification.vendor")); // Java虚拟机规范提供商
System.out.println("Java虚拟机规范名称:" + System.getProperty("java.vm.specification.name")); // Java虚拟机规范名称
System.out.println("Java虚拟机版本号:" + System.getProperty("java.vm.version")); // Java虚拟机版本号
System.out.println("Java虚拟机提供商:" + System.getProperty("java.vm.vendor")); // Java虚拟机提供商
System.out.println("Java虚拟机名称:" + System.getProperty("java.vm.name")); // Java虚拟机名称
System.out.println("Java规范版本号:" + System.getProperty("java.specification.version")); // Java规范版本号
System.out.println("Java规范提供商:" + System.getProperty("java.specification.vendor")); // Java规范提供商
System.out.println("Java规范名称:" + System.getProperty("java.specification.name")); // Java规范名称
System.out.println("Java类版本号:" + System.getProperty("java.class.version")); // Java类版本号
System.out.println("Java类路径:" + System.getProperty("java.class.path")); // Java类路径
System.out.println("Java lib路径:" + System.getProperty("java.library.path")); // Java lib路径
System.out.println("Java输入输出临时路径:" + System.getProperty("java.io.tmpdir")); // Java输入输出临时路径
System.out.println("Java编译器:" + System.getProperty("java.compiler")); // Java编译器
System.out.println("Java执行路径:" + System.getProperty("java.ext.dirs")); // Java执行路径
System.out.println("操作系统名称:" + System.getProperty("os.name")); // 操作系统名称
System.out.println("操作系统的架构:" + System.getProperty("os.arch")); // 操作系统的架构
System.out.println("操作系统版本号:" + System.getProperty("os.version")); // 操作系统版本号
System.out.println("文件分隔符:" + System.getProperty("file.separator")); // 文件分隔符
System.out.println("路径分隔符:" + System.getProperty("path.separator")); // 路径分隔符
System.out.println("直线分隔符:" + System.getProperty("line.separator")); // 直线分隔符
System.out.println("操作系统用户名:" + System.getProperty("user.name")); // 用户名
System.out.println("操作系统用户的主目录:" + System.getProperty("user.home")); // 用户的主目录
System.out.println("当前程序所在目录:" + System.getProperty("user.dir")); // 当前程序所在目录