关于Java中的final,static

final

  • 修饰属性、方法、类
  • 修改属性:值不能更改(常量)
  • 修饰方法:方法不能重写(继承中子类不能重写父类中被final修饰的成员方法)
  • 修饰类:类不能被继承
  • 被final修饰的属性:要不显示赋值,要不构造方法赋值
    //错误:final修饰的属性/变量不能被修改
    class Test {
      final int PI = 3.1415926;  
      public Test(int pi){
        this.PI = pi;
      }
    }
    
  • 面试题:
    • 构造方法能不能被final修饰?(不允许)
    • final abstract能不能同时修饰一个类?(不能)

static

  • 修饰:属性、一般方法、游离块、内部类
  • 面试题:能不能修饰外部类和局部变量?(不能)
  • 修饰属性:静态属性/类变量
  • 修饰方法:静态方法
  • static修饰的成员变量不属于对象的数据结构
  • static成员变量和类的信息放在一起,仅保留一份,用于共享,而不是在堆中保留在每个对象里的多个副本
  • 被static修饰的属性和方法可以用类名字直接调用,可以不创建对象。不过,对象也可以直接调用
  • 静态方法里不能使用非静态属性。(eg:main函数不能直接使用本类中的非静态的成员变量)
  • static游离块在类加载的就被执行,且只执行一次
  • 同时被final,static修饰的是常量,必须声明的同时初始化,不可被改变(在编译时就被指定具体值)
  • static参与的程序执行次序
  • 面试题
    class Test {
        // Test example = new Test();
        static Test example = new Test();
    
        public Test() {
            System.out.println("lalala");
        }
    
        public static void main(String[] args) {
            Test test = new Test();
        }
    }
    // 不加static修饰,程序就存在递归
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章