java关键字static和final总结

一,final关键字

在java中final关键字有“这是无法改变的”或者“终态”的含义。

final可以修饰类,方法,变量,,参数,但是不能休息构造方法。

修饰类型 意义
final类不能被继承,final类的成员方法就没有机会被子类覆盖(都没有子类),默认是final的
方法 不能被子类重写,高效,编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率
变量 用final修饰的成员变量表示常量,值一旦给定就无法改变
参数 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

二,static关键字

static关键字有“静态“或者”全局”的意思。

可以用来修饰成员变量和成员方法,也可以形成静态static代码块。

它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

2.1:static方法

static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问(最常见的main方法就被修饰为static方法),它不依附于任何对象,也就没有this。在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

2.2 static变量(不能修饰局部变量-java规定的)

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

2.3 static代码块

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次,所以它可以优化程序的性能。

2.4 练习,

  

public class Main {  
    static int value = 69;
    
    static {
               System.out.println("this is test");
 }
    public static void main(String[] args) throws Exception{
        new Main().printValue();
    }
 
    private void printValue(){
        int value = 6;
        System.out.println(this.value);
    }
}

  输出:

this is test
69

首先,在类被加载的时候便先去执行static代码块,所以输出this is test,然后main方法new处理一个对象,其中this代表的是当前对象,即main类里面的value=69,所以输出的就是69。

三,static和final一起用

static final用来修饰成员变量和成员方法,可简单理解为“全局常量”:对于变量,表示一旦给值就不可修改,并且通过类名可以访问。对于方法,表示不可覆盖,并且可以通过类名直接访问。其中当它但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象。

猜你喜欢

转载自www.cnblogs.com/hydStar/p/9072571.html