zoukankan      html  css  js  c++  java
  • 关键字-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来调用构造函数,根据不同的参数,调用不同的构造函数。

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

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

  • 相关阅读:
    在 VS14 上安装 Visual F# Power Tools
    关于sources.list和apt-get [转载]
    MATLAB中导入数据:importdata函数
    部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法
    html5视频播放
    用GruntJS合并、压缩JS文件
    Linux/UNIX进程控制(1)
    TCP/IP协议,HTTP协议
    php 求水仙花数优化
    使用LAMP创建基于wordpress的个从博客站点
  • 原文地址:https://www.cnblogs.com/guochang/p/9558338.html
Copyright © 2011-2022 走看看