1.StringBuffer
StringBuffer类,线程安全,可变的字符序列。字符串缓冲区就像一个String,但可以修改。在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
如:String str="abc" 在常量池中abc的地址0x876
str+="def" 在常量池中abcdef会有新的地址 0x548
StringBuffer s=new StringBuffer("abc") abc的地址0x679
s.append("def") 字符串变为abcdef 地址0x679
String,StringBuffer和StringBuilder这三个类的区别:
①速度:StringBuilde>StringBuffer>String
②线程安全:StringBuffer>StringBuilder
③String:适用于少量的字符串操作的情况
④StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
⑤StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
public class Demo1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcdef");
System.out.println(sb);
//System.out.println(sb.toString());//将StringBuffer类型的数据转为String
sb.append("a");//追加 abcdtrue
sb.insert(2, "狗");
//ab狗cdefa
sb.delete(2, 4);//abdefa
//字符串反转
System.out.println(sb.reverse());//afedba
System.out.println(sb);
System.out.println(sb.capacity());//容量 容量是新插入字符可用的存储量
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.capacity());//16
sb1.append("12345678912345671");
System.out.println(sb1.capacity());
}
}
2.枚举类
Java中有一个特殊的类叫枚举类,一般表示的是常量。
public static final int A = 23;
枚举就是替换上面常量的写法的!
语法格式:
public enum 枚举类名 {
各组常量,常量之间使用逗号隔开
}
enum Color {
RED, GREEN, BLUE
}
public class Demo1 {
public static void main(String[] args) {
Color red = Color.RED;
System.out.println(red);//RED
}
}
枚举方法:
values(); 枚举类中的所有的值
oridnal();每个常量的索引值
valueOf();返回值的指定的字符串的常量
enum Color1 {
RED, GREEN, BLUE
}
public class Demo4 {
public static void main(String[] args) {
Color1[] values = Color1.values();
for (Color1 value : values) {
System.out.println(value +"对应的索引:" + value.ordinal() );
}
//valueOf();返回值的指定的字符串的常量
Color1 red = Color1.valueOf("RED");
System.out.println(red);
}
}
综合案例:
enum SexEnum {
MALE(0, "男"),
FEMALE(1, "女"),
;
private int sex;//0代表男 or 1 代表女
private String sexName;//男 or 女
SexEnum(int sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
public int getSex() {
return sex;
}
public String getSexName() {
return sexName;
}
}
class User {//用户类
private String name;//用户名字
private SexEnum sex;//用户的性别
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SexEnum getSex() {
return sex;
}
public void setSex(SexEnum sex) {
this.sex = sex;
}
}
public class Demo6 {
public static void main(String[] args) {
User user = new User();
user.setName("狗蛋");//赋值
user.setSex(SexEnum.MALE);
System.out.println(user.getSex().getSexName());
}
}
3.包装类
Java八大基本数据类型,都有与之对应的包装类。
为什么会有这些包装类?其实就代表基本数据类型所有东西包装类能够实例化处理对象,有很多方法来处理当前的数据。
八大基本数据类型与之相对应的包装类:
①int ----Integer ②byte----Byte
③short----Short ④long----Long
⑤float----Float ⑥double----Double
⑦boolean----Boolean ⑦char----Character
重点:①自jdk5之后,有自动拆箱和自动装箱
自动装箱:将基本数据类型转为包装类类型
自动拆箱:将包装类转为基本数据类型
②static String toString() 将基本数据类型转为字符串
③static parse***()将一个字符串转为所对应的基本数据类型
class User {
String name;
Integer age;
String email;
Integer sex;
}
public class Demo1 {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
//1.自动装箱: 将基本数据类型转为包装类型
int i = 30;
Integer i1 = i;
System.out.println(i1.hashCode());
//2.自动拆箱: 将包装类转为基本数据类型
int i2 = i1;
System.out.println(i2);
//3.***Value();
Integer i3 = 40;//i3是包装类类型的数据
int i4 = i3.intValue();//intValue
System.out.println(i4);//i4是基本数据类型
//shortValue()
//4.toString方法
String s = Integer.toString(34);
System.out.println(s);
//5将整数字符串转为基本数据类型
int i5 = Integer.parseInt("999");
System.out.println(i5);//999
double v = Double.parseDouble("89.7");
//
Integer i6 = 30;
Integer i7 = 30;
System.out.println(i6 == i7);//true
Integer i8 = new Integer(30);
System.out.println(i6 == i8);
Integer i9 = 129;
Integer i10 = 129;
System.out.println(i9 == i10);//false
}
}
4.Math
Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数
public class Demo1 {
public static void main(String[] args) {
System.out.println(Math.E);
System.out.println(Math.PI);
System.out.println(Math.abs(-89));//求一个数的绝对值 absolute
System.out.println(Math.max(3, 7));//7 求两个数最大值的
System.out.println(Math.max(1, Math.max(3, 9)));//9
System.out.println(Math.min(1, 2));
System.out.println(Math.ceil(34.5));//向上取整
System.out.println(Math.floor(34.5));//34.0 向下取整
System.out.println(Math.round(34.6));//35 long
System.out.println(Math.random());//double 大于等于 0.0 ,小于 1.0 。
}
}
5.Random
import java.util.Random;
public class Demo1 {
public static void main(String[] args) {
Random random = new Random();
System.out.println(random.nextInt());
System.out.println(random.nextBoolean());
System.out.println(random.nextInt(3));
System.out.println(random.nextDouble());
}
}
6.System
System类提供的System包括标准输入,标准输出和错误输出流。可以方法外部定义的属性和环境变量。是一种加载文件和库的方法以及用于快速复制阵列的一部分的实用方法。
import java.io.PrintStream;
import java.util.Properties;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
PrintStream out = System.out;//标准输出
out.println("hehe");
System.out.println("xiix");
Scanner scanner = new Scanner(System.in);
//m err
//“标准”错误输出流。
System.err.println("haha");
//返回当前的时间
long l = System.currentTimeMillis(); //ms
System.out.println(l);//1680076586166
//在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位。
//通过类 获取当前系统的一个属性
Properties properties = System.getProperties();
System.out.println(properties.get("os.name"));//Windows 10
System.out.println(properties.get("user.name"));//bowang
System.out.println(properties.get("java.version"));//1.8.0_241
}
}
7.Date
专门处理时间的一个类
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo1 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//Wed Mar 29 16:17:57 IRKT 2023
//我难受 看不懂? 吧咋办? 转成你能看懂的 格式化
//SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期
//SimpleDateFormat(String pattern)
//使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date);
System.out.println(format);
}
}
import java.util.Calendar;
import java.util.Date;
public class Demo2 {
public static void main(String[] args) {
Date date = new Date();
//返回一个值,该值是从包含本开始时间的年份中减去1900的值
System.out.println(date.getYear() + 1900);
//返回一个数字,表示包含或开始于此Date对象所代表的时刻的月份 。 返回的值在0和11之间,其值为0代表一月。
System.out.println(date.getMonth() + 1);//2
//返回由此日期表示的星期几。 返回值( 0 =星期日, 1 =星期一, 2 =星期二, 3 =星期三, 4 =星期四, 5 =星期五, 6 =星期六)表示包含或以此时间表示的时刻开始的星期几Date对
System.out.println(date.getDay());//3
Calendar rightNow = Calendar.getInstance();//获取日历的对象
System.out.println(rightNow);
System.out.println(rightNow.get(Calendar.YEAR));//2023
System.out.println(rightNow.get(Calendar.MONTH) + 1);//3
System.out.println(rightNow.get(Calendar.DAY_OF_MONTH));//29
System.out.println(rightNow.get(Calendar.DAY_OF_YEAR));//88
System.out.println(rightNow.get(Calendar.DAY_OF_WEEK) - 1);//4
System.out.println(rightNow.get(Calendar.HOUR));//4 pm
System.out.println(rightNow.get(Calendar.HOUR_OF_DAY));//16
}
}