• 关键字-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来调用构造函数,根据不同的参数,调用不同的构造函数。

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

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

  • 相关阅读:
    suse12安装详解
    Centos7上部署openstack mitaka配置详解(将疑难点都进行划分)
    菜鸟帮你跳过openstack配置过程中的坑[文末新添加福利]
    openstack中dashboard页面RuntimeError: Unable to create a new session key. It is likely that the cache is unavailable.
    Multiple network matches found for name 'selfservice', use an ID to be more specific.报错
    查看 SELinux状态及关闭SELinux
    SELinux深入理解
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址
    Oracle job procedure 存储过程定时任务
    POI文件导出至EXCEL,并弹出下载框
  • 原文地址:https://www.cnblogs.com/guochang/p/9558338.html
Copyright © 2020-2023  润新知