您的位置:首页 > 其它

this和super的总结 static的总结

2020-08-17 22:24 105 查看

1、this和super的总结;
this关键字只能用于方法的方法内,表示对“调用方法的那个对象”的引用。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的引用,这个引用的名字就是this。
super关键字有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类的成员变量或方法名优先级高,所以子类的同名成员变量或方法就隐藏了父类的成员变量或方法,如果想要使用父类中的成员变量或方法,就需要用到super,总之super关键字用于指代父类。

super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

要记住的几个关键点是:在构造方法中this与super不能共存;其次有this或super出现的地方必须是构造方法的第1句;静态方法,也就是类方法中不能有this和super关键字,唯一可共存的是在实例方法中,因为不要求this或super语句是第1句。
看下面这个很经典的例子(由于很有教学意义所以就直接从网上复制过来):

class Person {

public static void prt(String s) {
System.out.println(s);
}

Person() {
prt("A Person.");
}//构造方法(1)

Person(String name) {
prt("A person name is:" + name);
}//构造方法(2)

}

public class Chinese extends Person {

Chinese() {
super(); // 调用父类构造方法(1)
prt("A chinese.");// (4)
}
Chinese(String name) {
super(name);// 调用父类具有相同形参的构造方法(2)
prt("his name is:" + name);
}
Chinese(String name, int age) {
this(name);// 调用具有相同形参的构造方法(3)
prt("his age is:" + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("kevin");
cn = new Chinese("kevin", 22);
}

}
执行结果为:
A Person.
A chinese.
A person name is:kevin
his name is:kevin
A person name is:kevin
his name is:kevin
his age is:22
总结:
1)super(参数):调用父类的构造方法 。
2)this(参数):调用本类的其他构造方法。
3)都必须放在构造方法的第一行。
3)super:引用父类中的成员,当子类和父类中的方法重名时,这样用。
4)this:代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)。
5)this()和super()都指的是对象,所以,均不能在static环境中使用。包括:static变量,static方法,static语句块。
2、static的总结
凡是用static修饰的两大特性:
1、与类相关,与对象无关;
2、一定在加载期有特殊动作。
属性:
全类共享唯一值;没有存放在对象身上;
在加载期即声明变量产生在数据段的静态区当中;
类名.属性名;—> 对象名.属性名
构造:
不能使用static,因为构造与对象的产生息息相关。
行为:
静态方法不能调用非静态的属性或行为,甚至静态方法里面
不能写this或super;
静态方法在加载期会先于非静态方法优先加载;
语境:
什么时候设计静态属性?
常量属性;
全类共享唯一值的变量属性 — 很少
什么时候设计静态方法?
工具类的工具方法;— 好好体会什么是工具!
调用该方法只是完成一个功能,与用哪个对象去调用无关,
也不会改变调用对象的状态值。
举例:学生帮老师买烟的行为。

1、只有全类(不管多少个对象)共享唯一值的属性,我们才能定义成
static修饰的;
2、常量属性不用动脑袋,直接定义为static的;
由于常量值是不可更改,每个对象的这个值都是一样的,没有必要
在每个对象身上存储一份,设计为static,全类共享即可;
3、static修饰的属性可以直接使用"类名."的方式访问,当然也可以用
"对象."的方式;但是非static修饰的属性,只能用"对象."的方式
访问;

构造方法不能使用static关键字进行修饰
构造方式的作用是产生对象,所以与对象密切相关,
不符合static的特性。

1、用static修饰的方法可以直接用"类名."的方式访问,当然也可以用
"对象."的方式访问;
2、静态方法不能访问本类的非静态属性,当然也不能调用本类的其他非静态方法;
非静态方法可以访问本类的静态属性,或调用本类的静态方法;
3、在加载期,会首先加载一个类的静态方法,然后再加载非静态方法;
4、通常我们只把工具类的工具方法设计为static的。
什么是工具类的工具方法呢?
该方法的调用与对象无关,或是不改变执行对象的状态属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: