this关键字的三种用法和举例

一、java中this关键字的三个用法

(1) this调用本类中的属性,也就是类中的成员变量;
(2) this调用本类中的其他方法;
(3) this调用本类中的其他构造方法,调用时要放在构造方法的首行。

1、this.属性名

当局部变量与全局变量同名时,总是指向局部的变量(就近原则)。若要指向全局变量,就用 this.属性名 指向成员变量。
若不同名无冲突,则可以省略this。

public class Teacher {
    private String name;    
    private double salary;    
    private int age;  
   
// 创建构造方法,为上面的3个属性赋初始值
	public Teacher(String name,double salary,int age) {  //形参与成员量冲突
	    this.name = name;    
	    this.salary = salary;    
	    this.age = age;    
	}
}

2、this.方法名

让类中一个方法,访问该类里的另一个方法或实例变量。

/**
 * 第一种定义Dog类方法
 **/
public class Dog {
    // 定义一个jump()方法
    public void jump() {
        System.out.println("正在执行jump方法");
    }
    // 定义一个run()方法,run()方法需要借助jump()方法
    public void run() {
        Dog d = new Dog();
        d.jump();
        System.out.println("正在执行 run 方法");
    }
}

在上面的程序中,一共产生了两个 Dog 对象,在 Dog 类的 run( ) 方法中,程序创建了一个 Dog 对象,并使用名为 d 的引用变量来指向该 Dog 对象。

下面我们思考两个问题。
1)在 run( ) 方法中调用 jump( ) 方法时是否一定需要一个 Dog 对象?

答案是肯定的,因为没有使用 static 修饰的成员变量和方法都必须使用对象来调用。

2)是否一定需要重新创建一个 Dog 对象?

不一定,因为当程序调用 run( ) 方法时,一定会提供一个 Dog 对象,这样就可以直接使用这个已经存在的 Dog 对象,而无须重新创建新的 Dog 对象了。因此需要在 run() 方法中获得调用该方法的对象,通过 this 关键字就可以满足这个要求。

this 可以代表任何对象,当 this 出现在某个方法体中时,它所代表的对象是不确定的,但它的类型是确定的,它所代表的只能是当前类的实例。只有当这个方法被调用时,它所代表的对象才被确定下来,谁在调用这个方法,this 就代表谁。

将前面的 Dog 类的 run( ) 方法改为如下形式会更加合适,run( ) 方法代码修改如下,其它代码不变。

**
 * 第二种定义Dog类方法
 **/
// 定义一个run()方法,run()方法需要借助jump()方法
public void run() {
    // 使用this引用调用run()方法的对象
    this.jump();
    System.out.println("正在执行run方法");
}

从第一种 Dog 类定义来看,在 Dog 对象的 run( ) 方法内重新创建了一个新的 Dog 对象,并调用它的 jump( ) 方法,这意味着一个 Dog 对象的 run( ) 方法需要依赖于另一个 Dog 对象的 jump( ) 方法,这不符合逻辑。

第二种 Dog 类定义是当一个 Dog 对象调用 run( ) 方法时,run( ) 方法需要依赖它自己的 jump( ) 方法,与第一种定义类的方法相比,更符合实际情形。

在现实世界里,对象的一个方法依赖于另一个方法的情形很常见,例如,吃饭方法依赖于拿筷子方法,写程序方法依赖于敲键盘方法。这种依赖都是同一个对象两个方法之间的依赖。因此,Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。也就是说,将上面的 run( ) 方法改为如下形式也完全正确。

通常,一个方法访问该类中定义的其他方法、成员变量时,可省略 this

注意:static 修饰的方法中不能使用 this静态成员不能直接访问非静态成员。 static 修饰的方法而言,可以使用类来直接调用该方法.

3、this( ) 用于访问构造方法

调用本类中的其他构造方法,调用时要放在构造方法的首行。

public class Student {
    String name;
    // 1 无参构造方法
    public Student() {
        this("张三");  //调用了构造方法2
    }
    // 2 有参构造方法
    public Student(String name) {
        this.name = name;
    }
    // 输出name和age
    public void print() {
        System.out.println("姓名:" + name);
    }
    public static void main(String[] args) {
        Student stu = new Student();
        stu.print();
    }
}

注意:

  • this( ) 不能在普通方法中使用,只能写在构造方法中。
  • 在构造方法中使用时,必须是第一条语句。

原文链接:http://c.biancheng.net/view/953.html

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,this和super都是关键字,分别表示当前对象和父类对象。它们的使用方法如下: 1. this关键字 this关键字表示当前对象,它可以在类的方法中使用。一般用于区分成员变量和局部变量之间的区别,或者在一个方法中调用该类的另一个构造方法。 举个例子,假设有以下代码: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void printInfo() { System.out.println("Name: " + this.name); System.out.println("Age: " + this.age); } } ``` 在printInfo方法中,我们使用了this关键字来表示当前对象,即Person对象。这样就可以访问到该对象的成员变量name和age。 2. super关键字 super关键字表示父类对象,它可以在子类中使用。一般用于在子类中调用父类的构造方法或者访问父类的成员变量和方法。 举个例子,假设有以下代码: ``` public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println("Animal eating..."); } } public class Dog extends Animal { private String breed; public Dog(String name, String breed) { super(name); this.breed = breed; } public void bark() { System.out.println("Dog barking..."); } } ``` 在Dog类的构造方法中,我们使用了super关键字来调用父类Animal的构造方法,从而初始化了父类的成员变量name。另外,在Dog类中,我们也可以通过super关键字来访问父类Animal的成员方法和成员变量。例如,在bark方法中,我们可以这样调用父类的eat方法: ``` public void bark() { super.eat(); System.out.println("Dog barking..."); } ``` 这样就会先调用父类的eat方法,然后再输出Dog barking...。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值