this
赵本山问奥尼尔:“我的爸爸的爸爸是谁?”
奥尼尔:“不知道”
赵本山:“你傻啊,是我爷爷”
奥尼尔回去问科比:“我的爸爸的爸爸是谁?”
科比:“不知道”
奥尼尔:”你傻啊,是赵本山的爷爷“
就像这个笑话一样,不同的人,用this时,指向的对象也是变的。
普通方法中,this总是指向调用该方法的对象
//this在成员方法中的用处
//this就是指代当前对象,是一个隐式参数
public class thissss
{
public static void main(String []args)
{
Student s1 = new Student();
s1.name = "小白";
s1.age = 17;
s1.study();
System.out.println(s1.name);
Student s2 = new Student();
s2.name = "小徐";
s2.age = 18;
s2.study();
}
}
class Student
{
int age;
String name;
public void study()
//在创建成员方法(函数)的时候会自动传一个this参数,指向该对象的地址,但是是隐藏的
{
this.name = "小黑";
//s1.name = "小黑";
//这条语句是错误的,因为对象要在类创建完成之后才有
//但是使用this.name就可以给类进行赋值
//因为this指向创建的对象的地址,所以this.name就会找到该对象中study()方法的地址
//对这个地址进行操纵,总而更改当前对象的值
System.out.println(name+"在学习");
}
}
图解:
构造方法中,this总是指向正要初始化的对象
//this在构造方法中的用处
//用来指向正在初始化的对象
public class thissss2
{
public static void main(String []args)
{
Student s1 = new Student(17);
System.out.println(s1.age);
Student s2 = new Student(18);
}
}
class Student
{
int age;
String name;
public Student(int age)
{
//age = age
//直接写age指代的是public void Student(String name,int age)传进来的name,就近原则
//this.age指代的是当前正在初始化的对象中的String age;
this.age = age;
}
}
输出结果:
age = age时,输出的是0,并非是正常的结果
this.age = age时,输出的是正常的结果17
原因也是因为会默认传一个this参数,用来指向当前使用这条命令的对象的地址,这样就可以正确的初始化当前对象中成员变量的值了
注意:this不能用于static方法(学了static方法就知道为什么了)
变量的种类
实例变量、类变量、常量都是属于成员变量的,成员变量又被称为全局变量
public class A{
String id; //实例变量
private String Tel; //实例变量
private int size; //实例变量
private static String depart; //类变量
final String design="样式"; //常量
}
/*其中实例变量、类变量、常量都是属于成员变量的,成员变量又被称为全局变量,
成员变量的范围比实例变量更宽泛 */
方法(函数)的种类
实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。
静态变量 / 类变量
提问:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在有多少人在玩呢?请使用面向对象的思想,编程解决。
1 public class Demo1 2 { 3 public static void main(String []args) 4 { 5 int total = 0; 6 Child ch1 = new child(3,"小徐"); 7 ch1.joinGame(); 8 total++; 9 10 Child ch2 = new child(4,"小白"); 11 ch2.joinGame(); 12 total++; 13 //查看总人数的时候,只需要输入total的值就可以了 14 //但是要求是使用面向对象的方法,课时这个total并没有封装到对象中去 15 } 16 } 17 18 //定义kid类 19 class Child 20 { 21 int age; 22 String name; 23 public Child(int age,String name) 24 { 25 this.age = age; 26 this.name = name; 27 } 28 public void joinGame() 29 { 30 System.out.println("有一个小孩加入了"); 31 } 32 }