没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、引子
(1) this是什么?
(2)什么时候使用this
1.实例方法或构造器中使用当前对象的成员
2. 同一个类中构造器互相调用
二、探讨
(1)问题
(2)解决
三、this关键字
(1)this调用属性和方法
方法内
构造器内
(2)this调用构造器
四、总结
五、练习
(1)练习1
(2)练习2
一、引子
(1) this是什么?
在Java中,this关键字不算难理解,它的作用和其词义很接近。
它在方法(准确的说是实例方法或非static的方法)内部使用,表示调用该方法的对
象
它在构造器内部使用,表示该构造器正在初始化的对象。
this可以调用的结构:成员变量、方法和构造器
(2)什么时候使用this
1.实例方法或构造器中使用当前对象的成员
在实例方法或构造器中,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序
的可读性。不过,通常我们都习惯省略this。
但是,当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表
明该变量是类的成员变量。即:我们可以用this来区分 成员变量 和 局部变量 。比如:
另外,使用this访问属性和方法时,如果在本类中未找到,会从父类中查找。这个在继承中会讲
到。
2. 同一个类中构造器互相调用
this可以作为一个类中构造器相互调用的特殊格式。
this() :调用本类的无参构造器
this(实参列表) :调用本类的有参构造器
注意:
不能出现递归调用。比如,调用自身构造器。
推论:如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了" this(形
参列表) "
this() 和 this(实参列表) 只能声明在构造器首行。
推论:在类的一个构造器中,最多只能声明一个" this(参数列表) "
二、探讨
(1)问题
目前可能出现的问题?及解决方案?
我们在声明一个属性对应的 setXxx 方法时,通过形参给对应的属性赋值。如果形参名和属性名同
名了,那么该如何在方法内区分这两个变量呢?
解决方案:使用this。具体来讲,使用this修饰的变量,表示的是属性。没有用this修饰的,表示的
是形参。
【举例】
看下面的代码:
public class PersonTest {
}
class Person{
//属性
String name;
int age;
//方法
public void setAge(int a){
age=a;
}
}
以往,写方法的时候,刻意将形参名与属性名避开了:
可以进一步在main方法里面输出看一下结果:
输出:
我们知道,定义变量的时候,变量名其实是一个标识符,定义标识符要求“见名知意”。但是这里的
形参a与age没什么联系。
构造器里面也一样,这样写过于抽象,如下:
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person();
p1.setAge(10);
System.out.println(p1.age);
}
}
class Person{
//属性
String name;
int age;
//方法
public void setAge(int a){
age=a;
}
}
class Person{
//属性
String name;
int age;
String email;
//构造器
public Person(){
}
public Person(String n,String a){
这里鼓励大家,把形参名写的与属性名一致。这样更加明了,不会变得很抽象。
但是这样来写又出问题了:(注意看方法)
可以看到,setAge方法里面得age分不清是什么了,是形参还是属性?
这里有一个就近原则,setAge方法里面的age都是形参。
运行结果可以看到并没有赋上值:
(2)解决
解决方法很简单,只需要在想表示为属性的变量前面加上 this. 即可。
就像这样:
name=n;
email=e;
}
//方法
public void setAge(int a){
age=a;
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person();
p1.setAge(10);
System.out.println(p1.age);
}
}
class Person{
//属性
String name;
int age;
//方法
public void setAge(int age){
age=age;
}
}
//方法
public void setAge(int age){
this.age=age;
}
再次调用一下试试:
结果赋上值了:
上面的场景下,this属于必须要用的。(区分属性和形参)
如果要写get方法:
这里的 getAge 方法并没有形参,所以下面的 this.age 的 this. 可加可不加, age 肯定是属性。
但是刚才的 setAge 方法里面, this. 是必须要加上的,因为有了形参,加上this以示区分形参与属
性。
再看这段代码:
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person();
p1.setAge(10);
System.out.println(p1.age);
}
}
class Person{
//属性
String name;
int age;
//方法
public void setAge(int age){
this.age=age;
}
}
public int getAge(){
return this.age;
}
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person();
p1.setAge(10);
System.out.println(p1.age);
}
}
class Person{
//属性
String name;
int age;
//方法
public void setAge(int age){
this.age=age;
剩余31页未读,继续阅读
资源评论
雨翼轻尘
- 粉丝: 6w+
- 资源: 130
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功