Static关键字可以用在类,方法,属性上。表示静态。
static属性:一类的属性被static修饰后,无论该类生成多少个实例,都共用同一个静态属性,所以其中若有一个实例改变了静态属性的值,则其他实例同样会受到影响。
static方法:可以通过类名直接访问。
同时static方法只能继承不能override。
静态方法中只能使用静态属性,调用静态方法,即静态不能使用非静态变量方法,而非静态可以使用静态或者非静态的变量或者方法
static代码块:static block会优先于构造方法执行,当类被加载到JVM上的时候就会执行,且只会执行一次。
若一个类Man有一个子类Child,两者都有静态代码块,若声明一个子类的顺序,则代码执行的顺序是:
父类的Man的static block->Child的static block->Man的构造方法->Child->的构造方法
public class StaticBlockTest {
public static void main(String[] args) {
Child a = new Child();
}
}
class Man{
public Man(){
System.out.println("Man's Constructor");
}
static {
System.out.println("Man's Static Block");
}
}
class Child extends Man{
public Child(){
System.out.println("Child's Constructor");
}
static {
System.out.println("Child's Static Block");
}
}
输出结果:
Man's Static Block
Child's Static Block
Man's Constructor
Child's Constructor
final关键字可以修饰:类,方法,属性
final类:表示类不能继承
final方法:表示方法不能重写;
final属性:表示属性的值 不能修改
1、若是原生类型之一,则表示值一旦赋予则不能修改;
2、若是引用类型,则对象引用不能在指向其他对象,但原来对象中的属性可以修改
final int a = 3;
final Man man = new Man(1,"name");
man.setAge(a);
即 a=3后,若在对a进行赋a=4则就会报错,而对于man,则可以修改它的内在属性。