目录
1.this关键字
2.static关键字
容易混淆的问题
1.this关键字
一个对象一个this。this是一个变量,是一个关键字,是一个引用。this保存当前对象的内存地址,指向自身。所以,严格意义上来说,this代表的就是“当前对象”,this存储在堆内存当中对象的内部。
1.this修饰成员变量,表示直接去类中找同名变量
例如:在下面这个代码的有参构造方法中,本意是想给成员变量赋值,可是却根本没有调用到类中的成员变量
要在方法中明确调用类中的成员变量,只需要加上this关键字即可。
2.this修饰方法
①this修饰成员方法,表示直接从当前类中寻找同名方法
语法:this.方法名称(参数)
举例:
②this修饰构造方法
语法:this(参数)表示调用构造方法
三大要求:
a.this调用构造方法只能在构造方法中使用,不能在成员方法中使用。
b.this调用其它构造方法必须卸载当前构造方法的首行
c.this调用必须是线性的,不能成环
举例:
若是实例化对象:Cat cat=new Cat("喵喵","母",1)
则会调用三个参数的构造方法,此方法又会调用两个参数的构造方法,这个方法又会调用无参构造。就形成了环,程序永远无法终止。
2.static关键字
static修饰的属性/方法都称为类的静态域,静态域没有该类的对象就能访问,直接通过类名称来访问。
1.static修饰属性,则该属性为静态变量,直接通过类名称来调用,存储在JVM的方法区,该类的所有对象共享此变量。(只要有一个对象改变了该属性,对其它对象都是可见的)
类中的有些属性是类本身所具备的属性,和具体的某个对象无关,该类中的所有对象这个属性值都是相同的。这个属性就用static修饰。
例如:中国的所有人员国籍这个属性都是相同的,都是中国。
注意:
a.static变量只存在于类中,方法中不能定义静态变量
b.静态属性直接通过类名称来访问,没有任何该类对象,这个属性也是存在的
c.静态变量存储在JVM的方法区,所有该类对象共享
这里定义了一个Japanese类,定义了一个静态成员变量country(国籍)。在main()方法中实例化一个Japanese对象,即j1和j2。
当Japanese类加载到JVM内存之中,静态方法就会在方法去初始化并存储。
2.static修饰的方法称为类方法/静态方法,和具体对象无关,通过类名称直接访问。
语法:类名称.静态方法名称()
举例:
容易混淆的问题
1.能否用static修饰一个类?
答:不能。类定义出来是为了产生对象,而static修饰的东西不需要对象也能访问,自相矛盾了。
2.在静态方法中能否访问成员域?
答:不能。成员域有对象才能访问,而静态方法中不需要对象。
3.在成员域中能否访问静态域?
答:可以。成员域中一定有对象,而静态方法无论有没有对象都可以访问。
4.能否在静态方法中使用this关键字?
答:this关键字修饰的是当前对象的属性或者方法,this是成员域的一部分。在静态域中不能出现this关键字。