史上最全讲解: JAVA中的常见类-字符串类,基本数据类型的包装类,日期Date类,枚举Enum类
文章目录
字符串类
String类
不可变长的字符序列,Java程序中所有的字符串字面值(“abc”)都作为此类的实例实现
首先String被final修饰是不能被继承的,字符串是常量,在内存中可以共享 每次创建后不能更改。也就是说每次对String字符串进行改变操作实际上是创建一个新的String对象
String str = “abc”;等效于:
char data[] = {‘a’, ‘b’, ‘c’};
String str = new String(data);
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
StringBuilder类
1.是一个可变字符序列,有一个初始容量capacity,可以手动设置,JDK1.8中默认初始容量为16,当字符串的大小等于于原容量时,容量等于字符串长度+16
StringBuffer类
支持和StringBuilder所有相同的操作,不同的是StringBuffer是线程安全的,在声明的方法中使用synchronized关键字进行修饰,因此单线程中一般要比StringBuilder效率低
package com.shsxt.api;
import java.io.UnsupportedEncodingException;
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "123456";
String str1 = new String("789");
byte[] bytes = "中国你好".getBytes();
String str2 = new String(bytes,3,9);
String str3 = new String(bytes,"gbk");
System.out.println(str);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
package com.shsxt.api;
public class StringBuilder02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123");
System.out.println(sb.append(false));
}
}
基本数据类型的包装类
- 基本数据类型的包装类:
- byte ---- Byte
- short — Short
- int — Integer
- long — Long
- char — Character
- float — Float
- double — Double
- boolean — Boolean
转换: -
自动拆装箱:
-
**自动装箱: 从基本-->引用**
-
**自动拆箱: 从引用-->基本**
package com.shsxt.api;
public class Data03 {
public static void main(String[] args) {
int i=1;
Integer in = 1;//自动装箱
int s = in;//自动拆箱
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i1 == i2);
System.err.println(i3 == i4);
Integer i5 = new Integer(127);
Integer i6 = new Integer(127);
System.out.println(i5 == i6);
System.out.println(i1 == i5);
int i7 = 127;
System.out.println(i7 == i5);
System.out.println(i7 == i1);
}
}
日期Date类
- 分配并初始化该对象
Date()分配date对象并初始化此对象,以表示分配它的时间,本地时间
Date(long date)即1970年0时0分0秒GMT以来的毫秒数 - SimpleDateFormat格式转换类
1.format(Date)日期转换为字符串
2.parse(String)字符串转换为日期
构造器:
SimpleDateFormat();默认的转化格式
SimpleDateFormat(“定义转换格式”)
package com.shsxt.api;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date);
SimpleDateFormat simple = new SimpleDateFormat();
System.out.println(simple.format(date));
SimpleDateFormat simple2 = new SimpleDateFormat("yyyy/MM/dd/hh/mm/ss");
System.out.println(simple2.format(new Date()));
System.out.println(simple2.parse("2019/11/30/04/25/58"));
}
}
枚举Enum类
列举出所有的可能情况
- 注意:
1.定义枚举类,使用关键字Enum,.
2.枚举中的字段可以表示枚举中的实例,被public static final修饰
3.所有的枚举类都隐式的继承自java.lang.enum
package com.shsxt.api;
/*
* 定义一个员工类,分析员工类,要求有一个属性定义员工的工作状态,只能存在3中状态 busy normal free
*活动:对busy状态的员工,发奖金100元,其他人扣钱100元
*/
public class EnumDemo05 {
public static void main(String[] args) {
Person p1 = new Person("张三",Situration.busy);
Person p2 = new Person("李四",Situration.free);
Person p3 = new Person("王五",Situration.normal);
Person[] array = {p1, p2,p3};
for(int i=0;i<array.length;i++){
switch (array[i].getS()){
case busy:
System.out.println(array[i].getName()+"100");
break;
case normal:
System.out.println(array[i].getName()+"-100");
break;
case free:
System.out.println(array[i].getName()+"-100");
}
}
}
}
enum Situration {
busy,normal,free;
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
class Person{
private String name;
Situration s;//员工的状态
public Person(String name, Situration s) {
super();
this.name = name;
this.s = s;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Situration getS() {
return s;
}
public void setS(Situration s) {
this.s = s;
}
}