• 关键字-this


    1、当成员变量和局部变量重名时,在方法中使用this时,this指向的是该方法所在类的成员变量。

    package gc.test.java.cs1;
    
    public class User{
        
        public String name = "张三";
        
        public void show(String name){
            System.out.println("name:" + name);
            System.out.println("this.name:" + this.name);
            this.name = name;
        }
        
    }
    package gc.test.java.cs1;
    
    public class Main {
    
        public static void main(String[] args) {
            
            User user = new User();
            user.show("李四");
            System.out.println("user.name:" + user.name);
        }
    }

    运行结果:

    name:李四
    this.name:张三
    user.name:李四

    通过上的运行结果可以看出,在show方法中,对name操作,指向的是show的参数,要对该类中的成员变量操作,需要带上this引用。

    2、可以把自己当做参数传递,也可以使用this.成员变量。

    package gc.test.java.cs1;
    
    public class Base {
        
        public void show(User user){
            System.out.println("Base.user.name:" + user.name);
        }
    }
    package gc.test.java.cs1;
    
    public class User{
        
        public String name = "张三";
        
        public void show(String name){
            Base base = new Base();
            base.show(this);
        }
        
    }
    package gc.test.java.cs1;
    
    public class Main {
    
        public static void main(String[] args) {
            User user = new User();
            user.show("李四");
        }
    }

    运行结果:

    Base.user.name:张三

    通过上面的运行结果可以看出,在User类的show方法中,把自己当做传输传递,在Base类的show方法中使用时,指向的是User的成员变量,而不是User类中show方法的参数。

    3、在构造函数中,可以通过this调用同一类中其余的构造函数,this指向的是该构造函数所在的类。

    package gc.test.java.cs2;
    
    public class Member {
    
        Member(String name){
            System.out.println("我的名字叫" + name);
        }
        
        Member(String name, int age){
            this(name);
            System.out.println("我的今年" + age + "岁");
        }
        
        Member(){
            this("张三", 20);
            this(name);//编译报错
        }
        
        void show(){
            this("张三", 20);//编译报错
        }
    }
    package gc.test.java.cs2;
    
    public class Main {
    
        public static void main(String[] args) {
            Member member = new Member();
        }
    }

    运行结果:

    我的名字叫张三
    我的今年20岁

    通过上面的运行结果可以看出,可以直接通过this来调用构造函数,根据不同的参数,调用不同的构造函数。

    在无参构造函数中,调用了两次构造函数,编译报错。在其余的函数中调用构造函数,也出现编译报错。

    注:在一个构造函数中,只能调用一个构造函数。不能在构造函数以外的函数中调用构造函数。

  • 相关阅读:
    Socket规划(1)
    hdu 2391 Filthy Rich
    UDP议定书图像高速传输无损失程序
    C# 通过豆瓣网络编程API获取图书信息
    OS调度算法常用摘要
    mysql回想一下基础知识
    2015第37周三
    2015第37周二
    2015第37周一
    2015第37周一struts2 jstl 标签
  • 原文地址:https://www.cnblogs.com/guochang/p/9558338.html
Copyright © 2020-2023  润新知