java 编程思想笔记之this关键字(包括一些对方法在内存中的分配的解析)

简介:
This关键字:只能在方法内部使用,表示对“调用方法的那个对象”的引用。
Leaf.java
public  class Leaf { 
             private  int i = 0; 
            Leaf increment() { 
                i++; 
                 return  this
            } 
             void print() { 
                System.out.println( "i = " + i); 
            } 
             public  static  void main(String[] args) { 
                Leaf x =  new Leaf(); 
                 //increment方法被对象x调用,这方法内的this指向x对象。 
                x.increment().increment().increment().print(); 
            } 
}
 
通常,当我们说this的时候,都是指这个对象或者当前对象。而且它本身会产生当前对象的一个引用。在一个构建器中,若为其赋予一个参数列表,那么this关键字会具有不同的含义:它会对与那个参数列表相符的构建函数进行明确的调用。这样一来,我们就可通过一条直接的途径来调用其他构建函数。
City.java
public  class City { 
         private  double code; 
         private String name;    
         //构造函数 
         public City( double code) { 
              this.code = code; 
        } 
         public City(String name){ 
              this.name = name; 
        } 
         public City( double code, String name) { 
              this(code); 
              //在一个构造函数中只能通过this调用一次其他构造函数 
              this(name); //将会报错 
              this.name = name; 
        }        
         //get方法 
         public  double getCode() { 
              return code; 
        }        
         public String getName() { 
              return name; 
        } 
         
         public  static  void main(String[] args){ 
             String str =  "凤山"
             City city1 =  new City(str); 
             City city2 =  new City(str); 
//方法在内存中只保存有一份。那怎样知道getName方法是被哪个对象调用?通过this知道。当city1调用getName方法时,this就相当于city1的引用,当city2调用getName方法时,this就相当于city2的引用。 
             System.out.println(city1.getName()); 
             System.out.println(city2.getName()); 
        } 

由于以上例子说到了方法在内存中只保存有一份,这里就解析一下方法的存储(个人理解)一个程序所占用的的内存,分为存储代码片段,存储数据片段和程序申请分配的内存(堆和栈)。方法作为程序代码片段,是不存在任何申请分配的问题的,因此既不会在堆中,也不会在堆栈中。
以下再截个图上来好理解(此图出自尚学堂视频):
现在知道了方法做为代码片段是存储在一个专门存储代码片段的内存中的,所以对于多个实例对象,它们共享这个方法代码片段。既然这样,对于上述例子中的 getName() 方法被 city1 city2 两个实例调用, getName() 方法是如何判断到底是哪个实例调用它的 name 值的呢?对了,它是通过 this 关键字来判断的。其实在 getName() 的方法中它隐藏了 this 关键字,它的写法可以是以下这样:
         public String getName() { 
              return  this.name; 
        }
在笔记开始我就写了this关键字表示对“调用方法的那个对象”的引用。现在明白了吧,当city1调用getName方法时,this就相当于city1的引用,当city2调用getName方法时,this就相当于city2的引用。所以虽然方法片段只有一份,但它可以通过this来区分引用。
总结:1. this关键字只能在方法内部使用,表示对“调用方法的那个对  象”的引用。
         2. 在一个构造函数中只能通过this调用一次其他构造函数。
3.方法片段在内存中只保存有一份,所以不同的实例调用方法时是通过this关键字来区分方法中的属性。
 









本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/136116,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
15 0
|
2天前
|
Java
两千字讲明白java中instanceof关键字的使用!
两千字讲明白java中instanceof关键字的使用!
11 0
|
2天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
7天前
|
安全 Java 开发者
Java并发编程:深入理解Synchronized关键字
【4月更文挑战第19天】 在Java多线程编程中,为了确保数据的一致性和线程安全,我们经常需要使用到同步机制。其中,`synchronized`关键字是最为常见的一种方式,它能够保证在同一时刻只有一个线程可以访问某个对象的特定代码段。本文将深入探讨`synchronized`关键字的原理、用法以及性能影响,并通过具体示例来展示如何在Java程序中有效地应用这一技术。
|
11天前
|
Java
Java关键字(1)
Java关键字(1)
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
9天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
18 0
|
9天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
13 0
|
9天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
22 0
|
9天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0

推荐镜像

更多