zoukankan      html  css  js  c++  java
  • java之this关键字

    /**
    * 1.this 是一个关键字
    * 2.this是什么?在内存方面是怎样的?
    * 一个对象一个this。
    * this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身
    * 所以,严格意义上来说,this代表的就是"当前对象"
    * this存储在堆内存中
    * 3.this使用在实例方法中,谁调用这个实例方法,this就是谁,所以this代表的是:当前对象。
    * 4.this除了可以使用在实例方法中,还可以用在构造方法中。新语法:
    * 通过当前的构造方法去调用另一个本类的构造方法,可以使用以下的语法格式
    this(实际参数列表)
    * */
    public class ThisTest01 {
        public static void main(String[] args) {
            Customer c1 = new Customer("张三");
            c1.shopping();
    
            Customer c2 = new Customer("李四");
            c2.shopping();
        }
    }
    
    //顾客类
    class Customer{
    
        //属性,实例变量
        String name;
    
        //构造方法
        public Customer() {
        }
    
        public Customer(String s) {
            this.name = s;
        }
    
        //顾客购物,实例方法
        public void shopping(){
            //这里this是谁。谁来调用这个方法,this就是谁,
            // c1调用这个方法,this就是c1,
            // c2调用这个方法,this就是c2,
            //那为什么name前没有c1或者c2.因为找不到c1,c2,但是this代表就是当前对象,this是可以省略不写的
            //this. 省略的话,还是默认访问"当前对象"的name
            System.out.println(this.name+"正在购物");
        }
    
        //静态方法
        public static void doSome(){
            //this代表当前对象,而静态方法的调用不需要对象,矛盾了
    //        System.out.println(this);
        }
    
    }

     思考下面的:静态方法m1可以访问实例变量name吗?

     this什么时候不可以省略

    在实例方法中,或者构造方法中,为了区分局部变量和实例变量,这种情况下不可以省略。

    因为,java语法的接近原则,会认为下面的name就是name,而用了this以后,才会给实例变量赋值。

    class Customer{

    //属性,实例变量
    String name;

    //构造方法
    public Customer() {
    }
       //不可以省略,就近原则
    public Customer(String name) {
    this.name = name;
    }
    }

    -------------------------------------
    class Work{
    //实例变量 必须先new对象,通过"引用."来访问
    private String name = "zhangsan";

    //return this.name = name
    // 这个可以省略this,是因为不需要区分局部变量和实例变量
    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }
    }

    4.this除了可以使用在实例方法中,还可以用在构造方法中。新语法:
    * 通过当前的构造方法去调用另一个本类的构造方法,可以使用以下的语法格式
    this(实际参数列表)
    class Work{
        //实例变量 必须先new对象,通过"引用."来访问
        private String name;
    
        public Work(){
            this("xiaomin");//必须是第一行,不可以前面有语句
        }
    
        public Work(String name){
            this.name = name;
        }
    }
  • 相关阅读:
    EBS_FORM_开发:关于离开record验证
    EBS_FORM_开发:关于WHEN-VALIDATE-ITEM上面commit
    EBS_FORM_开发:关于LOCK-ON
    EBS_FORM_开发:实现form record ctrl+F6复制
    EBS_FORM_开发:关于切换不同BLOCK的时候弹出需要保存的窗口
    EBS_FORM_开发:FRM-40150的解决思路
    工作记录
    02_mysql表的操作
    Mysql_字符集_排序规则
    JAVA_IO
  • 原文地址:https://www.cnblogs.com/peiminer/p/13646505.html
Copyright © 2011-2022 走看看