美文网首页
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