zoukankan      html  css  js  c++  java
  • 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会对方法、变量及类进行优化。

    附,类初始化顺序:

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

  • 相关阅读:
    雅虎军规34条 (一)
    jetty和tomcat的区别
    Jsp--9大内置对象
    java 重定向和转发的区别
    layer弹出层
    html 锚点
    css绘制三角形
    原生js下拉菜单联动
    layui省市区下拉菜单三级联动
    tp5时间格式转换
  • 原文地址:https://www.cnblogs.com/huaranmeng/p/12595659.html
Copyright © 2011-2022 走看看