• Java 关键字 static final


    1. static

    1.1 static 的基本概念

    static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。
    ----《Java编程思想》P86

    简单来说就是:方便在没有创建对象的情况下来进行调用(方法/变量)。
    即:被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。

    1.2 static 的用法

    • static 关键字修饰类(只有内部类可以被 static 修饰)
    public class StaticTest {
        	//static关键字修饰内部类
        	public static class InnerClass{
        		InnerClass(){
        			System.out.println("========静态内部类========");
        		}
        		public void InnerMethod( {
        			System.out.println("========静态内部方法======");
        		}
        		public static void main(String[] args) {
        			//直接通过StaticTest类名访问静态内部关InnerClass
        			InnerClass inner=new StaticTest.InnerClass();
        			//静态内部类可以和普通关一样使用
        			inner.InnerMethod();
        		}
        	}
        /*输出是
        *========静态内部类========
        *========静态内部方法==========
        */
    
    • static 关键字修饰方法

      • static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问
      • 在静态方法中不能访问类的非静态成员变量和非静态成员方法
      • 非静态成员方法中是可以访问静态成员方法/变量
      • 静态成员方法可以调用静态成员方法
    • static 关键字修饰变量

      • static 变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
      • static 成员变量的初始化顺序按照定义的顺序进行初始化。
    • static 关键字修饰代码块

      • 静态代码块在类初次加载时执行,只执行一次
      • 用来形成静态代码块以优化程序性能

    2. final

    2.1 final 的基本用法

    • final 关键字修饰变量

      • 用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。
      • 同时使用static和final修饰的成员在内存中只占据一段不能改变的存储空间。
    • final 关键字修饰方法参数

    public class FinalTest {
        /* ... */
        public void finalFunc(final int i, final Value value) {
            // i = 5; 不能改变i的值
            // value = new Value(5); 不能改变v的值
            value.v = 5; // 可以改变引用对象的值
        }
    }
    class Value {
        int v;
        public Value(int v) {
            this.v = v;
        }
    }
    
    • final 关键字修饰方法

      • 方法前面加上final关键字,代表这个方法不可以被子类的方法重写
      • final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定
      • 类中所有的private方法都隐式地指定为是final的
    • final 关键字修饰类

      • 使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承
      • final类中的所有成员方法都会被隐式地指定为final方法
      • Java中有许多类是final的,譬如String, Interger以及其他包装类

    2.2 final 关键字的好处

    • final关键字提高了性能。JVM和Java应用都会缓存final变量。
    • final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
    • 使用final关键字,JVM会对方法、变量及类进行优化。

    附,类初始化顺序:

    父类静态变量
    父类静态代码块
    子类静态变量
    子类静态代码块
    父类普通变量
    父类普通代码块
    父类构造函数
    子类普通变量
    子类普通代码块
    子类构造函数

  • 相关阅读:
    委托(2).net 1.x中的委托
    委托(1)认识委托
    克隆对象的几种方法
    常用的去重和排序
    为更好地设计数据库,重新整理sql server数据类型
    对于数据库中表示状态或类型字段表示方法的思考
    string to byte[]
    json序列化时datetime的处理方法
    dll版本冲突的解决方法
    .net中的序列化
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/12595659.html
Copyright © 2020-2023  润新知