美文网首页
Java中final与static的用法

Java中final与static的用法

作者: TRT131 | 来源:发表于2019-03-01 22:24 被阅读0次

一.static

static即表示“静态”,可用来修饰变量,方法,内部类以及代码块。

1. static类
public  class Outer {
    static class Inner{
     public void innerFun(){
            System.out.println("Inner");
        }
    }
}

静态内部类与非静态内部类的区别:非静态内部类当中会隐性的持有一个外部类的引用,而静态内部类当中没有

没有这个引用:

  • 静态内部类可以使用Outer.Inner()来实例化。

  • 静态内部类不可以使用外部类中未被static修饰的变量或方法

此外非静态内部类中不能使用static修饰变量或方法。

使用场景

  1. ViewHolder
  2. Handler

上述两个场景中,内部类都需要访问外部的成员变量或方法,同时为了防止内存泄漏,不适合持有外部类的强引用。

2. static变量

静态变量在类被装载时就已经初始化,并且被存入静态存储区,被所有对象共享。而未被static修饰的称为实例变量,存储在堆栈中,在创建对象的时候初始化,因此各个对象副本互不影响。

3. static方法

被static修饰的方法被称为静态方法,存储在方法区中,且只有一份。由于静态方法也没有类的引用,所以无法使用类中的非静态资源(当然显示传入引用后可行)

public  class Outer {
        int a=10;
        public static void innerFun(){
            System.out.println(new Outer().a);
        }
}
4. static块

静态块在类被加载时执行并仅执行一次

二.final

final表示不可改变,可修饰类,变量以及方法

1. final类

final类无法被继承

2. final变量

被final修饰的变量即为常量,无法被修改,可实现线程安全

final int a=10;


Outer out=new Outer();
out=new Outer();
out.a=1; // 无法为最终变量a分配值
3. final方法

被final修饰的方法可以被继承,但是无法被复写

相关文章

网友评论

      本文标题:Java中final与static的用法

      本文链接:https://www.haomeiwen.com/subject/otsjuqtx.html