final、static、this、super关键字总结

final、static、this、super关键字总结


(一)final

1.final变量

如果是基本数据类型,那么final变量初始化后不允许修改值
如果是引用数据类型,那么final变量初始化后不能指向另一个对象

1
2
3
4
5
final String s = "0";
s = "1"; //报错
final Test t1 = new Test(1);
Test t2 = new Test(2);
t1 = t2; //报错

2.final方法

final方法不允许任何继承类修改

3.final类

final不允许被继承,所有方法都被隐式指定为final方法


(二)static

1.静态成员变量/方法

static修饰的静态成员变量/方法属于整个类,在类的所有对象中共享,只存在一份,可以通过类名直接调用,如Class.varClass.fun()
静态变量被存放在方法区

2.静态代码块

static{}修饰的代码块,会在非静态方法之前执行,不管创建多少类的对象,静态代码块都只执行一次

类实例化顺序:父类静态方法 -> 子类静态方法 -> 父类非静态方法 -> 父类构造方法 -> 子类非静态方法 -> 子类构造方法

3.静态内部类

注意:

  1. 静态内部类的创建不依赖于外部类的创建
  2. 静态内部类不能使用外部类的非静态成员

应用:单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//使用静态内部类实现单例模式
public class Singleton{
//私有的静态内部类
private static SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}

//私有化构造函数
private Sinleton() {}

public static Sinleton getInstance() {
return SingletonHolder.INSTANCE;
}
}

优点:
1.线程安全:final不可变对象,总是线程安全
2.延迟初始化:只有调用SingletonHolder.INSTANCE才对对其初始化

4.静态导包

import static导入某个包中的全部静态资源。


(三)this

this用于引用类的当前实例,是可有可无的,加上可以让代码更易读。

注意:

  1. 通过this调用本类的构造方法,必须放在第一行,否则编译报错
  2. this不能用在static方法中

    原因:被static修饰的方法属于类,而非单个实例this表示的是引用类的实例,而非类。

1
2
3
4
5
6
7
8
9
10
11
12
public class Test{

private Variable var;

private void fun() {}

public static void main(String[] args) {
this.Test(); //通过this调用本类的构造方法,必须放在第一行,否则编译报错
this.var = new Variable(); //等价于: var = new Variable();
this.fun(); //等价于: fun();
}
}

(四)super

super用于从子类访问父类对象实例的变量和方法

注意:

  1. 在子类中通过super()调用父类的构造方法,必须放在第一行,否则编译报错
  2. super不能用在static方法中

    原因:被static修饰的方法属于类,而非单个实例super表示的是引用父类的实例,而非父类。

1
2
3
4
5
6
7
8
9
10
11
12
public class Father{
protected Variable var;
protected void fun() {}
}

public class Son extends Father{
public void Son() {
super(); //在子类中通过super()调用父类的构造方法,必须放在第一行,否则编译报错
super.var = new Variable();
super.fun();
}
}
-------------本文结束感谢您的阅读-------------

本文标题:final、static、this、super关键字总结

文章作者:DragonBaby308

发布时间:2019年08月11日 - 18:20

最后更新:2019年09月22日 - 10:05

原始链接:http://www.dragonbaby308.com/final-static-this-super/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%