您当前的位置: 首页 >  Java

慕晨sekurlsa

暂无认证

  • 9浏览

    0关注

    82博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JAVA基础(十三)——this的使用

慕晨sekurlsa 发布时间:2022-08-03 23:57:03 ,浏览量:9

一、目录
  • this介绍
  • this本质
  • this细节
  • this练习
二、this介绍

java虚拟机会给每个对象分配this,代表当前对象。 解决类成员函数的形参和成员变量同名的问题。

例如:

public class javathis {

    public static void main(String[] args){
        Cat cat1 = new Cat("mi", 2);
        System.out.println(cat1.name);
        System.out.println(cat1.age);
    }
}

class Cat{
    String name;
    int age;

    public Cat(String name, int age){
        name = name;
        age = age;
    }
}

//null
//0

因为构造方法的形参与类成员变量同名,所以赋值的时候,直接将类成员变量赋值给类成员变量,所以还是初始值。

想要形参和类成员变量同名,但是又不影响赋值,就需要用到this关键字。

将上面的赋值语句改为:

public Cat(String name, int age){
        this.name = name;
        this.age = age;
    }
    
//mi
//2
三、this本质

this的本质就是指向当前对象本身,this的地址和对象的地址是一样的。 用hashCode来证明一下,hashCode的值不是地址,但是在这里,可以当做地址。 由object类定义的hashCode方法会针对不同的对象返回不同的整数。(这是通过将该对象的内部地址转换成一个整数来实现的)

public class javathis {

    public static void main(String[] args){
        Cat cat1 = new Cat("mi", 2);
        System.out.println("cat1 addr:" + cat1.hashCode());
    }
}

class Cat{
    String name;
    int age;

    public Cat(String name, int age){
        this.name = name;
        this.age = age;
        System.out.println("this addr:" + this.hashCode());
    }
}

//this addr:460141958
//cat1 addr:460141958

简单的说,哪个对象调用,this就代表哪个对象

public class javathis {

    public static void main(String[] args){
        Cat cat1 = new Cat("mi", 2);
        System.out.println("cat1 addr:" + cat1.hashCode());
        cat1.Info();

        Cat cat2 = new Cat("ci", 3);
        System.out.println("cat2 addr:" + cat2.hashCode());
        cat1.Info();
    }
}

class Cat{
    String name;
    int age;

    public Cat(String name, int age){
        this.name = name;
        this.age = age;
        System.out.println("this addr:" + this.hashCode());
    }

    public void Info(){
        System.out.println("add:" + this.hashCode());
    }
}


//this addr:460141958
//cat1 addr:460141958
//add:460141958
//this addr:1163157884
//cat2 addr:1163157884
//add:460141958
四、this细节
  1. this关键字可以用来访问本类的属性、方法、构造器。
  2. this用于区分当前类的属性和局部变量。
  3. 访问成员方法的语法:this.方法名(参数列表)。
  4. 访问构造器语法:this(参数列表)。只能在构造器中使用,并且必须放在第一行。
  5. this不能在类定义的外部使用,只能在类定义的方法中使用。

对于第四点,实例:

public class javathis {

    public static void main(String[] args){
        Cat cat = new Cat();
    }
}

class Cat{
    String name;
    int age;

    Cat(){
        this("kimi",2);
        System.out.println("Cat()");
    }


    public Cat(String name, int age){
        this.name = name;
        this.age = age;
        System.out.println("Cat(String name, int age)");
    }
}


//Cat(String name, int age)
//Cat()

细节:

this(参数列表)必须放在第一行,不然会报错。 并且再强调一次,this(参数列表)只能在构造器中使用。不能在其他成员方法中使用。

五、this练习

定义Person2类,里面有name、age属性,并提供compareTo比较方法,用于判断是否和另一个人相等,名字和年龄完全一样,就返回true,否则返回false。

public class javathis {

    public static void main(String[] args){
        Person2 p1 = new Person2("li", 22);
        Person2 p2 = new Person2("wu", 22);
        p1.compareTo(p2);
        System.out.println( p1.compareTo(p2));


    }
}

class Person2{
    String name;
    int age;

    public boolean compareTo(Person2 p){
        if(this.name.equals(p.name) && this.age == p.age){
            return true;
        }else {
            return false;
        }
    }

    public Person2(String name, int age){
        this.name = name;
        this.age = age;
    }
}


//false
关注
打赏
1663680270
查看更多评论
立即登录/注册

微信扫码登录

0.1830s