java面向对象(六) this关键字

this是java中最重要的一个关键字

this的三个作用:表示本类属性,表示本类方法,表示当前对象

1."this.属性"表示本类属性

构造方法的参数的目的是为类中的属性初始化,最好的做法是将构造方法中的参数名称直接命名为属性的名称,但是!为了可以明确地指定要操作的是本类中的属性,就应该采用"this.属性"的形式完成.范例如下:

class Person{
	private String name ;
	private int age ;
	public Person(String name ,int age){
		this.name = name ;
		this.age = age ;
	}//getter,setter略
	public String getInfo(){
		return "姓名:" + this.name + ",年龄:" + this.age ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Person per = new Person("张三",20) ;
		System.out.println(per.getInfo()) ;
	}
}
运行结果:

在以后的开发中,为了避免不必要的bug出现,只要是调用类中属性的情况,都要使用"this.属性"的方式进行表示.

2.调用本类方法

方法主要就是两种:普通方法和构造方法.所以调用本类方法也分为两种形式.

        1.调用本类方法:如果调用的是本类方法,则可以"this.方法()"调用;(范例略)

        2:调用构造方法:在一个构造中要调用其他构造使用"this()"调用;

范例2:

现在一个类中存在三个构造方法,但无论是哪种构造方法,都要求在实例化对象产生的时候输出一行提示信息"一个新的类对象被实例化"(假设这个信息等于50行代码),如下:

class Person{
	private String name ;
	private int age ;
	public Person(){
		System.out.println("********一个新的Person类对象被实例化.") ;
	}
	public Person(String name){
		System.out.println("********一个新的Person类对象被实例化.") ;
		this.name = name ;
	}
	public Person(String name , int age){
		System.out.println("********一个新的Person类对象被实例化.") ;
		this.name = name ;
		this.age = age ;
	}//getter,setter略
	public String getInfo(){
		return "姓名:" + this.name + ",年龄:" + this.age ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Person per = new Person("张三") ;
		System.out.println(per.getInfo()) ;
	}
}
运行结果:


此时,无论调用哪一个构造方法,都可以完成指定的信息输出,那么如果假设将这行输出代码想象为50行代码的两,那么此时程序中将会出现大量的重复代码!!所以此时就可以利用this()来完成.范例3:

class Person{
	private String name ;
	private int age ;
	public Person(){
		System.out.println("*****一个新的Person类对象被实例化") ;
	}
	public Person(String name){
		this() ;
		this.name = name ;
	}
	public Person(String name ,int age){
		this(name) ;
		this.age = age ;
	}
	public String getInfo(){
		return "姓名:" + this.name +",年龄:" + this.age ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Person per = new Person("张三") ;
		System.out.println(per.getInfo()) ;
	}
}
运行结果:


本程序在含有两个参数的构造方法里使用了"this(name)"调用了有一个参数的构造方法,而一个参数的构造方法又使用了"this()"调用了无参构造方法,从而实现了构造方法间的相互调用.

注意:所有的构造方法是在对象实例化时被默认调用的,是在调用普通方法之前被调用的,所以使用"this()"调用构造方法一定要放在构造方法首行!!!

范例4:

编写一个公司员工类,其包括员工号,姓名,薪水,部门,利用构造方法完成设置信息,具体如下:

A,单参,只传递员工号,则员工姓名:无名氏,薪水:0,部门:未定;

B,双参,传递员工号,姓名,则员工薪水为1000,部门:后勤;

C,四参,传递员工号,姓名,部门,薪水;

D,无参,均为空值

使用之前的方式,可以轻松完成时限,但是会存在重复的代码,使用this()语法解决后的代码如下:

class Emp{
	private int empno ;
	private String ename ;
	private double salary ;
	private String dept ;
	public Emp(){

	}
	public Emp(int empno){
		this(empno,"无名氏",0,"未定") ;
	}
	public Emp(int empno, String ename){
		this(empno,ename,1000,"后勤") ;
	}
	public Emp(int empno, String ename, double salary, String dept){
		this.empno = empno ;
		this.ename = ename ;
		this.salary = salary ;
		this.dept = dept ;
	}
	public String getInfo(){
		return "雇员编号:" + this.empno + ",姓名:" + this.ename + ",工资:" + this.salary + ",部门:" + this.dept ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Emp emp = new Emp(12345,"Tom") ;
		System.out.println(emp.getInfo()) ;
	}
}
运行结果:


这种构造的方法可用于不同的构造有一些相同操作的情况下去使用.本程序的出口在四参的构造.

3.this表示当前对象

范例5:

class Demo{
	public void print(){
		System.out.println("面向对象: " + this) ;
	}
}
public class TestDemo{
	public static void main(String args[]){
		Demo demo1 = new Demo() ;
		Demo demo2 = new Demo() ;
		System.out.println(demo1) ;
		demo1.print() ;
		System.out.println("=============") ;
		System.out.println(demo2) ;
		demo2.print() ;
	}
}
运行结果:


由以上程序可以得出如下结论:当前正在调用类中方法的对象为当前对象.同时也可以得出,之前的"this.属性"表示的就是当前对象的属性.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值