Java:this

Posted Hello-world-noname

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:this相关的知识,希望对你有一定的参考价值。

package com.demo.day;

public class This01 
    public static void main(String[] args) 
        Dog1 dog1 = new Dog1("耗子",3);
        dog1.info();
    

class Dog1
    String name;
    int age;
//    public Dog1(String dName,int dAge)
//        name = dName;
//        age = dAge;
//    
    //出现了一个问题,根据变量的作用域原则
    //构造器的name 就是局部变量,而不是属性
    //引出 ————> this 关键字
    public Dog1(String name,int age)
        this.name = name;   //当前对象的属性name = 局部变量name
        this.age = age;     //当前对象的属性age = 局部变量age
    
    //如果我们构造器的形参,能够直接写成属性名就更好了
    public void info()
        System.out.println(name + "\\t" + age + "\\t");
    


什么是this

java虚拟机会给每个对象分配this,代表当前对象。

使用hashCode()方法来查看this是否是本类的引用;

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

package com.demo.day;

public class This01 
    public static void main(String[] args) 
        Dog1 dog1 = new Dog1("耗子",3);
        Dog1 dog2 = new Dog1("三花",2);
        //调用hashCode()方法
        System.out.println("dog1的hashcode:" + dog1.hashCode());
        System.out.println("dog2的hashcode:" + dog2.hashCode());
//        dog1.info();
    

class Dog1
    String name;
    int age;
//    public Dog1(String dName,int dAge)
//        name = dName;
//        age = dAge;
//    
    //出现了一个问题,根据变量的作用域原则
    //构造器的name 就是局部变量,而不是属性
    //引出 ————> this 关键字
    public Dog1(String name,int age)
        this.name = name;   //当前对象的属性name = 局部变量name
        this.age = age;     //当前对象的属性age = 局部变量age
        //调用hashCode()方法
        System.out.println("this.hashcode = " + this.hashCode());
    
    //如果我们构造器的形参,能够直接写成属性名就更好了
    public void info()
        System.out.println(name + "\\t" + age + "\\t");
    


输出结果:

this.hashcode = 1324119927
this.hashcode = 81628611
dog1的hashcode:1324119927
dog2的hashcode:81628611

this小结

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

this使用细节

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表);
  4. 访问构造器语法:this(参数列表); 注意只能在构造器中使用
  5. this不能在类定义的外部使用,只能在类定义的方法中使用

下面代码将上述细节呈现

package com.demo.day;

public class thisDetail 
    public static void main(String[] args) 
//        T1 t1 = new T1();
//        t1.f2();
        T1 t2 = new T1();
        t2.f3();
    

class T1
    String name = "Tom";
    int num;
    //细节:访问成员方法的语句:this.方法名(参数列表)
    //注意:访问构造器语法:this(参数列表);必须放在构造器的第一条语句
    //对构造器的访问 注意只能在构造器中使用,即不能成员方法访问构造器,只能构造器互相访问
    public T1()
        //从这里去访问 T1(String name,int age) 构造器
        this("jack",21);//对this的调用必须是构造器中的第一个语句
        System.out.println("T1() 构造器");
    
    public T1(String name,int age)
        System.out.println("T1(String name,int age) 构造器");
    

    public void f1()
        System.out.println("f1() 方法..");
    
    public void f2()
        System.out.println("f2() 方法..");
        //调用本类的 f1
        //第一种方式
        f1();
        //第二种方式
        this.f1();
    
    //this 关键字可以用来访问本类的属性
    public void f3()
        String name = "smith";//变量作用域的就近原则会导致下面的输出不同
        //传统方式
        System.out.println("name=" + name + "\\tnum=" + num);
        //也可以使用this访问属性
        System.out.println("name=" + this.name + "\\tnum=" + this.num);
    


测试

package com.demo.day;

public class TestPerson 
    public static void main(String[] args) 
        Person3 p = new Person3("smith",21);
        Person3 p2 = new Person3("tom",21);
        System.out.println(p.compareTo(p2));
    

class Person3
    String name;
    int age;
    Person3(String name,int age)
        this.name = name;
        this.age = age;
    
    public boolean compareTo(Person3 p)
//        if (this.name.equals(p.name) && this.age == p.age)
//            return true;
//        
        return this.name.equals(p.name) && this.age == p.age;
    


java中this在这里的用法意义?

toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));
toolBar.add(btnAdd);
toolBar.add(btnResetPwd);
toolBar.add(this.btnDelete);//为什么要用this?上面都木有用阿??

你把this去掉也行的,this代表当前对象。this.btnDelete是调当前对象的btnDelete属性。上面加上也是一样的效果,一般开发人员敲this其实是为了开发方便,因为Eclipse会给你显示当前对象的属性和方法供你调用 参考技术A 这个不得不跟你解释一下.. . . 不知道你用过Eclipse没 . . ..

当我们不记得一个类的成员变量 或者变量名很长的时候 我们可以用this. 来达到自动提示的效果...

以上是关于Java:this的主要内容,如果未能解决你的问题,请参考以下文章

java中this在这里的用法意义?

Java:关于Java中的this,这里为啥加不加都一样呢

Java:类.this

java:在java中为啥静态变量没有this引用?

Java复习笔记--java中this 关键字

对于java中this关键字的理解??