this、static、static和super关键字的详细解释

this

核心就一点,需不需要对象的参与,如果有对象参与,就不能声明为static关键字。
this是一个引用,this是一个变量。this变量中保存了内存地址指向了自身this存储在jvm堆内存java对象的内部。谁调this,this就是谁

当一个行为/动作的执行过程中需要对象参与,那么这个方法一定要定义为实例方法,不能带static修饰。

1、static修饰的变量,执行过程不需要对象。因此static中不能使用this。

2、用来区分局部变量和实例变量的时候this不能省略;

3、this可以使用在实例方法中,代表的是当前对象【this.】

4、this可以使用在构造方法中,通过当前的构造方法调用其他的构造方法【this(实参)】----该语句只能出现在构造方法的第一行;

在这里插入图片描述

static

1.所有中国人的国家都是“Chinese”,这样的变量没必要定义为实例变量,需要使用static修饰。

2.静态变量在类加载的初始化,不需要创建对象,内存就开辟了。

3.静态变量存储在方法区中;

4.什么时候声明为今静态变量呢?所有的对象都有这个属性,并且这个属性值都一样,建议定义为静态变量,节省内存的开销。

5.什么时候将方法声明为静态呢?所有对象执行这个动作的时候最终的影响是一样的,那么这个动作已经不再属于某一个对象的动作了,可以将这个动作提升为类级别的动作,模板级别的动作;

6.静态代码块在类加载的时候只执行一次;

7.静态代码块的作用是什么?怎么用?用在哪里?什么时候用?

​ — 跟具体需求有关,在项目要求在类加载的时候,执行代码,完成日志的记录。那么这段记录日志的代码块就可以声明为静态代码块。

​ —通常在静态代码块中完成预备工作,先完成数据的准备工具,例如初始化连接池。

8.静态方法中无法直接访问实例变量和实例方法。

(实例代码块在构造方法之前执行,对象时机)

9.大多数方法定义为实例方法,一般是一个行为或者一个动作发生的时候,都需要对象的参与。例外的是工具类Util,为了方便程序员编程,定义成了静态方法。

在这里插入图片描述

final

  • final修饰的方法不能被覆盖;
  • final修饰的类不能被继承;
  • final修饰的变量一旦被赋值之后,不可重新赋值;
  • final修饰的实例变量,必须手动赋值,不能采用系统默认值。
  • final修饰的引用,一旦被赋值,就无法被垃圾回收器回收,无法指向其他对象。
  • final修饰的引用虽然指向一个对象之后不能再指向其他对象,但是所指向的对象内部是可以被修改的。
  • final修饰的实例变量一般是不可变的,这种变量一般都和static联合使用, 被称为常量,例如中国人类中的国籍,static final String COUNTRY = “中国”;(一般常量都是大写字母)

super

  • super出现在实例方法和构造方法中;
  • super的语法:super. ,super();
  • super不能使用在静态方法中;
  • super.大部分情况下也可省略;
  • super()只能**出现在构造方法第一行,**通过当前的构造方法去调用父类的构造方法,目的是:创建子类对象的时候,先初始化父类特征。
  • 重要:当一个构造方法的第一行:没有this()和super()的话,默认会会有一个super(),所以必须父类的无参构造方法是存在的。
  • this()和super()不能共存,他们只能出现在构造器的第一行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值