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