• 面向对象-static关键字实战案例


             面向对象-static关键字实战案例

                                 作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

     

    一.static关键字概述

    1>.static的功能

      static关键字用于修饰成员变量和成员函数。

    2>.被static修饰后的成员变量和成员函数具备的特点

      (1)随着类的加载而加载;
      (2)优先于对象存在(因此静态方法中一般无法直接使用非静态修饰的成员变量);
      (3)被所有对象所共享(即不在堆内存中存放);
      (4)可以直接被类名调用;

    3>.使用static关键字注意事项

      (1)静态方法只能访问静态成员;
      (2)静态方法中不可以写this,super关键字;
      (3)主函数是静态的;
      (4)静态关键字不能修饰局部变量;

    4>.static的优缺点

      优点:  
        静态成员多了一种调用模式,可以直接被类名调用。也可以被对象调用。
    
      缺点:
        静态方法只能访问静态成员,存在访问的局限性。

    5>.静态变量和实例变量的区别

      所属不同:
        静态变量也称为类变量,可以直接被类调用,所属于类;
        非静态变量称为成员变量,或者实例变量,是被对象调用,所属于对象。   生命周期不同:     静态变量随着类的加载而加载,也意味着随着类的消失而消失,生命周期最长;
        而实例变量随着对象的创建而加载,随着对象的消失而消失,即按照对象生命周期而存在。

      存储JVM的位置不同:
        静态变量存储在方法区的静态区中;
        实例变量存在于所述的堆内存中;

      数据共享权限不同:
        静态变量数据被所有的对象所共享;
        实例变量是对象中的特有数据

     6>.static的使用场景

      成员变量:
        当该成员变量所存储的数据,每一个对象都是一样的,这时没有必要把该数据存储到每一个对象中,只要让所有对象共享该数据即可,这时成员变量就需要被static修饰。
    
      静态函数:
        当成员函数内并没有访问对象中特有的数据时,就可以将该方法定义成静态的;
        简单的说该函数如果访问了成员变量,该函数就是非静态的;
        该函数没有访问过成员变量,或者访问过静态的成员变量,那么为了程序的严重性,将盖房啊定义成静态的。因为该方法不需要对象存在就可以使用。

    二.实现一个静态工具类的应用案例

    1>.编写数组工具类

    /**
     *     实现数据排序并且打印的功能的数组工具类
     * @author 尹正杰
     *
     */
    public class ArrayTools {
    
        /**
         * @param arr :接收一个int类型的数组,按照从大到小的顺序对int类型的数组进行排序。
         */
        public static void sort(int[] arr) {
            for (int x = 0; x < arr.length - 1; x++) {
                for (int y = x + 1; y < arr.length; y++) {
                    if (arr[x] > arr[y]) {
                        int temp = arr[x];
                        arr[x] = arr[y];
                        arr[y] = temp;
                    }
                }
            }
        }
            
            
        /**
         *     将int数组转换为字符串
         * 
         * @param arr:    接收一个数组int类型的数组
         * @return     :    返回该数组对应的字符串格式,即[元素1,元素2,元素n,...]
         */
        public static String arrayToString(int[] arr) {
                
            String res  = "[";
            for (int i = 0; i < arr.length; i++) {
                if (i != arr.length - 1) {
                    res = res + arr[i] + ",";
                }else {
                    res = res + arr[i] + "]";
                }
            }
                
            return res;
        }
    }

    2>.调用数组工具类

    /**
     *     
     * @author 尹正杰
     *
     */
    public class ArrayToolDemo {
    
        public static void main(String[] args) {
    
            //测试数组
            int[] arr = {9,5,2,7};
            
            System.out.println("排序之前:" + ArrayTools.arrayToString(arr));
            
            ArrayTools.sort(arr);
            
            System.out.println("排序之后:" + ArrayTools.arrayToString(arr));
        
        }
        
    }

  • 相关阅读:
    小甲鱼PE详解之输入表(导出表)详解(PE详解09)
    小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
    小甲鱼PE详解之输入表(导入表)详解(PE详解07)
    小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
    小甲鱼PE详解之区块表(节表)和区块(节)续(PE详解05)
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    天大 ACM 1090. City hall
    C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    Integer Inquiry -TJU1112
    天大acm 题号1002 Maya Calendar
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12231640.html
Copyright © 2020-2023  润新知