Java关键字使用—this、super、static、final
文章目录
一、this关键字
1.this概述
this是java语言中的一个关键字,下图为this的内存图。
this可以看做一个变量,它是一个引用,存储在Java虚拟机堆内存的对象内部,this这个引用保存了当前对象的内存地址指向自身,任何一个堆内存的java对象都有一个this,也就是说创建100个java对象则分别对应100this。
this指当前对象,可以使用在实例方法中以及构造方法中,语法格式分别为this.和this(…)。
this不能出现带有static的方法中,因为带有static的方法是随着类的加载而加载,先于对象的创建。可以出现在实例方法中,代表当前对象,大部分情况下this可以省略,只有当实例方法中局部变量与成员变量重名时不能省略。
2.this使用在构造方法中
this还有另一种用法,使用在构造方法的第一行(规定只能出现在第一行),通过当前构造方法调用本类当中其他的构造方法,其目的是为了代码复用。
调用格式:
this(实际参数列表)
举例:
//无参构造
public Date(){
this.year=1997;
this.month=12;
this.day=24;
}
//有参构造
public Date(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
我们可以发现无参构造方法中的代码和有参构造方法中的代码是一样的,代码没有得到复用,这个时候就可以在无参构造中使用this(实际参数列表),来调用有参构造方法,让代码得到复用。
public Date(){
//注意this()语法只能出现在构造方法的第一行!!
this(1997,12,24);
}
public Date(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
二、super关键字
1.super概述
super其实并不是一个引用,只是一个关键字,super代表了当前对象中从父类继承过来的那部分特征。
- super和this都可以使用在实例方法中
- super不能使用在静态方法中,因为super代表了当前对象上的父类型特征,静态方法中都不存在this,肯定不能使用super。
- 子类重新定义了父类的同名实例变量或同名实例方法,如果想在子类中访问父类的实例变量,super不能省。
2.super使用在构造方法中
super(实际参数列表)
表示子类构造方法执行过程中调用了父类的构造方法。
它与this(实际参数列表)都是只允许出现在构造方法第一行,所以这两行代码是无法共存的。
如果子类构造方法中没有显示写super()或super(实参列表),那么默认有super()。
3.this与super本质区别
this指向当前对象,而严格意义上super并不指向任何对象,只是代表当前对象中的那部分父类的特征。
三、static关键字
1.static概述
static是java语言中的关键字,可以修饰变量、方法、代码块。被修饰的变量叫静态变量,被修饰的方法叫静态方法,被修饰的代码块叫静态代码块。
在java语言中凡是被static修饰的都是类相关的,不需要创建对象,直接通过“类名”即可访问,即便使用“引用”去访问,在运行的时候也和堆内存当中的对象无关。
2.静态变量
java中的变量分为:局部变量和成员变量。成员变量又分为静态变量(被static修饰)和实例变量(没有static修饰)。关于其三者的局别与联系,可以参考本人的另一篇博客,有详细的讲解。局部变量、静态变量、实例变量
3.静态代码块
- 语法格式:
类{
//静态代码块
static{
java语句;
}
}
- 使用场景
静态代码块在类加载时执行,并且只执行一次。静态代码块实际上是java语言为程序员准备的一个特殊的时刻,这个时刻就是类加载的时刻,如果你想在类加载的时候执行一段代码,那么就可以使用静态代码块。
4.静态方法
首先我们明确方法实际上是行为动作,当我们认为该动作在触发的时候需要对象的参与,这个方法应该定义为实例方法。
当该动作触发时不需要对象的参与,我们就可以将其定义为静态方法,这样比较方便调用,不需要创建对象,直接使用类名就可以访问。在实际开发中,“工具类”当中的方法一般定义为静态方法。
四.final关键字
用法:
(1)修饰类(包括外部类、内部类)
表示这个类不能被继承,没有子类
提高安全性,提高程序的可读性。
(2)修饰方法
表示这个方法不能被重写
(3)修饰变量(成员变量(类变量、实例变量),局部变量)
即称为常量 ,表示这个变量的值不能被修改
(4)修饰引用数据类型,表示地址值不能修改。
注意:如果某个成员变量用final修饰后,也得手动赋值,而且这个值一旦赋完,就不能修改了,即没有set方法。
本文地址:https://blog.csdn.net/m0_46988935/article/details/110223193
下一篇: 专宠后宫的万贵妃,真的是心肠歹毒的人吗?