解析java中This的用法分析

 更新时间:2013年05月21日 16:25:08   作者:  
本篇文章是对java中This的用法进行了详细的分析介绍,需要的朋友参考下
用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法。先来个简单的例子:
复制代码 代码如下:

public class ThisDemo { 
    String name="Mick";
    public void print(String name){
        System.out.println("类中的属性 name="+this.name);
        System.out.println("局部传参的属性="+name);
    }  
    public static void main(String[] args) {
        ThisDemo tt=new ThisDemo();
        tt.print("Orson");
    }
}

关于返回类自身的引用,Thing in Java有个很经典的例子,通过this 这个关键字返回自身这个对象然后在一条语句里面实现多次的操作,还是贴出来。
复制代码 代码如下:

public class ThisDemo { 
    int number;
    ThisDemo increment(){
         number++;
         return this;
    } 
  private void print(){
         System.out.println("number="+number);
    }
    public static void main(String[] args) {
        ThisDemo tt=new ThisDemo();
         tt.increment().increment().increment().print();
    }
}

那也应该在一个类中定义两个构造函数,在一个构造函数中通过 this 这个引用来调用另一个构造函数,这样应该可以实现,这样的实现机制在实际做应用开发的时候有会有什么样子的用处纳?贴下写的代码:
复制代码 代码如下:

public class ThisDemo { 
    String name;
    int age;
    public ThisDemo (){
        this.age=21;
   }    
    public ThisDemo(String name,int age){
        this();
        this.name="Mick";
    }    
  private void print(){
         System.out.println("最终名字="+this.name);
         System.out.println("最终的年龄="+this.age);
    }
    public static void main(String[] args) {
       ThisDemo tt=new ThisDemo("",0); //随便传进去的参数
       tt.print();
    }
}

看上面这段代码虽然很短,理解起来似乎也很顺理成章,在有参数的构造函数中赋值name 在无参数的当中赋值age属性。但我个人觉得其中有点问题,实例化一个类应该先为对象ThisDemo分配内存,先调用构造函数ThisDemo(String name,int age),执行到第一行的时候,调用ThisDemo()构造函数,也就是说这里应该会有两个内存空间的,一个是ThisDemo(String name,int age)执行到一点的空间和另一个是ThisDemo()执行空间,为什么最后打印出来的结果是都实例化了一个对象中的两个属性name和age纳?请大牛赐教!
总结一下:
1) this 关键字是类内部当中对自己的一个引用,可以方便类中方法访问自己的属性;
2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数(这里面上面有个问题)

相关文章

  • Java线程间通讯的几种方法小结

    Java线程间通讯的几种方法小结

    线程通信可以用于控制并发线程的数量,本文主要介绍了Java线程间通讯的几种方法小结,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 结合线程池实现apache kafka消费者组的误区及解决方法

    结合线程池实现apache kafka消费者组的误区及解决方法

    这篇文章主要介绍了结合线程池实现apache kafka消费者组的误区及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法

    navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法

    今天小编就为大家分享一篇关于navicatdesignquery.sql.bak系统找不到指定路径错误的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • springboot读取文件,打成jar包后访问不到的解决

    springboot读取文件,打成jar包后访问不到的解决

    这篇文章主要介绍了springboot读取文件,打成jar包后访问不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • MyBatis实现动态SQL更新的代码示例

    MyBatis实现动态SQL更新的代码示例

    本文博小编将带领大家学习如何利用 MyBatis 拦截器机制来优雅的实现这个需求,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • Spring执行流程和Bean的生命周期详解

    Spring执行流程和Bean的生命周期详解

    这篇文章主要介绍了Spring执行流程和Bean的生命周期详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Struts2截取字符串代码介绍

    Struts2截取字符串代码介绍

    这篇文章主要介绍了Struts2截取字符串代码介绍,介绍了基本的截取方法,以及截取带html标签字符串的方法,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot整合RabbitMQ的5种模式实战

    SpringBoot整合RabbitMQ的5种模式实战

    本文主要介绍了SpringBoot整合RabbitMQ的5种模式实战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 浅谈Mybatis+mysql 存储Date类型的坑

    浅谈Mybatis+mysql 存储Date类型的坑

    这篇文章主要介绍了浅谈Mybatis+mysql 存储Date类型的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Java语言面向对象编程思想之类与对象实例详解

    Java语言面向对象编程思想之类与对象实例详解

    这篇文章主要介绍了Java语言面向对象编程思想之类与对象实例详解,还是十分不错的,这里给大家分享下,需要的朋友可以参考。
    2017-10-10

最新评论