this是什么?
this是java里面的一个关键字,是一种引用类型,在堆(heap)中的每个java对象上都有一个this指向自己。this代表着当前对象的引用。
this可以做什么?
1.可以区分成员变量和局部变量。
例:
/*
创建一个歌手类
*/class Singer{
private String name;
/*
以前在编写set方法时为了将传入参数的名字和成员变量的名字做区分
这两个变量的名字是不一样的
public void setName(String _name){
name = _name;
}
*/ /*
因为this代表当前对象的引用,所以可以使用this.变量名的方式调用成员变量
*/ publicvoidsetName(String name){
//this.name表示的是成员变量,name表示传入的参数 this.name = name;
}
publicStringgetName(){
//return name; return this.name;
}
//还可以使用this.方法名的方式调用当前对象的方法 //下面两种方式都可以调用到m2方法 publicvoidm1(){
this.m2();
m2();
}
publicvoidm2(){
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方法 publicintgetYear(){
return year;
}
publicvoidsetYear(intyear){
this.year = year;
}
publicintgetMonth(){
return month;
}
publicvoidsetMonth(intmonth){
this.month = month;
}
publicintgetDay(){
return day;
}
publicvoidsetDay(intday){
this.day = day;
}
}public class ThisTest01{
publicstaticvoidmain(String[] args){
MyDate md = new MyDate();
System.out.println(md.getYear()+"年"+md.getMonth()+"月"+md.getDay()+"日");
}
}
再谈局部变量和成员变量
先看下面代码:
public class ActorTest01 {
publicstaticvoidmain(String[] args){
Actor a = new Actor();
a.setName("范冰冰");
a.act1();
a.act2();
}
}class Actor{
private String name;
publicvoidact1(){
//定义一个局部变量name String name = "周润发";
System.out.println("name=" + name);//这里打印出来的是局部变量name的值 System.out.println("this.name=" + this.name);
}
publicvoidact2(){
System.out.println("name=" + name);//这里打印的是成员变量name的值 }
publicStringgetName(){
return name;
}
publicvoidsetName(String name){
this.name = name;
}
}
在Java里面,局部变量和成员变量的标识符是可以相同的,如果有相同的标识符,则可以通过this调用成员变量
/*
成员变量:
宽width,高high
成员方法:
setXxx和getXxx
求周长:getLength()
求面积:getArea()
*/class Rectangle {
//宽 private int width;
//高 private int high;
publicRectangle(){} //空参构造 publicRectangle(intwidth,inthigh){
this.width = width; //有参构造 this.high = high;
}
publicvoidsetWidth(intwidth){
this.width = width;
}
publicintgetWidth(){
return width;
}
publicvoidsetHigh(inthigh){
this.high = high;
}
publicintgetHigh(){
return high;
}
//计算周长 publicintgetLength(){
return 2 * (width + high);
}
//计算面积 publicintgetArea(){
return width * high;
}
}public class Rectangle1Test {
publicstaticvoidmain(String[] args){
Rectangle1 r = new Rectangle1(10,20);
System.out.println(r.getLength());
System.out.println(r.getArea());
}
}