this关键字
2019-02-03 本文已影响47人
张轻舟
this是什么?
this是java里面的一个关键字,是一种引用类型,在堆(heap)中的每个java对象上都有一个this指向自己。this代表着当前对象的引用。
this可以做什么?
1.可以区分成员变量和局部变量。
例:
/*
创建一个歌手类
*/
class Singer{
private String name;
/*
以前在编写set方法时为了将传入参数的名字和成员变量的名字做区分
这两个变量的名字是不一样的
public void setName(String _name){
name = _name;
}
*/
/*
因为this代表当前对象的引用,所以可以使用this.变量名的方式调用成员变量
*/
public void setName(String name){
//this.name表示的是成员变量,name表示传入的参数
this.name = name;
}
public String getName(){
//return name;
return this.name;
}
//还可以使用this.方法名的方式调用当前对象的方法
//下面两种方式都可以调用到m2方法
public void m1(){
this.m2();
m2();
}
public void m2(){
System.out.println("TESTING");
}
}
2.可以调用构造方法
语法:this(实参);
注意:如果要是使用this调用构造方法的话,那么this必须出现在构造方法的第一行。
例:
/*
定义一个日期类
*/
class MyDate{
//年
private int year;
//月
private int month;
//日
private int day;
//构造方法
//需求:在创建日期对象的时候,默认的日期是:1970-1-1
MyDate(){
//通过this调用有参的构造方法
this(1970,1,1);//必须出现在第一行,否则将编译报错
//构造方法不能这样调用
//MyDate(1970,1,1);Error
}
//构造方法
MyDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
//set和get方法
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
public class ThisTest01{
public static void main(String[] args){
MyDate md = new MyDate();
System.out.println(md.getYear()+"年"+md.getMonth()+"月"+md.getDay()+"日");
}
}
再谈局部变量和成员变量
先看下面代码:
public class ActorTest01 {
public static void main(String[] args){
Actor a = new Actor();
a.setName("范冰冰");
a.act1();
a.act2();
}
}
class Actor{
private String name;
public void act1(){
//定义一个局部变量name
String name = "周润发";
System.out.println("name=" + name);//这里打印出来的是局部变量name的值
System.out.println("this.name=" + this.name);
}
public void act2(){
System.out.println("name=" + name);//这里打印的是成员变量name的值
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在Java里面,局部变量和成员变量的标识符是可以相同的,如果有相同的标识符,则可以通过this调用成员变量
小练习
写一个长方形类,里面提供计算周长和面积的方法
答案
/*
成员变量:
宽width,高high
成员方法:
setXxx和getXxx
求周长:getLength()
求面积:getArea()
*/
class Rectangle {
//宽
private int width;
//高
private int high;
public Rectangle(){} //空参构造
public Rectangle(int width,int high) {
this.width = width; //有参构造
this.high = high;
}
public void setWidth(int width) {
this.width = width;
}
public int getWidth() {
return width;
}
public void setHigh(int high) {
this.high = high;
}
public int getHigh() {
return high;
}
//计算周长
public int getLength() {
return 2 * (width + high);
}
//计算面积
public int getArea() {
return width * high;
}
}
public class Rectangle1Test {
public static void main(String[] args) {
Rectangle1 r = new Rectangle1(10,20);
System.out.println(r.getLength());
System.out.println(r.getArea());
}
}