static静态变量
被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。静态变量由于不属于任何实例对象,是属于类的,所以在内存中只会有一份,在类的加载过程中,JVM为静态变量分配一次内存空间。
static静态方法
被static修饰的方法也叫做静态方法,因为对于静态方法来说是不属于任何实例对象的,那么就是说在静态方法内部是不能使用this的,因为既然不属于任何对象,那么就更谈不上this了。 最常见的就是main方法,因为在程序开始执行时必须调用main() ,所以它被声明为static。
static静态代码块
用static修饰的代码块表示静态代码块,当JVM加载类时,就会执行该代码块,每个代码块按序执行且只会被执行一次。
final
1、fianl参数
final修饰属性:当一个属性被final所修饰时,表示该属性不能被改写。
2、fianl方法
final修饰方法:当一个方法被final所修饰的时,表示该方法是一个终态方法,即不能被重写(Override)
3、fianl类
final修饰类:当一个类被final所修饰时,表示该类是一个终态类,即不能被继承。
4、补充
当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
总结:
static final用来修饰成员变量和成员方法,
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
package caozuo;
class Test {
static{
System.out.println("test static 1");
}
static{
System.out.println("test static 2");
}
public static void main(String[] args) {
//static的主要意义是在于创建独立于具体对象的域变量或者方法
//以致于即使没有创建对象,也能使用属性和调用方法!
//在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
//static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。
// static块可以置于类中的任何地方,类中可以有多个static块
}
}
static应用场景
因为static是被类的实例对象所共享,因此如果某个成员变量是被所有对象所共享的,那么这个成员变量就应该定义为静态变量。
因此比较常见的static应用场景有:
1、修饰成员变量
2、修饰成员方法
3、静态代码块
4、修饰类【只能修饰内部类也就是静态内部类】
5、静态导包