zoukankan      html  css  js  c++  java
  • final与static

     static关键字

    static关键字用来修饰类的成员,被这个关键字修饰的成员都和类加载有关。

    JVM运行时不会将所有类加载到内存,因为无法确定程序中要使用哪些。类在第一次使用时加载,只加载一次。

    • 静态变量

    用static修饰的变量就是静态变量。

    静态变量在类加载后就初始化。

    静态变量被类的所有实例所共享。

    静态变量可以使用 类名.变量名 形式访问。

    如果在定义一个类的时候,发现一个成员变量需要被所有实例所共享,那么这个成员变量就需要定义为static的。

    • 静态方法

    用static修饰的方法就是静态方法。

    静态方法在类加载后就可以使用。

    静态方法可以使用 类名.方法名 形式访问。

    静态方法不能直接访问外部非静态成员。

           因为外部非静态成员必须在类创建对象之后才能使用,而静态方法可以在没创建对象时就使用。

    如果要在静态方法内部访问外部非静态成员,需要先创建该类对象,通过对象访问。

    静态方法中不能使用this关键字。

           因为this是个引用,哪个对象调用方法就引用哪个对象。 而静态方法有可能不是被对象调用的,this无从引用。

    如果一个方法不用访问对象的非静态成员,那么就可以定义为静态的,这样使用者就不需要创建对象,直接用类名调用。

    静态方法通常是作为工具方法或者一个可以产生对象的方法被声明,目的是为了让调用者更方便的使用,不必创建对象。

    • 静态代码块

    用static修饰的代码块就是静态代码块。

    静态代码块在类加载后执行。

    静态代码块和静态方法相同,不能使用外部非静态成员。

    静态代码块执行和静态变量的初始化顺序由代码从上到下顺序决定。

    如果我们有一段代码想在别人使用某个类的时候就运行, 而且只运行一次, 那么就可以写在静态代码块中.

    • 静态内部类

    用static修饰的内部类就是静态内部类。

    静态内部类在类加载后就可以创建对象,无需创建外部类对象。

      final关键字

    final标记的类不能被继承。

    final标记的方法不能被子类重写。

    final标记的变量即为常量,只能赋值一次。注意引用数据类型和基本数据类型的区别。

    使用public static final共同修饰的常量就是全局常量。通常全部字母大写。

    -------------来源 : 张孝祥面试大全--------------------

    使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

     final StringBuffer a=new StringBuffer("immutable");
    执行如下语句将报告编译期错误:

    a=new StringBuffer("");
    但是,执行如下语句则可以通过编译:

    a.append(" broken!"); 

    有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

    public void method(final  StringBuffer  param)

    {

    }

    实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

               param.append("a");

  • 相关阅读:
    SHELL脚本自动备份Linux系统
    Linux Shell脚本之自动修改IP
    oracle redo日志维护
    Linux运维工程师面试
    angular 的杂碎报错小知识
    angular.run 妙用
    vue的生命周期
    angular +H5 上传图片 与预览图片
    跨域问题解决方案之chrome插件
    js递归
  • 原文地址:https://www.cnblogs.com/olvo/p/2514745.html
Copyright © 2011-2022 走看看