Object类
Java中所有类都直接或者间接地继承Object类 ---- 没有写extends则默认直接继承Object类,否则间接继承
Object类中所定义的方法,是所有对象都具备的方法
Object类型可以存储任何对象 ------ 组为参数,可接受任何对象;作为返回值,可以返回任何对象
getClass()
返回引用中存储的实际对象类型
应用:通常用于判断两个引用中实际的存储对象类型是否一致
public class GetClass {
public static void main(String[] args) {
//创建学生类对象
Student s1 = new Student("张三", 12);
//用getClass获取对象的类
Class s1Class = s1.getClass();
System.out.println(s1Class);
}
}
//创建一个学生类
//属性:姓名年龄;构造方法;get/set
class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
输出:
class com.huang.ObjectClass.Student
hashCode()
返回该对象的哈希码值(int型)
哈希值是根据对象的地址或者字符串或者数字根据hash算法计算出来的int型数值
一般情况下相同对象返回相同的哈希码
System.out.println(s1.hashCode());
输出:
460141958
toString()
返回该对象的字符串表示
可以根据程序需求进行重写
//创建一个学生类
//属性:姓名年龄;构造方法;get/set
//重写toString方法
class Student{
……省略
……
……
@Override
public String toString() {
return "Student{" +
"name=‘" + name + ‘\‘‘ +
", age=" + age +
‘}‘;
}
}
public static void main(String[] args) {
//创建学生类对象
Student s1 = new Student("张三", 12);
//用toString方法
System.out.println(s1.toString());
}
输出:
Student{name=‘张三‘, age=12}
如果不重写,toString方法输出 com.huang.ObjectClass.Student@1b6d3586
equals()
用于比较两个对象的地址是否相同
可以根据程序需求对其进行重写
equals方法覆盖:
1、判断obj是否为null
2、判断两个引用指向的实际对象类型是否一致
2、强制类型转换
3、依次计较各个属性的值是否相同
//创建一个学生类
//属性:姓名年龄;构造方法;get/set
// toString()
//equals()
class Student{
……省略
……省略
……省略
@Override
public boolean equals(Object o) {
// 1、判断obj是否为null
if(o == null){
return false;
}
// 2、判断两个对象是否是同一个引用
if(this == o){
return true; //如果是同一个对象直接返回true
}
// 3、判断是否是同一个类型
//if(this.getClass() == o.getClass()){}
//使用instanceof比较简洁
if (o instanceof Student){
// 如果是,4、强制类型转换
Student s = (Student) o; //Object o 是Object类型的,所以做强转
// 5、依次比较属性值是否相同
if(this.name.equals(s.getName()) && this.age == s.getAge()){
return true;
}
}
return false;
}
}
public static void main(String[] args) {
//创建学生类对象
Student s1 = new Student("张三", 12);
Student s2 = new Student("李四", 30);
Student s3 = new Student("李四", 30);
//equals
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
}
输出:
false
true
finalize()
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记对象,进入回收队列
垃圾对象:没有有效引用指向此对象时为垃圾对象
垃圾回收:由GC销毁垃圾对象,释放数据存储空间
自动回收机制:JVM的内存耗尽,一次性回收所有的垃圾对象
手动回收机制:使用System.gc(),通知JVM执行垃圾回收
//创建一个学生类
//属性:姓名年龄;构造方法;get/set
//finalize()
class Student{
……省略
……省略
……省略
@Override
protected void finalize() throws Throwable {
System.out.println(this.name + "对象被回收了");
}
}
public static void main(String[] args) {
//创建学生类对象
Student s1 = new Student("张三", 12);
Student s2 = new Student("李四", 30);
Student s3 = new Student("李四", 30);
new Student("王五",3);
//手动回收垃圾
System.gc();
}
输出:
王五对象被回收了
BigDecimal
精确计算浮点数
public static void main(String[] args) {
double a = 1.0;
double b = 0.9;
System.out.println(a-b); // 输出结果为0.09999999999999998
//精确计算
BigDecimal bd1 = new BigDecimal("1.0"); //用字符串
BigDecimal bd2 = new BigDecimal("0.9");
//减
BigDecimal subtract = bd1.subtract(bd2);
System.out.println(subtract); // 输出结果为0.1
//除
BigDecimal divide = bd1.subtract(new BigDecimal("0.1")).divide(bd2);
System.out.println(divide); // 输出结果为1
BigDecimal divide1 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP); //保留两位小数,四舍五入模式
System.out.println(divide1); // 输出结果为1.11
}
Date 和 Calendar
1 s = 1000 ms
1 ms = 1000 us
1us = 1000 ns
Date类中大部分方法已经被Calendar类中的方法取代
Date date = new Date();
System.out.println(date.toString()); // Thu Aug 19 17:26:33 CST 2021
Calendar类提供了获取或者设置各种日历字段的方法,其构造方法的修饰符是protected,所以无法直接创建该对象
//创建对象,构造函数为protected修改,不能直接创建对象
Calendar instance = Calendar.getInstance();
System.out.println(instance.getTime()); //打印时间
//获取时间信息
System.out.println(instance.get(Calendar.YEAR)); //年
System.out.println(instance.get(Calendar.MONTH) + 1); //月 ,从 0 - 11,实际要 +1
//修改时间
Calendar instance1 = Calendar.getInstance();
instance1.set(Calendar.MONTH,3);
System.out.println(instance1.getTime().toLocaleString());
SimpleDateFormat
日期 -----> 文本
文本 -----> 日期
年 -----> y
年终月份 -----> M
月中天数 -----> d
一天中小时数(0 --- 23) -----> H
分钟 -----> m
秒 -----> s
毫秒 -----> S
//创建对象
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//创建时间
Date date = new Date();
//格式化时间
String format = simpleDateFormat.format(date);
System.out.println(format); //2021-08-19 17:57:39
//解析 ---- 字符串转成日期
Date parse = simpleDateFormat.parse("2000-10-01 20:10:31");
System.out.println(parse); //Sun Oct 01 20:10:31 CST 2000