面向对象(this关键字)-第11天
来源:互联网 发布:mac 从远程拷贝文件夹 编辑:程序博客网 时间:2024/06/08 13:42
面向对象(this关键字)
1、面向对象(this关键字)
class Person
{
private String name;
private int age;
private Person(Stringn)//构造函数私有化
{
name=n;
}
Person(String n,int a)
{
name=n;
age=a;
}
public void speak();
{
system.out.println("name="+name+"...age"+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi"); //打印错误。Person函数被本地私有化了。对象找不到值。
}
class Person
{
private String name;//这个name是成员变量
private int age;
Person(String name)//当局部也定义了name
{
name=name;//那么这两个name都是局部的name。即局部name=局部name
}
Person(String n,int a)
{
name=n;
age=a;
}
public void speak();
{
system.out.println("name="+name+"...age="+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi");//此时name=lisi是局部变量。
p.speak();//打印name=null...age=0。为什么不是name=lisi???打印的时候是打印的成员变量name,没有赋初值,默认初始化值为null。
}
}
把name改成n
class Person
{
private String name;
private int age;
Person(String n)
{
name=n;//这时局部没有定义name,那么返回到成员变量中找name
}
Person(String n,int a)
{
name=n;
age=a;
}
public void speak();
{
system.out.println("name="+name+"...age="+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi");
p.speak();//打印name=lisi...age=0
}
}
用this:看上去,是用于区分局部变量和成员变量同名的情况。
this为什么可以解决这个问题?
this到底代表的是什么呢?
this:就代表本类的对象。(成员变量)
class Person
{
private String name;
private int age;
Person(String name)//当局部定义了name
{
this.ame=name;//那么这时,类变量(成员变量)this.name=局部name
}
Person(String n,int a)
{
name=n;
age=a;
}
public void speak();
{
system.out.println("name="+name+"...age="+age);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi");
p.speak();//打印name=lisi...age=0
}
}
this代表它所在函数所属对象的引用
简单说,那个对象在调用this所在的函数,this就代表哪个对象。
class Person
{
private String name;
private int age;
Person(String name)
{
this.name=name;//局部name,赋给成员name
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void speak();
{
system.out.println("name="+this.name+"...age="+this.age);
this.show();//可以省略成show();
}
public void show()
{
system.out.println(this.name);
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi"); //第一次用时,this.name代表p.name
Person p1=new Person("zhangsan");//第二次用时,this.name代表p1.name
p.speak();//打印name=lisi...age=0 lisi
p1.speak();//打印name=zhangsan...age=0 zhangsan
}
}
2、面向对象(this关键字的应用)
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象
但凡本类功能内部使用到了本类对象,都用this表示。
//需求:给人定义一个用于比较年龄是否相同的功能。也就是是否是同龄人。
class Person
{
private String name;
private int age;
Person(int age)//多建立一个age年龄函数。
{
this.age=age;
}
Person(String name)
{
this.ame=name;
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void speak();
{
system.out.println("name="+this.name+"...age="+this.age);
this.show();
}
public void show()
{
system.out.println(this.name);
}
//public boolean compare(int age)传一个人。这样传是错的。
public boolean compare(Person p)//这样才是传人。!!!
{
if(this.age==age)// 对p1.compare(p2);所以这时p1引用的this.age代表的是p1.age。后面的age代表的是p2.age
return true;
else
return false;//这里可以简化。
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(20);//此时p1.age=20;
Person p2=new Person(25);//然后p2.age=25
boolean b=p1.compare(p2);//p1.compare(p2)对应p1和p2做比较对应p1.age==p2.age;。compare(p2)说明是接受了p2。p1.compare(p2)说明调用的是p1,故this代表的是p1的值。返回的是布尔值。
system.out.println(b);
}
简化版-程序员版的。!!!
class Person
{
private String name;
private int age;
Person(int age)//多建立一个age函数。
{
this.age=age;
}
Person(String name)
{
this.ame=name;
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void speak();
{
system.out.println("name="+this.name+"...age="+this.age);
this.show();
}
public void show()
{
system.out.println(this.name);
}
//public boolean compare(int age)传一个人。这样传是错的。
public boolean compare(Person p)//这样才是传人。
{
return this.age==p.age;//简化的版本。!!!对应p1.age==p2.age;
}
class PersonDemo
{
public static void main(string[] args)
{
Person p1=new Person(20);
Person p2=new Person(25);
boolean b=p1.compare(p2);//p1.compare(p2)对应p1和p2做比较对应p1.age==p2.age;。compare(p2)说明是接受p2。p1.compare(p2)说明调用的是p1。。返回的是布尔值。
system.out.println(b);
}
3、面向对象(this关键字在构造函数间调用)
this语句:用于构造函数之间进行互相调用。(只能用this语句)
class Person
{
private String name;
private int age;
Person(String name)//this(name)=p.name调用到了这个函数
{
this.ame=name;
}
Person(String name,int age)
{
//this.name=name;用下面这个代替。
//Person(name);错误,构造函数中不可以这样写的。
this(name);//this()带括号的是语句。this(name)代表的是p.name,这样就调用到了Person(String name)
this.age=age;
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi",30);
Person p1=new Person("lisi1",36);
}
this()语句只能放在构造函数的第一行。
class Person
{
private String name;
private int age;
Person()
{
}
Person(String name)
{
this.name=name;
}
Person(String name,int age)
{
this.age=age;
this(name);//语句执行报错。 必需要第一句使用。
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi",30);
}
class Person
{
private String name;
private int age;
Person()
{
}
Person(String name)
{
this.name="haha";
}
Person(String name,int age)
{
this.name=name;//执行lisi。
this(name);//执行haha。调用上面的Person(String name)语句。lisi变成了haha
this.age=age;
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi",30);
}
this()语句只能定义在构造函数的第一行,因为初始化要先执行。
class Person
{
private String name;
private int age;
Person()
{
}
Person(String name)
{
this.name="haha";
}
Person(String name,int age)
{
//这就是为什么this在构造函数间要放在首行的位置。
this(name);//执行lisi。同时传给Person(String name)。this.name由haha变成lisi。
this.name=name;//重新在赋值一次lisi。
this.age=age;
}
}
class PersonDemo
{
public static void main(string[] args)
{
Person p=new Person("lisi",30);
}
class Person
{
private String name;
private int age;
Person()//第一步:初始化时调用Person()
{
this("hah");//this调用到Person(String name)
}
Person(String name)//第二步:初始化时调用Person(String name)
{
this();//this调用到Person()。又回到了第一步。变成了一个死循环。
this.name=name;
}
Person(String name,int age)
{
this.age=age;
}
}
class PersonDemo
{
public static void main(string[] args)
{
new Person();
}
总结:this的
第1个用法:用于区分同名变量的情况。成员变量和局部变量的区别。
第2个用法:用于构造函数间调用。一般函数不能直接调用构造函数的。this不能用在一般语句中。 this只能用在构造函数间。
- 面向对象(this关键字)-第11天
- 面向对象 this关键字
- 面向对象this关键字
- 面向对象--this关键字
- Java基础视频教程第05天_面向对象入门及this关键字
- Java学习第6天:面向对象(6)this关键字
- php 面向对象 this 关键字
- javaSE-面向对象-this关键字
- 面向对象—this关键字
- java面向对象-this关键字
- 黑马程序员——>第五天<面向对象(匿名对象-封装-构造代码块-this关键字)>
- 学习日志,面向对象第一天(类和对象、封装、this关键字)
- 黑马程序员——第5天——(面向对象)构造函数,构造代码块,this关键字
- 九 java面向对象程序设计(this关键字)
- (5)面向对象,封装&this关键字
- 黑马程序员---面向对象:this关键字
- java面向对象(六) this关键字
- 面向对象之:this和super关键字
- php中abstract与interface的区别
- android中Http和HttpClient的Get和Post方法的使用
- hdoj 3639 Hawk-and-Chicken 【有向图SCC】【缩点后反向建图 求最大传递值】
- iOS到Android到底有多远
- HDU 1205 吃糖果
- 面向对象(this关键字)-第11天
- Service
- 学习OpenGL好地址。
- 自定义UITableViewCell(2) 多个自定义cell
- HBase1.0以上版本的API改变
- Linux学习笔记---目录处理命令---删除文件或目录
- 关于使用openfiler作为共享存储来安装rac时的问题
- Java Servlet完全教程
- Chapter 16 notification iOS 8 -Swift Programming cookBook 读书笔记