zoukankan      html  css  js  c++  java
  • Java关键字之static的典型用法分析

    static关键字是java中非常重要的一个关键字,用的好的话可以提高程序的运行性能,优化程序结构。接下来我们来总结
    一下static关键字及其用法。
    1.static变量
    static变量也称作静态变量,静态变量为所属类的成员所共享,静态变量只会有一份,而不是每个实例都有自己的一份。
    在静态方法中和非静态方法中都可以直接引用静态变量,而非静态变量则不可能在静态方法中直接引用,比如我们最常见的
    main()方法,我们来看一下以下的code:

    package com.ab.main;
    
    /**
     * @author 
     *
     */
    public class StaticTest {
    
        private int m = 0;
        private static int Count = 0;
        
        public StaticTest() {
            Count++;
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            System.out.println("Count: "+Count);
            //System.out.println("m value is: "+m);
            //error:不能对非静态字段 m 进行静态引用
            
            StaticTest Static1 = new StaticTest();
            System.out.println("这是第"+Static1.Count+"次初始化");
            
            StaticTest Static2 = new StaticTest();
            System.out.println("这是第"+Static2.Count+"次初始化");
                    
            Static1.testStatic1();
            
            testStatic2();
    
        }
        
        public void testStatic1(){
            System.out.println("m value is: "+m);
            System.out.println("count value is: "+Count);
        }
        
        public static void testStatic2(){
            //System.out.println("m value is: "+m);
            //error:不能对非静态字段 m 进行静态引用
            System.out.println("count value is: "+Count);
        }
    
    }

    其中在静态的main()方法中可以直接引用静态变量Count,但是不能引用非静态变量m,要不然会报error:
    不能对非静态字段 m 进行静态引用
    静态变量每个类一个,而实例变量为每个对象一个,静态变量可以节约内存。
    静态变量是在类被加载的时初始化,如以上代码所示,Count只在加载时候初始化一次,new对象后Count加1,
    再次new对象的时候,Count不在初始化,就在1的基础上再加1变为2,以上代码的count部分输出为:
    这是第1次初始化
    这是第2次初始化
    而如果把private static int Count = 0;改为private int Count = 0;的话输出结果为:
    这是第1次初始化
    这是第1次初始化
    每次new的时候重新初始化为0,然后再加1
    此外还有一个常用的用法是和final配合使用,比如public static final double PI = 3.141592653589793;
    我们知道final变量代表你不能改变它的值,就是常数的定义,一般都是大写字母。

    2.static方法
    静态的方法可以直接调用而不需要堆上的实例,也就是可以直接用类的名称调用,而不是用对象引用变量,比如在
    最常见的入口函数main()就是典型的public static void main(String[] args)静态方法,如果还有定义为static
    的方法,比如code中的public static void testStatic2()我们就可以在main中直接testStatic2();调用,而要
    调用public void testStatic1()这个非静态方法的话,则需要new一个实例出来StaticTest Static1 = new StaticTest();
    静态方法不能直接存取非静态的变量,可以直接调用静态变量

    3.static代码块
    static还有一个作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,
    类中可以有多个static块。
    在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
    为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。
    4.static import
    这是Java 5.0的新功能,import static ...之后调用的时候直接使用方法名调用,就好像是该类自己的方法一样。

    总结
    static是java中非常重要的一个关键字,主要有四种用法:

    用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;
    用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用;
    静态块用法,将多个类成员放在一起初始化;
    静态导包用法,将类的方法直接导入到当前类中,更加方便。

  • 相关阅读:
    用OpenGL简单编写的一个最简单贪吃蛇游戏
    Python lambda map filter reduce
    Hadoop Python MapReduce
    Python faker生成数据
    Pandas数据清洗
    PySpark与jupyer notebook
    虚拟机与宿主机网络共享
    集合覆盖问题与贪婪算法
    最快路径与狄克斯特拉
    最短路径问题与广度优先搜索
  • 原文地址:https://www.cnblogs.com/practice-h/p/9155900.html
Copyright © 2011-2022 走看看