Java_3_Enum_String_包装类_工具类_Big运算类型_日期类

枚举类型

定义格式:

enum Season{//1.通过enum替代class
SPRING("春天"),SUMMER("夏天");
//2.创建SPRING对象,语法为:常量名(参数列表);
//3.多个常量对象,使用 , 隔开
//4.若使用enum实现枚举,则常量对象定义语句需放在最前
private String name;
private Season(String name){
  this.name = name;
}   
	//无参构造器的情况,可以省略参数列表及其所在的小括号
	//声明枚举对象时底层默认public static final修饰
}

特点与注意事项:

  • 枚举对象、属性使用final+static修饰并以常量的规范命名,实现底层优化
  • 枚举对象根据需要可以有多个属性,但不提供set方法以防止属性被修改
  • 枚举类型的构造器一般设置为私有化,防止直接创建对象
  • 使用enum后不可继承其他类,因enum隐式继承Enum,java是单继承机制
  • 枚举类隐式被final修饰,不可被其他类继承

常用方法:

  1. toString:Enum类重写了,返回当前对象名,子类也可重写该方法,用于返回对象属性信息
  2. name:返回当前对象名,子类中不可重写
  3. ordinal:返回当前枚举常量对象的位置号,默认0开始
  4. values:返回当前枚举类中所有枚举常量
  5. valueOf:将字符串转换为枚举对象,要求字符串必须为已有常量名,否则异常
  6. compareTo:比较两个枚举常量的位置号,底层逻辑为调用(对象编号-参数的对象编号)

String类型解析

  1. String在java.lang包下,无需导包;所有双括号括起的字符序列都是其实例对象,如"Hello"
  2. 字符串字符使用Unicode字符编码,一个字符占两个字节
  3. String类被final修饰,故不可继承
  4. String中属性private final char value[]存放字符串内容,存储在常量池(有final修饰)
  5. JDK7版本开始字符串常量池从方法区移动到堆内存中
  6. JDK11.0.3版本value属性更改为byte数组
  7. String类实现了接口Serializable可串行化,实现网络传输、Comparable实现String对象相互比较
String类型构造器
  • String s1 = new String();
  • String s2 = new String(String original);
  • String s3 = new String(char[] a);
  • String s4 = new String(char[] a , int startIndex , int count);
  • String s5 = new String(byte[] b);
  • String s6 = new String(StringBuffer buffer);
String创建及其区别
String s1 = "lxl";
//查看常量池中是否有"lxl"空间,有则直接指向,无则创建后指向
//s1最终指向常量池中的空间地址
String s2 = new String("lxl");
//堆中创建对象空间,其中维护了value属性,指向常量池中的"lxl"空间,若常量池中无"lxl"空间则重新创建,若有则直接指向
String s3 = "a"+"b";
//常量优化机制,直接在常量池中创建"ab",所以s3指向常量池中的"ab"对象
String a="a",b="b";
String s4 = a + b;
//底层先StringBuilder sb = new StringBuilder();
//sb.append("a"); sb.append("b");
//String s4 = sb.toString();
//sb.toString调用了new String(value,0,count)构造器
//最后s4指向堆中的String对象,对象中属性value指向常量池中的"ab"对象
//所以此处涉及3个对象创建
//任何字符串变量参与拼接,底层原理都是如此!!!
String常用方法
1.equals() 比较内容是否相同,区分大小写
2.equalsIgnoreCase() 比较内容是否相同,忽略大小写
3.length() 获取字符串长度
4.indexOf() 返回字符在字符串中第一次出现的索引,找不到返回-1
5.lastIndexOf() 返回字符在字符串中最后出现的索引,找不到返回-1
6.substring() 截取指定范围的子串
7.toUpperCase/toLowerCase() 转为大写/小写
8.concat() 拼接字符串
9.replace() 替换字符串中所有匹配char字符/CharSequence字符序列,返回新字符串,原字符串对象不变;CharSequence是String类型实现的接口,故该方法可以接受String类型参数
10.replaceAll() 替换字符串中所有匹配子字符串,返回新字符串,原字符串对象不变
10.replaceFirst() 替换字符串中第一匹配子字符串,返回新字符串,原字符串对象不变
10.split() 根据参数字符,分割字符串,返回字符串数组
11.compareTo() 比较两个字符串大小
12.toCharArray() 转为字符数组
13.format() 格式化字符串,%s字符串、%c字符、%d整型、%.2f浮点型(保留两位小数 )

StringBuffer类型解析

  1. java.lang.StringBuffer表示可变字符序列,用于频繁的字符串增删
  2. 方法大多与String相同,但StringBuffer是可变长度
  3. StringBuffer是容器,直接父类为AbstractStringBuilder
  4. 实现Serializable接口,可实现串行化
  5. AbstractStringBuilder中有个属性char value[] ,用于存放字符串内容,存放在堆内存中(无final修饰),value有默认长度,当更新后内容不超过默认长度时,不用更改其指向地址
  6. StringBuffer类被final修饰,不可被继承
StringBuffer构造器
1.StringBuffer() //构造一个不带字符的字符串缓冲区创(建一个对象,对象中value属性指向无值的字符数组),初始容量为16
2.StringBuffer(ChaerSequence seq) //构造一个字符字缓冲区,包含与CharSequence seq相同字符
3.StringBuffer(int capacity) //构造一个不带字符,固定初始容量的字符缓冲区(即指定char[]长度)
4.StringBuffer(String str) //构造一个字符字缓冲区,包含与str相同字符,字符缓冲区长度为str.length()+16
StringBuffer方法
1.append() //增加字符串
2.delete(start,end) //删除start到end(不包含end)字符串
3.replace(start,end,str) //替换start到end(不包含end)的字符串为str
4.indexOf() //子串在字符串中第一次出现的索引,无则返回-1
5.insert() //插入字符串
6.length() //获取字符串长度
StringBuffer与String转换
//String(str对象) -> StringBuffer:
StringBuffer sb1 = new StringBuffer(str);//第一种
StringBuffer sb2 = new StringBuffer();//第二种
sb2 = sb2.append(str);
  
//StringBuffer -> String
1.String str1 = sb1.toString();//第一种
2.String str2 = new String(sb1);//第二种

StringBuilder类型解析

  1. 可变字符序列,该类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计为StringBuffer简易替代物,用于字符串缓冲区被单个线程使用时。允许的情况下优先使用StringBuilder,处理速度快
  2. StringBuilder是容器,直接父类为AbstractStringBuilder
  3. StringBuilder主要操作为append和insert,可重载这些方法以接受任意类型的数据
  4. StringBuilder没有做互斥处理(无synchronized关键字),故只能在单线程下使用

包装类的使用

包装类类型:

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

包装类的应用:

  1. 包装类作为泛型
  2. 基本类型转字符串类型(toString方法)
  3. 字符串类型转基本数据类型(除Character外,包装类都提供parseXxx静态方法)

包装类的继承与实现关系:

  • Boolean/Character继承了Object,实现了Serializable、Comparable
  • Byte/Short/Integer/Float/Double继承了Number,实现了Comparable
  • Number继承了Object,实现了Serializable

拆箱与装箱/String类与包装类转换:

int n1 = 100;
Integer num1 = new Integer(n1);
Integer num2 = Integer.valueOf(n1);//手动装箱
int n2 = Integer.intValue();//手动拆箱

Integer num3 = n1;
//自动装箱,jdk5后,底层使用Integer.valueOf()
int n3 = num3;
//自动拆箱,底层使用Integer.intValue()

//包装类 -> String
Integer i = 100;
String s1 = i+"";
String s2 = i.toString();
String s3 = String.valueOf(i);
String s4 = Integer.toString(i);
//String -> 包装类
String j = "123";
Integer i1 = Integer.parseInt(j);
//返回int后自动装箱
Integer i21 = Integer.valueOf(j);

包装类常用方法:

  1. Integer.MIN_VALUE => 返回int类型最小值
  2. Integer.MAX_VALUE => 返回int类型最大值
  3. Integer.compare() => 判断两个int类型数据大小
  4. Character.isDigit() => 判断是不是数字
  5. Character.isLeter() => 判断是不是字母
  6. Character.isUpperCase() => 判断是不是大写
  7. Character.isLowerCase() => 判断是不是小写
  8. Character.isWhitespace() => 判断是不是空格
  9. Character.toUpperCase() => 转为大写
  10. Character.toUpperCase() => 转为小写

Math类的使用

常用方法(public static修饰):

  1. abs 求绝对值

  2. pow 求幂a^b

  3. ceil 向上取整

  4. floor 向下取整

  5. round 四舍五入

  6. sqrt 开方

  7. random 求随机数[0,1)

    求a~b随机数:(int)(a+Math.random()*(b-a+1))

  8. max求最大数

  9. min求最小数

Arrays类的使用

常用方法(public staic修饰):

  1. toString返回数组的字符串形式
  2. sort排序(自然排序与定制排序)
  3. binarySearch通过二分搜索法搜索查找,要求数组排序过
  4. copyOf数组元素复制,第二参数为复制长度
  5. fill数组填充,数组每个元素填充为第二参数值
  6. equals数组比较,两个数组元素一样返回true
  7. asList返回List序列

UUID类的使用

常用方法:

  1. randomUUID静态工厂检索一个类型4(伪随机生成)的UUID。
  2. nameUUIDFromBytes(byte[] name)静态工厂根据指定的字节数组检索类型3(基于名称)UUID 。
  3. toString()返回代表这个UUID的String对象。

System类的使用

  1. exit退出当前程序
  2. arraycopy复制数组元素,适合底层调用,一般使用Arrays.copyOf
  3. currentTimeMillens返回1970.1.1零时到现在的毫秒数(long类型)
  4. gc运行垃圾回收机制

BigInteger、BigDecimal类型

构造方法:

BigDecimal b1 = new BigDecimal("0.1");
//推荐使用字符串作为参数的构造方法的创建形式
BigDecimal b2 = new BigDecimal(0.1);
//b2!=0.1, 仍然存在小数无法精准转换问题
BigDecimal b3 = BigDecimal.valueof(0.1);
//调用BigDecimal的静态方法获取对象,可以解决基本数据类型无法精确转换问题

常用方法有:

Date类的使用(一代日期类)

构造方法:

Date date1 = new Date();//无参构造器
long time1 = date.getTime();//获取该Date对象的毫秒形式时间
Date date2 = new Date(time1);//有参构造器,根据毫秒形式时间生成Date对象

常用方法:

boolean after(Date when) //测试此日期是否在指定日期之后。  
boolean before(Date when) //测试此日期是否在指定日期之前。  
long getTime() //返回自1970年1月1日以来,由Date对象表示的00:00:00 GMT的毫秒数。 
void setTime(long time) //将此Date对象设置为1970年1月1日00:00:00 GMT后的 time毫秒的时间点。

注意:Date类开发时,基本上只用无参构造方法!很多功能方法基本上用另外一个类Calendar【日历类】

特别注意:运算毫秒数时一定要将第一个参与运算的常量值加上L后缀,不然会发生int类型数据溢出

DateFormat类的使用

作用:格式化日期形式,主要用于日期对象与字符串间转换;DateFormat是一个抽象类,开发中使用其子类SimpleDateFormat

构造方法:

SimpleDateFormat s = SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
// 创建对象的时候,指定格式(日期转成字符串的格式)
//y-年、M-月、d-天、H/h-时、m-分、s-秒、S-毫秒、E-星期  

常用功能:

String format(Date date); // 将日期转成字符串
Date parse(String source); 
// 将字符串转成日期类型,若字符串格式与日期格式不匹配时报ParseException异常

Calendar类的使用(二代日期类)

概述:Caldendar日历类是一个抽象类,构造器由protected修饰,是通过静态方法获取其子类对象

获取实例对象:

Calendar calendar = Calendar.getInstance();
// 使用默认时区和区域设置获取日历类Calendar对象
//多态,抽象父类的引用指向子类对象

常用方法:

boolean after(Object when) //测试此日期是否在指定日期之后 
boolean before(Object when) //测试此日期是否在指定日期之前。
//Object需为Calendar子类,否则直接返回false
int compareTo(Calendar c) //判断二者对应毫秒数大小,-1前0相等1后
void setTime(Date date) //根据Date对象设置该Calendar对象的时间
void setTimeInMillis(long millis) //根据millis毫秒值设置Calendar对象时间
Date getTime() //获取当前Calendar对象转换的Date对象
long getTimeInMillis() //获取当前Calendar对象对应的毫秒值
void set(int field,int value) //设置field日历字段的值
int get(int field) 
//获取field日历字段的值
//月份返回0~11(1~12月),星期返回1~7(星期日-六)
//HOUR字段返回12小时制,HOUR_OF_DAY返回24小时制
//YEAR年、MONTH月、DATE日、MINUTE分钟、SECOND秒
void add(int field,int amount) //根据日历规则将field字段添加或减去给定的值。 

LocalDateTime类的使用

概述:

  • LocalDateTime类是JDK8加入的,包含日期+时间
  • LocalDate只包含日期,可获取日期字段,年月日
  • LocalTime只包含时间,可获取时间字段,时分秒
  • Instant 时间戳

使用方式:

LocalDateTime ldt = LocalDateTime.now();
//返回表示当前时间的LocalDateTime对象
System.out.println(ldt.getYear());//获取ldt对象的年字段
System.out.println(ldt.getHour());//获取ldt对象的时字段

LocalDateTime day_10 = ldt.plusDays(10));
//获取10天后的时间对象
LocalDateTime day_10 = ldt.minusDays(10));
//获取10天前的时间对象

//DateTimeFormatter对象进行三代日期格式化:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss E");
String strDate = dtf.format(ldt);//将ldt对象转为格式化字符串

//Instant类似于Date,并提供与Date类转换的方式
Instant now = Instant.now();
Date date = Date.from(now);//Instant对象 -> Date对象
Instant instant = date.toInstant();//Date对象 -> Instant对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值