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

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

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

  • 相关阅读:
    关于《大道至简-软件工程实践者的思想》的读书笔记(二)
    关于《大道至简-软件工程实践者的思想》的读书笔记(一)
    Android源码项目目录结构
    Android源码目录结构详解
    项目阶段总结
    站立会议07(二期)
    站立会议06(二期)
    站立会议05(二期)
    站立会议04(二期)
    站立会议03(二期)
  • 原文地址:https://www.cnblogs.com/guochang/p/9558338.html
Copyright © 2011-2022 走看看