第三章:常用类
Data日期类
java对日期类的处理
- 怎么获取当前时间
- 怎么将Date转换成字符String
- 怎么将String转换成Date
1. 怎么获取当前时间
Date newTime = new Date();
System.out.println(newTime);
2. 怎么将Data日期类型标准化??
yyyy 年(年是4位)
MM 月
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String nowTimeStr = sdf.format(newTime);
System.out.println(nowTimeStr);
3. 怎么将标准日期类型转换成Data类型??
//将字符创格式转换成Date
String time = "2008-08-08 08:05:08 888";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date dateTime = sdf2.parse(time);
System.out.println(dateTime);
public class DateTest01 {
public static void main(String[] args) throws ParseException {
//获取系统当前时间(精确到毫秒的系统当前时间)
Date newTime = new Date();
System.out.println(newTime);//Tue Nov 03 20:01:02 CST 2020
//将Date转换成字符串格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String nowTimeStr = sdf.format(newTime);
System.out.println(nowTimeStr);
//将字符创格式转换成Date
String time = "2008-08-08 08:05:08 888";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date dateTime = sdf2.parse(time);
System.out.println(dateTime);
}
}
3. 怎么将 总毫秒数---->Date—>标准化处理??
/*
将毫秒数通过Date中的构造方法转换成Date类型,再用SimpleDateFormat做标准化输出
Date
public Date(long date)
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
参数:
date - 自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
将毫秒数转换成Date
*/
public class DateTest03 {
public static void main(String[] args) {
long nowTime = System.currentTimeMillis(); //获取总毫秒数
Date time = new Date(nowTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm-ss SSS");
String sdfTime = sdf.format(time);
System.out.println(sdfTime);
}
}
枚举类
-
枚举是一种引用数据类型
-
枚举类型怎么定义,语法是?
enum 枚举类型名{ 枚举值1,枚举值2.... }
-
结果值只有两种情况的建议使用boolean类型。
结果超过两种并且还是可以一枚一枚列举出口的,建议使用枚举类型。 例如:颜色,四季,星期等都可以使用枚举类型
public class EnumTest02 {
public static void main(String[] args) {
Result r = divide(10,0);
System.out.println(r == Result.SUCCESS?"计算成功":"计算失败");
}
/**
* 计算两个int类型数据的商。
* @param a
* @param b
* @return Result.SUCCESS表示成功,Result.FAIL表示失败
*/
public static Result divide(int a,int b){
try {
int c = a / b;
return Result.SUCCESS;
}catch (Exception e){
return Result.FAIL;
}
}
/*
枚举:一枚一枚可以列举出来的,才建议用枚举
枚举编译之后也是生成class文件。
枚举也是一种引用数据类型
枚举中的每一个值都可以看做是常量
*/
enum Result{
//SUCCESS 是枚举Result的一个值
//FAIL是枚举Result类型中的一个值
//枚举中的每一个值,可以看做是常量
SUCCESS,FAIL
}
}
Random类
/*
int nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
*/
public class RandomTest01 {
public static void main(String[] args) {
//创建随机数对象
Random random = new Random();
//产生一个int类型的随机数
int num1 = random.nextInt();
System.out.println(num1);
//产生一个[0,100]之间的随机数。不能产生101
//nextInt翻译为:下一个int类型的数据是101.表示只能去取到101.
int num2 = random.nextInt(101);
System.out.println(num2);
}
}
Scanner类
概述:
扫描器。能够解析字符串和基本数据类型
构造方法
public Scanner(InputStream is): 构造一个扫描器对象,从指定的输入流中获取参数System.in,对应键盘录入
成员方法
hashNextXxx():判断是够还有下一个输入项,其中Xxx可能是任意数据类型。返回值结果为布尔类型。
nextXxx():过去下一个输入项,其中Xxx可能是任意基本数据类型,返回对应类型的数据
String nextLine():获取下一行数据。以换行符为分隔符
String next:获取下一个输入项,以空白符作为分隔符
空白字符:空格,tab 回车等
注意:
在实际开发中,应用到最多最多的放法就是:
nextIne() :接受整数
nextLine():接受字符串
public class Test {
public static void main(String[] args) {
//创建Scanner类型的对象
//System.in标准输入流,默认指向键盘
Scanner sc = new Scanner(System.in);
// System.out.println("请输入一个整数");
// //为了避免InputMismatchException异常,可以加一个判断我
// if (sc.hasNextInt()){//判断下一个录入的书否为整数,如果是,结果就是true
// int num = sc.nextInt();
// System.out.println("num:"+num);
//
// }
System.out.println("请输入一个字符串");
String str1 = sc.nextLine();//结束标记是:换行符
System.out.println("str1:" + str1);
String str2 = sc.next();//结束标记是:空白字符,tab,换行符
System.out.println("str2:" + str2);
}
}
BigDecimal类
/*
1.BigDecimal 属于大数据,精度极高。不属于基本数据类型,属于java对象(引用数据类型)
这是SUN提供的一个类。
*/
import java.math.BigDecimal;
public class BigDecimalTest02 {
public static void main(String[] args) {
//精度极高 且不是基本数据类型,要调用方法进行求和
BigDecimal v1 = new BigDecimal(100);
BigDecimal v2 = new BigDecimal(200);
System.out.println(v1.add(v2));
}
}
DecimalFormat类
/*
关于数字的格式化
*/
public class DecimalFormatTest01 {
public static void main(String[] args) {
//java.text.DecimalFormat专门负责 数字格式化的
//DecimalFormat df = new DecimalFormat("数字格式");
/*
数字格式有哪些?
# 表示任意数字
,表示千分位
. 代表小数点
0 代表不够时补0
"###,###.##"
表示加入千分位保留两个小数
*/
DecimalFormat df = new DecimalFormat("###,###.##");
String s = df.format(1234.56);
System.out.println(s);
DecimalFormat df2 = new DecimalFormat("###,###.0000");
String s2 = df2.format(1234.56);
System.out.println(s2);
}
}
StringBuffer类
java中的字符串是不可变的,每一次拼接都会产生行的字符串
这样会占用大量的方法区内存。造成内存空间的浪费。
String s = "abc";
s += "hello";
以上两行代码在方法区中创建了3个对象;
“abc"
"hello"
"abchello"
/**
* 如果以后频繁的采用字符创拼接,建议使用JDK中自带的:
* java.lang.StringBuffer
* java.lang.StringBuilder
*
* 如何优化StringBuffer的性能??
* 在创建StringBuffer的时候尽可能的给定一个初始化容量。
* 最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。
* 关键点:给一个合适的初始化容量
*/
public class StringBuffTest02 {
public static void main(String[] args) {
//创建一个初始化容量为16个byte[] 数组。(字符串缓冲对象)
StringBuffer stringBuffer = new StringBuffer();
//拼接字符串,以后拼接字符同意调用append方法。
stringBuffer.append("a");
stringBuffer.append("b");
stringBuffer.append(3.14);
stringBuffer.append(true);
System.out.println(stringBuffer);
//默认的情况下初始化是向底层申请一个16个空间的byte[]数组。
StringBuffer stringBuffer1 = new StringBuffer(100);
stringBuffer1.append("hello");
stringBuffer1.append("world");
System.out.println(stringBuffer1);
}
}
/*
java.lang.StringBuilder
StringBuffer和StringBuilder的区别?
StringBuffer中的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的
StringBuilder中的方法没有:synchronized关键字修饰。表示StringBuilder在多线程环境下运行是不安全的
StringBuffer是线程安全的
StringBuilder是非线程安全的
*/
public class StringBuilderTest01 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append(100);
sb.append(true);
System.out.println(sb);
}
}