java中this的用法示例(关键字this)

this是指向本身的隐含的指针,简单的说,哪个对象调用this所在的方法,那么this就是哪个对象。

示例代码: TestThis_1.java

代码如下:

/* 问题:什么是this
 * 输出结果:
 * A@4e44ac6a
 */

public class TestThis_1 {
    public static void main(String[] args) {
        A aa = new A();
        System.out.println(aa.f()); //aa.f(), 返回aa这个对象的引用(指针)
    }  
}

class A {
    public A f() {
        return this;  //返回调用f()方法的对象的A类对象的引用
    }  
}

this的常见用法

1. 区分同名变量

示例代码: TestThis_2.java

代码如下:

/* this的常见用法1:区分同名变量
 * 输出结果:
 * this. i = 1
 * i = 33
 */
public class TestThis_2 {
    public static void main(String[] args) {
        A aa = new A(33);
    }  
}

class A {
    public int i = 1;                                           //这个i是成员变量

/*注意:一般不这么写,构造函数主要是为了初始化,这么写主要是为了便于理解*/
    public A(int i) {                                           //这个i是局部变量
        System.out.printf("this. i = %d\n", this.i);            //this.i指的是对象本身的成员变量i
        System.out.printf("i = %d\n", i);                       //这里的i是局部变量i
    }  
}

2. 构造方法间的相互调用

示例代码: TestThis_3.java

代码如下:

/* this的常见用法2: 构造方法中互相调用*/
public class TestThis_3 {
    public static void main(String[] args) {

}  
}

class A {
    int i, j, k;
    public A(int i) {
        this.i = i;
    }

public A(int i, int j) {
        /* i = 3;  error   如果不注释掉就会报错:用this(...)调用构造方法的时候,只能把它放在第一句
         * TestThis_3.java:20: error: call to this must be first statement in constructor
         *      this(i);
         *                  ^
         *                  1 error
         */
        this(i);   
        this.j = j;
    }

public A(int i, int j, int k) {
        this(i, j);
        this.k = k;
    }  
}

注意事项

被static修饰的方法没有this指针。因为被static修饰的方法是公共的,不能说属于哪个具体的对象的。

示例代码: TestThis_4.java

代码如下:

/*static方法内部没有this指针*/
public class TestThis_4 {
    public static void main(String[] args) {

}  
}

class A {
    static A f() {
        return this;
        /* 出错信息:TestThis_4.java:10: error: non-static variable this cannot be referenced from a static context
         *          return this;
         *                     ^
         *                     1 error
         */
    }  
}

(0)

相关推荐

  • Java中的this指针使用方法分享

    Java中, 一般来说this指针指的是当前正在访问的这段代码的对象 ,但是如果在内部类中需要使用外部类中的对象,这时就需要使用外部类的类名进行限定. 这种方式在Android开发中也比较常见 . @Author: twlkyao package twlkyao; public class A { public A() { Inner inner = new Inner(); inner.outer(); // call the inner class's outer method. this.

  • java this super使用方法详解

    super是Java语言的保留字,用来指向类的超类. 假设在Teacher类中定义了一个类变量boolean gender; 在子类的方法中gender就应该是指子类的gender变量,如果要引用超类的gender变量的话就必须使用 super.genderthis对象在类的构造方法中,要给对象的域进行初始化,这时如果参数和类变量同名,则类变量的名字将会被参数名屏蔽, 必须知道当前的对象名称,才能用对象名引用对象的域 复制代码 代码如下: public DotLoc(double XX,doub

  • 浅析Java ClassName.this中类名.this关键字的理解

    一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. 关键字this用于指代当前的对象.因此,类内部可以使用this作为前缀引用实例成员: this()代表了调用另一个构造函数,至于调用哪个构造函数根据参数表确定.this()调用只能出现在构造函数的第一行. 当在内部类中使用关键字this,指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名

  • 关于JAVA中this的使用方法小结

    我知道很多朋友都和我一样:在JAVA程序中似乎经常见到"this",自己也偶尔用到它,但是到底"this"该怎么用,却心中无数!很多人一提起它,就说"当前对象",可到底什么是当前对象,是什么当前对象,他自己也不清楚.现在让大家看一个小例子,给你分享一下JAVA中"this"的用法! 复制代码 代码如下: /** * @author fengzhi-neusoft * * 本示例为了说明this的三种用法! */ package

  • Java super和this的对比及使用

    Java super和this的对比及使用 super和this的异同 1)super(参数列表):调用父类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数列表):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 2)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名   super.成员函数据名(实参) this:它代表当前对象名(在程序中易产生二义性之处,应使用t

  • 彻底理解Java中this 关键字

    this关键字再java里面是一个我认为非常不好理解的概念,:)也许是太笨的原因 this 关键字的含义:可为以调用了其方法的那个对象生成相应的句柄. 怎么理解这段话呢? thinking in java里面有这么一个例子 有两个同一个类型的对象,分别叫做a和b,那我们怎样区别在调用方法f()的时候,是谁再调用这个方法呢? 例如: class Banana { void f(int i){ /***方法主体*****/ } } Banana a = new Banana();//生成Banana

  • 解析java中This的用法分析

    用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?呵呵,JAVA提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法.先来个简单的例子: 复制代码 代码如下: public class ThisDemo {      String name="Mick";    public void print(String name){        System

  • java中this的用法示例(关键字this)

    this是指向本身的隐含的指针,简单的说,哪个对象调用this所在的方法,那么this就是哪个对象. 示例代码: TestThis_1.java 复制代码 代码如下: /* 问题:什么是this * 输出结果: * A@4e44ac6a */ public class TestThis_1 {    public static void main(String[] args) {        A aa = new A();        System.out.println(aa.f());

  • java 中的instanceof用法详解及instanceof是什么意思(推荐)

    好,应大家的要求先给大家说下在JAVA程序中instanceof是什么意思 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据. instanceof运算符用法 运算符是双目运算符,左面的操作元是一个对象实例,右面是一个类.当左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false 说明: (1).一个类的实例包括本

  • java中@SuppressWarnings注解用法详解

    SuppressWarnings注解是jse提供的注解.作用是屏蔽一些无关紧要的警告.使开发者能看到一些他们真正关心的警告.从而提高开发者的效率 简介: java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息. 使用: @SuppressWarnings("") @SuppressWarnings({}) @Suppre

  • java中enum的用法

    本文实例讲述了java中enum的用法.分享给大家供大家参考.具体分析如下: 1. 基本用法 复制代码 代码如下: enum Day {     SUNDAY, MONDAY, TUESDAY, WENDSDAY, THURSDAY, FRIDAY, SATURDAY; } 枚举是常量,所以应该用大写. 2. 枚举是对象 枚举隐含地继承了java.lang.Enum,所以它具有java.lang.Enum的属性和方法.遍历枚举: 复制代码 代码如下: public class Main {   

  • Java中的多态用法实例分析

    本文实例讲述了Java中的多态用法.分享给大家供大家参考.具体分析如下: 多态,是面向对象的程序设计语言最核心的特征.封装性.继承性都比较简单,所以这里只对多态做一个小小的笔记... 1.什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对不同的属性和方法.在Java中,多态的实现指的是使用同一个实现接口,以实现不同的对象实例. 例如,我们定义一个Parent类,再定义一个getName()方法返回一个字符串,定义一个形参为Parent类型的成员方法doS

  • 浅析java中stringBuilder的用法

    String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建 Strin

  • java编程scanner类用法示例

    在Eclipse中编写程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了. Scanner类,这是一个用于扫描输入文本的新的实用程序.由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分.于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法.这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析.借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器.

  • 浅析java中static的用法

    static的作用: 1.将对象层级提升为类层级 (即将对象可以调用的,提升为对象和类均可调用的成员):            //推荐使用类来调用   ClassNme.静态成员 (包括变量.方法.成员对象) 2.static修饰的成员,在类加载时即准备完成,而不需要创建对象:   //类加载只做一次: 类名 的时候会类加载; new 对象时会类加载 3.静态成员方法只能访问静态成员,不能访问非静态成员(因为调用该方法时可能还没有创建对象):    而非静态成员方法既能访问非静态成员,又能访问

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • java中stringBuilder的用法详解

    String对象是不可改变的.每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建StringBui

随机推荐