this在Java中的必须使用和不推荐使用的情况
在面向对象中this是很常见的,通常是用来指当前对象,以下情况为必须使用this的情况。
1.在setter方法中,参数名和成员变量名相同时,必须使用this加以区分。
示例代码:
2.在某些方法中,由于命名原因造成两个变量名相同,但是作用范围不同,这时同样需要对成员属性添加this进行区分。
示例代码:
3.在容器类和部件类中,部件往往要接受一个容器的引用作为参数,这时我们可以简单的使用this即可。
示例代码:
4.在构造函数中调用另一个构造函数使用this
示例代码:
那么以上情况下是必须使用this的场合,那么场合不适合使用this呢
由于this表示的是类的对象,因此在静态成员变量或方法就无法使用"this.数据域"的形式。
那么不推荐的情况就是在不发生冲突的情况下每个成员属性或方法都使用this.貌似有点不好,因为如果我们有一天需要将某个方法或成员变量改成static,那就麻烦了,必须还要手动去掉"this."。
示例代码:
更多技术文章请访问 http://thinkblog.sinaapp.com
在面向对象中this是很常见的,通常是用来指当前对象,以下情况为必须使用this的情况。
1.在setter方法中,参数名和成员变量名相同时,必须使用this加以区分。
示例代码:
public class Person {
private byte age;
private String sex;
private String name;
public Person(byte age,String sex,String name){
this.age=age;
this.sex=sex;
this.name=name;
}
}
2.在某些方法中,由于命名原因造成两个变量名相同,但是作用范围不同,这时同样需要对成员属性添加this进行区分。
示例代码:
public void printName(){
String name="local name";
System.out.println("local variable value is "+name+"name belongs to Object "+this.name);
}
3.在容器类和部件类中,部件往往要接受一个容器的引用作为参数,这时我们可以简单的使用this即可。
示例代码:
/*
* initialize AdView
*/
private void initAdView(){
//初始化广告视图
AdView adView = new AdView(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
//设置广告出现的位置(悬浮于屏幕右下角)
params.gravity=Gravity.BOTTOM|Gravity.RIGHT;
//将广告视图加入Activity中
addContentView(adView, params);
}
4.在构造函数中调用另一个构造函数使用this
示例代码:
public class Person {
private byte age;
private String sex;
private String name;
public Person(){
System.out.println("persion constructor");
}
public Person(byte age){
this();
this.age=age;
}
public Person(byte age,String sex,String name){
this(age);
this.sex=sex;
this.name=name;
}
}
那么以上情况下是必须使用this的场合,那么场合不适合使用this呢
由于this表示的是类的对象,因此在静态成员变量或方法就无法使用"this.数据域"的形式。
那么不推荐的情况就是在不发生冲突的情况下每个成员属性或方法都使用this.貌似有点不好,因为如果我们有一天需要将某个方法或成员变量改成static,那就麻烦了,必须还要手动去掉"this."。
示例代码:
public class Person {
private byte age;
private String sex;
private String name;
private static String nation="I am from China";
public static void getNation(){
//错误使用
//System.out.println(this.nation);
System.out.print(nation);
}
}
更多技术文章请访问 http://thinkblog.sinaapp.com