java从零到项目实战(八)

本文详细介绍了Java中的Object类,包括getClass()、hashCode()、toString()、equals()和finalize()方法。接着讨论了装箱与拆箱、基本类型与字符串转换、Integer整数缓冲区的概念。此外,还讲解了String类的特点、常用方法以及如何进行字符串比较。最后,提到了可变字符串类StringBuilder和日期处理类Date及Calendar的相关方法。
摘要由CSDN通过智能技术生成

java常用类

Object类

  • 又称超类、基类,是所有类的直接或间接父类,位于继承树的最顶层
  • 任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
  • Object类中所定义的方法,是所有对象都具备的方法
  • Object类型可以存储任何对象
    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象

getClass()方法

获取对象运行时对象的类
在这里插入图片描述
例如,定义一个类gtClass,其对象类型是Class

public class gtClass {
   
    private int age;
    private String name;


    public gtClass() {
   

    }

    //定义有参构造方便初始化
    public gtClass(int age,String name){
   
        this.age = age;
        this.name = name;
    }

    //get获取私有属性
    public int getAge() {
   
        return age;
    }
    public String getName() {
   
        return name;
    }

    //set赋值私有属性
    public void setAge(int a){
   
        this.age = a;
    }
    public void setName(String n) {
   
        this.name = n;
    }
}

利用**getClass()**返回该类对象的实际对象类型

public class test {
   
    public static void main(String[] args) {
   
        gtClass gt1 = new gtClass(10,"绝世");
        System.out.println(gt1.getClass());//返回实际对象类型
    }
}

在这里插入图片描述

hashCode()方法

在这里插入图片描述
注:相同对象返回的哈希值相同

public class test {
   
    public static void main(String[] args) {
   
        gtClass gt1 = new gtClass(10,"绝世");
        //打印gt1的哈希值
        System.out.println(gt1.hashCode());

    }
}

toString()方法

在这里插入图片描述
**toString()**默认原代码是

public String toString() {
     
    //返回:类的名称@十六进制哈希值
    return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}

例如:

public class test {
   
    public static void main(String[] args) {
   
        gtClass gt1 = new gtClass(10,"绝世");
        System.out.println(gt1.toString());

    }
}

在这里插入图片描述
当我们想通过**toString()**方法来进行其他信息的返回时,就可以在student中重写toString方法。

例如想通过该方法返回姓名:年龄
在这里插入图片描述

equals()方法

在这里插入图片描述
equals()方法源代码:

 public boolean equals(Object var1) {
   //返回值是true或false
        return this == var1;  //如果当前对象与目标对象相同,则返回true
    }

例如,比较以下三个对象是否相同

public class test {
   
    public static void main(String[] args) {
   
        gtClass gt1 = new gtClass(10,"绝世");
        gtClass gt2 = new gtClass(28, "秦羽");
        gtClass gt3 = new gtClass(10,"绝世");

        System.out.println(gt1.equals(gt2));
        System.out.println(gt1.equals(gt3));

    }
}

由于gt1、gt2、gt3均是实例化的对象,所以他们的对象地址均不相同。
在这里插入图片描述
但是这里会有一个问题,gt1与gt3从参数上来说,其实可以判定为相同。所以若我们希望从对象内容的角度看,这两个判定为true的话,那么就需要对**equals()**方法进行重写,步骤如下:
在这里插入图片描述

 //重写equals
    @Override
    public boolean equals(Object obj) {
   
        //1.比较两个引用是否指向同一对象
        if (this == obj){
   
            return true;
        }
        //2.判断obj是否为null
        if (obj == null){
   
            return false;
        }
        //3.判断两个引用指向的实际对象类型是否一致
        if (obj instanceof gtClass){
   
            //4.强制类型转换
            gtClass g = (gtClass) obj;
            //5.通过equals方法判断字符串是否相同
            if (this.name.equals(g.getName())&&this.age == g.age){
   
                return true;
            }
        }
        return false;
    }

注意:在Object类和String类中均包含有equals()方法,在Object类中是用来比较对象地址是否相同;而在对字符串使用该方法时,调用的则是String类的equals()方法,比较的是两个对象的字符串内容是否相同。

finalize()方法

在这里插入图片描述

public class test2 {
   
    public static void main(String[] args) {
   
        //创建没有有效引用指向的对象作为垃圾对象
        new gtClass(12,"aaa");
        new gtClass(12,"bbb");
        new gtClass(12,"ccc");

        //手动提示回收垃圾
        System.gc();
        System.out.println("回收开始");
    }
}

重写finalize()

 //重写finalize
    @Override
    protected void finalize() throws Throwable {
   
        System.out.println(this.name + "已被回收");
    }

在程序运行结束前,才会执行回收机制。
在这里插入图片描述

包装类

前面提到,java为我们提供了八大基本类型,而这八大基本类型是没有自己的方法和属性的,所以为了让八大基本类型变得更加强大,定义包装类,即基本数据类型所对应的引用数据类型。这样,作为引用类型的包装类就可以使用一些特定的方法和属性了。

注意:Object可统一所有数据,包装类默认值为null

基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

类型转换与装箱、拆箱

装箱:将基本数据类型转化为引用类型(包装类)

拆箱:将引用类型转化为基本数据类型

装箱与拆箱的意义

基础类型既不是对象也不是Object的子类,而是数据。将一个值类型(基本数据类型)包装为类,首先可以使这个类型可以有很多基于Object类的调用方法;其次,java作为面向对象编程,真正的面向对象,基本数据类型本身就不应该存在,而只有对象这一种数据类型;不仅如此,在接口、集合等涉及泛型时,基本数据类型不能作为参数,这时候就需要装箱操作。同时由于值类型操作上更加简便,而对象可能会影响性能,所以也会有拆箱的应用场景。

JDK1.5版本前,装箱与拆箱的方法为

public class Demo01 {
   
    public static void main(String[] args) {
   
        //类型转换,装箱(值类型转为引用类型)
        int num1 = 20;
        //方法一:使用Integer类创建对象的方式将要转的基本类型变量作为构造参数
        Integer int1 = new Integer
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值