this
this. 在一个类中,充当当前对象的表示
- 可以写在一个类的方法当中,也可以写在构造中,后面跟上“.” 去操作当前对象属性或调用当前对象
- 的任意行为,不受访问修饰符的控制
- this() 在一个类中,允许在一个构造方法当中调用本类的另外一个构造方法,从而达到构造方法的共享
- 1、this()不会产生一个新的对象,只是共享第二个构造体当中的代码
- 2、添加了this()的构造方法,不能形成循环调用或递归的效果
- 3、this()会通过实参和形参的匹配,决定调用本类的哪个构造方法
- 4、this()只能写在构造方法里面且只能是第一句
super:
1、super()——调用父类的指定构造方法
如果父类有多个构造,可以用super()调用指定构造,匹配方式是实参和形参的匹配。
如果子类构造不写,则默认是无参的super(),调用父类无参构造
特点:只能写在构造方法当中,且只能写在第一句
2、super. ——后面跟属性或行为
当super. 后面跟方法时,调用的是父类的该方法
this. 后面跟方法时,调用的是子类的该方法,若子类没有重写,this. 和 super. 效果一样
当super. 后面跟属性时,是调用父类中的属性
this. 后面跟属性,既可以调用继承的父类的,也可以调用自己的,
(只有父类和子类定义了同一个属性,this. 是子类的属性, super. 是父类的属性)
访问子类中的行为和属性,一般用 this 只有一种用super. 即在子类中调用重写前的父类的实现
static
static修饰的属性是全类共享一个。存放在内存数据段的静态区,而且只有一个
1、只有全类共享唯一值的属性,才能用static修饰
2、常量属性定义为static,因为每个对象的值都是一样的,因此没必要每个都存储
3、static修饰符的属性由于与对象无关,所以可以直接使用类名进行访问,不用产生对象,也可以用对象
4、static修饰的属性是在加载期的时候产生,完成初始化
5、static修饰的方法可以直接使用类名进行访问,不用产生对象
6、通常只把工具类的工具方法设为static
7、构造不能用static,因为构造与对象的产生息息相关
但静态方法不能访问本类的非静态属性和非静态方法,甚至不能写this,super。
非静态方法可以访问本类的静态属性和静态方法——加载期会首先加载一个类的静态方法,然后加载非静态方法
静态导包
这估计就是一个比较生冷的知识点了😏。我们见惯了“import”语句,但是你见过“import static”吗?😤要知道它可是在JDK1.5当中就已经被加入的特性。
一般我们导入一个类都用 import 包名.类名的方式;而静态导入是这样的:import static 包名.类名.;这里的多了个static,还有就是类名后面多了个. ,意思是导入这个类里的静态成员。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用类名.方法名的方式来调用。
比如:
在静态导入之前:
public class TestStatic {
public static void main(String[] args) {
int maxVal = Integer.MAX_VALUE;
String hexStr = Integer.toHexString(38));
}
}
在静态导入之后:
import static java.lang.Integer.*;
public class TestStaticImport {
public static void main(String[] args) {
int maxVal = MAX_VALUE;//直接访问Integer的静态属性
String hexStr = toHexString(38));//直接调用Integer的静态方法
}
}
关于静态导包,我们要多说几句话:
必须使用import static, 不能写成static import;
由于缺少前缀,所以遇到同名方法要小心;
虽然少敲了几下键盘,可能损失的是代码的可读性。
⚠️把它作为一个知识点知道就可以了,至于你用不用这种语法,还是……谨慎吧……😊