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()不能共存,他们只能出现在构造器的第一行