Static.final修饰符、super关键字及常量与变量
一.Static
static 静态修饰符,用来修饰类的属性或方法
如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,称为静态属性。
static属性可以使用对象调用,也可以直接用类名调用,静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。
static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。
静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行。
二.final
final 用于声明属性,方法和类
属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。
方法:定义必须有实现代码,并且子类里不可被覆盖。
类:不能被定义为抽象类或是接口,不可被继承
当final修饰属性时,基本数据类型的属性将成为常量,不能被修改
final属性赋值在声明时同时赋值,往往与static一起使用。声明时不赋值,必须在构造方法中逐一赋值。总的原则:保证创建每一个对象的时候,final属性的值是确定的
final修饰属性、局部变量,值不能被修改
修饰类,不能被继承
修饰方法,不能被子类覆盖
三.super
super关键字为父类的引用,在程序中的主要用途:
在自类构造方法中调用父类的结构方法,super语句只能出现在子类构造方法体的第一行
当子类方法体中的局部变量或子类的成员变量与父类成员变量同名时,即子类局部变量覆盖父类成员变量时用“super.成员变量名”来引用父类成员变量
当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有相同的方法定义(方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法
与this区别,this是指当前对象,super通常指父类
若子类的成员变量或方法与父类的成员变量或方法同名,子类的成员变量或方法优先等级高,所以子类的成员变量或方法就隐藏了父类的成员变量或方法,但若我们要用父类中的成员变量或方法,就得使用super
四.方法覆盖
子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。
原则:同名,同参,同返回值,访问权限不能缩小
五.继承
继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,子类能吸收已有类的数据属性和行为,并能扩展新的能力。
形式:【访问修饰符】 【修饰符】 子类名 extends 父类名 {子类体}
六.常量与变量的总结
在类中声明的变量或常量叫属性,或者叫成员变量,如name、salary、count
在方法中声明的变量叫局部变量,或者临时变量。
属性可以使用四种权限修饰符修饰,
局部变量不可以 属性可以使用static修饰,局部变量不可以
属性可以使用final修饰,局部变量也可以
属性的生命周期很长,随着类加载或者创建对象被初始化,直到没有对象引用才回收
局部变量生命周期很短,执行某个方法时临时被初始化,方法结束即被回收
属性可以在整个类中使用,局部变量只在当前方法中使用
属性都有默认的初始化值,如引用类型都是null,整型是0等,局部变量不被自动初始化,必须手工初始化,如taskname手工指定为null才为null,而属性name默认就为null