• -static


    本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包。

    1 静态变量,静态方法,静态块

       静态对象,静态方法都是在原对象和方法上加上static关键字修饰,表示类可以直接调用这些,而不需要实例化后再调用。具有的好处是:
         1--静态对象的数据是全局唯一的,一改都改,可以保证数据的唯一性
         2--引用方便,直接用类名.方法(属性)就可以了,不用再get和set
      当然静态方法(变量,块)也有相应的限制:
        1--不能调用其他非静态方法(只能调用static方法)
        2--只能访问static数据
        3--不能以任何方式引用this或super
      示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class StaticExercise {
         
        public static String sky="jeyson";
         
        public static String getMySky(String sky){
            return sky;
        }
        static {
            System.out.println("这是静态块中的内容--");
            System.out.println("静态块:"+getMySky(sky));
        }
        /**
         * ***静态对象好处:
         *    1--静态对象的数据是全局唯一的,一改都改,可以保证数据唯一。
         *    2--引用方便,直接类名.方法就行了,不用set和get
         * ***分配空间顺序:
         *    先分配静态对象空间再分配非静态。初始化顺序也是这样
         * ***static final 修饰的成员变量和成员方法可以理解为全局变量(java中没有全局变量概念)
         * ***静态对象,方法,块的限制:
         *    1--只能调用其他的static方法
         *    2--只能访问static数据
         *    3--不能以任何方式引用this或super
         * 静态对象测试
         */
        @Test
        public void testStatic1(){
            System.out.println(sky);
            System.out.println("-----------------");
            System.out.println(getMySky(sky));
            System.out.println("-----------------");
            System.out.println(StaticTest.getSms());
             
        }
    }

     2 静态内部类

         当一个类跟另一个类(外部类)有紧密的联系,一般只有用到外部类的时候才会用该类的话,可以将该类作为静态的内部类。这样就可以随着类的加载而直接产生。不用再可以实例化。
         使用方法:随类一同被加载,调用直接外部类.内部类.静态对象(方法)
        示例代码:
     
       
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class StaticTest{
        public static String sms="to my sky";
        public static String getSms(){
            return sms;
        }
        /**
         * 静态内部类
         * ***使用场景:
         *    内部类跟外部类联系紧密,一般只有用到外部类的时候才会用到这个类
         * ***使用
         *    随类一同被加载,直接外部类.内部类.静态对象(方法)
         */
        static  class InnerStatic{
            public static final String MYSKY="MY FINAL SKY";
        }
    }

     

    1
    2
    3
    4
       @Test
    public  void testStatic2(){
        System.out.println(StaticTest.InnerStatic.MYSKY);
    }

      

     2 静态导包

        如果要用的静态方法所在的类跟当前类不在同一个包下,可以使用静态导包。这样你想要用的静态方法或变量就相当于在该类中直接可见,无需再类名.静态变量的方式调用。
        使用方法:
          import static 包名.类名.静态成员变量(方法)
        好处:
           被导入的静态变量和方法在该类中直接可见,直接用
        坏处:
           一定程度上降低了代码的可读性
        代码示例:
    1
    2
    3
    4
    5
    6
    public class MyStaticImportTest {
        public static final int number=55;
        public static void getMyWords(){
            System.out.println("hello ,这是一个静态导包的测试");
        }
    }

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import static com.generic.MyStaticImportTest.number;
    import static com.generic.MyStaticImportTest.getMyWords;
     
    /**
     * @Description:
     *  静态
     */
    public class StaticExercise {
         
        /**
         * 静态导包
         * ***使用方法:
         *   直接静态导入相应的变量和方法:(import static 包名.类名.静态成员变量(方法)
         *       import static com.generic.MyStaticImportTest.number;
         *       import static com.generic.MyStaticImportTest.getMyWords;
         * *** 好处:
         *     被导入的静态方法和变量在这个类中直接可见,无需再给出类名
         * *** 坏处
         *     一定程度上降低了代码的可读性
         */
        @Test
        public void testStatic3(){
            //静态导入后可以直接用
            int myNumber=number;
            getMyWords();
        }
         
    }

      

  • 相关阅读:
    Swift 对AFN框架的封装
    iOS开发中静态库制作 之.a静态库制作及使用篇
    iOS 地图定位及大头针的基本使用
    swt中改变树的字体及颜色的实现
    为什么很多程序员选择跳槽?
    用SWT做圆形控件
    JAVA简单编码规则
    swt中改变表格字体大小及颜色的实现
    使用JAVA的反射机制反射带有数组参数的私有方法
    我的GIT使用经历
  • 原文地址:https://www.cnblogs.com/zjh-/p/5598088.html
Copyright © 2020-2023  润新知