面向对象-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));
    
    }
    
}

 

posted @ 2020-01-23 23:02  JasonYin2020  阅读(182)  评论(0编辑  收藏  举报