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+"在学习");
	}
}

图解:

Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征

构造方法中,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 }
一般人的思维

相关文章:

  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
  • 2022-12-23
  • 2022-02-13
  • 2022-03-05
  • 2021-08-31
猜你喜欢
  • 2022-02-18
  • 2022-02-09
  • 2022-12-23
  • 2022-02-09
  • 2021-11-19
相关资源
相似解决方案