目录
字符串拼接问题(String与StringBuilder的对比)
Object类
Object类 是类层次结构的根(父)类,每个类都默认继承Object.
定义一个学生类:包含属性(name、age)
- toString方法
重写方法之前,默认返回对象的地址 (格式:包名类名@地址值)
public static void main(String[] args) {
Student student = new Student("张三", 12);
System.out.println(student);//练习包3.t_2.Student@300ffa5d
}
重写方法之后,返回的是对象的属性值
为Student重写toString方法:
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
控制台输出结果:Student{name='张三', age=12}
注:直接输出对象等同于输出 对象名.toString()
- equals方法
重写方法之前:比较的是对象的地址值是否相同(与‘==’作用相同)
public static void main(String[] args) {
Student student = new Student("张三", 12);
Student student1 = new Student("张三", 12);
System.out.println(student.equals(student1));//false
student=student1;
System.out.println(student.equals(student1));//true
}
分析:新建了两个对象,在内存中开辟了两个不同的空间,两个对象的地址值不同,所以第一个输出false; 后面将student1的引用指向student,两个对象的地址相同,所以第二个输出true
重写方法之后:比较的是对象的属性值
为Student重写equals方法:
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
public static void main(String[] args) {
Student student = new Student("张三", 12);
Student student1 = new Student("张三", 12);
System.out.println(student.equals(student1));//true
}
分析:因为重写了equals方法,所以两个对象就按照新的比较规则进行比较了
Objects类
Objects.equals方法 提高了健壮性(防止空指针异常)
Date类
表示日期时间的类,精确到毫秒。时间原点(0毫秒):1970 年 1 月 1 日 00:00:00(英国格林威治); 中国属于东八区,会把时间增加8个小时 1970 年 1 月 1 日 08:00:00
构造方法:无参构造(表示此刻的时间点),有参构造传入毫秒值(long类型)
public static void main(String[] args) {
System.out.println(new Date());//Mon Aug 23 22:26:42 CST 2021
System.out.println(new Date(0L));//Thu Jan 01 08:00:00 CST 1970
}
SimpleDateFormat类
用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和规范化。
继承于DateFormat(日期/时间格式化的抽象类)
构造方法:SimpleDateFormat(String pattern) 使用模式构建一个SimpleDateFormat对象, pattern指模式(时期时间的格式)
注意:模式区分大小写(y-年 M-月 d-日 H-时 m-分 s-秒 )
相关方法
- String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
- Date parse(String source) 把符合模式的字符串,解析为Date日期
public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String s = format.format(new Date());
System.out.println(s);//2021-08-23
Date parse = format.parse(s);
System.out.println(parse);//Mon Aug 23 00:00:00 CST 2021
}
Calendar:日历类(抽象类)
该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。可以对日历进行计算
创建对象的方式:通过静态方法getInstance()来创建日历对象
常用方法:
- public int get(int field) :返回给定日历字段的值
- public void set(int field, int value):将给定的日历字段设置为给定值
- public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量
- public Date getTime():返回一个Date对象
成员常量:
字段值 | 含义 |
YEAR | 年份 |
MONTH | 月份(从0开始) |
DATE | 日期 |
示例代码:
public static void main(String[] args) throws ParseException {
Calendar calendar = Calendar.getInstance();//创建对象
System.out.println(calendar.get(Calendar.YEAR));//获取年份
calendar.set(Calendar.YEAR,2345);//修改年份
System.out.println(calendar.get(Calendar.YEAR));
calendar.add(Calendar.YEAR,-2);//对年份进行减2
System.out.println(calendar.get(Calendar.YEAR));
}
System类
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作
相关方法:
- public static long currentTimeMillis():返回当前时间(以毫秒为单位)
- public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定数据拷贝到另一个数组中
形参的含义
src | 源数组 |
srcPos | 源数组索引的起始位置 |
dest | 目标数组 |
destPos | 目标数组索引的起始位置 |
length | 复制元素的个数 |
实例代码:
public static void main(String[] args) throws ParseException {
long l = System.currentTimeMillis();//获取当前时间
int[]a={1,2,3,4,5,6,7,8};
int[]b={9,10,11,12,13,14,15,16};
System.arraycopy(a,0,b,3,3);//将a的前三个元素 复制到b的第4-6的位置上
for (int i : b) {
System.out.println(i);
}
long l1 = System.currentTimeMillis();
System.out.println("程序运行时间:"+(l1-l));
}
StringBuilder类
可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
构造方法:
- public StringBuilder():构造一个空的StringBuilder容器
- public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去(将String转换成StringBuilder)
常用方法:
- public StringBuilder append(...):添加任意类型的元素
- public String toString():将StringBuilder转换为String
示例代码:
public static void main(String[] args) throws ParseException {
StringBuilder stringBuilder = new StringBuilder("abc");//构建一个 StringBuilder对象
stringBuilder.append("d").append("e").append("f");//链式添加元素
String string = stringBuilder.toString();// StringBuilder->String
System.out.println(string);//abcdef
}
字符串拼接问题(String与StringBuilder的对比)
String s="a"+"b"+"c";
StringBuilder ss=new StringBuilder("a"+"b"+"c");
String是常量,创建后不可以被修改(但是可以修改引用)。String的底层是final byte[] value ,一个字符串就是一个数组。String共产生5给字符串(就是5个数组):“a”,"b","c","ab","abc"
StringBuilder 的底层是byte[]value=new byte[16] (没有final修饰,可以改变其长度),它在内存中始终是一个数组,占用空间小,效率高,超出容量会自动扩容。
包装类
使用一个类将基本类型包装起来,提供了一些对应的方法操作这些数据
基本类型 | 对应的包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolearn | Boolean |
装箱:从基本类型转换为对应的包装类对象。
Integer integer = new Integer(1);
Integer integer1 = Integer.valueOf(1);
拆箱:从包装类对象转换为对应的基本类型。
int i = integer1.intValue();
自动装箱、自动拆箱
Integer integer = new Integer(1);
integer = integer + 1;//相当于integer=Integer.valueOf(integer.intValue()+1);
分析: 先进行拆箱,再进行装箱
基本数据类型与字符串之间的转换
基本数据类型转换成String:两种方法
- 直接在后面连接""即可
- String.valueOf()
String转换成基本类型(除char外)
包装类对象的parsexxx方法
示例代码:
int i=1;
String s = 1 + "";//int->string
System.out.println(Integer.parseInt(s));//string->int 输出1