5. static关键字
什么是static?
为了实现对象之间重复属性的数据共享
static的作用:
1:主要用于修饰类的成员
1)成员变量(Math.PI)
- 非静态成员变量:需要创建对象来访问
- 静态成员变量:使用类名直接调用,也可以通过对象访问
2)成员方法
可以使用类名直接调用(Math.random()方法等)
1:静态方法:
- 1)静态方法中不能访问非静态成员变量,只能访问静态变量。
- 2)静态方法不可以定义this,super关键字.
- 3)因为静态优先于对象存在.静态方法中更不可以出现this
2:非静态方法:非静态方法中可以访问静态成员变量
静态优缺点
1: 优点:对对象的共享数据进行单独空间的存储,节省空间 例如Chinese都有国籍,该数据可以共享可以被类名调用
2: 缺点:
- 生命周期过长
- 访问出现局限性。(静态只能访问静态)
什么时候定义静态变量
1: 静态变量(类变量)当对象中出现共享数据
例如:学生的学校名称。学校名称可以共享
对象的数据要定义为非静态的存放在对内存中(学生的姓名,学生的年龄)
什么时候定义静态方法
如果功能内部没有访问到非静态数据(对象的特有数据。那么该功能就可以定义为静态)
上面没什么实际代码,咱在最后做一个综合,贯穿1-5节:
定义数组工具类,需求如下(不借助Arrays类)
1. 有选择排序法对数组进行升序排列的功能
2. 查找某个值在数组中是否存在的功能
3. 遍历数组并输出的方法
4. 定位数组中最大值的方法(返回最大值所在数组的下标)
/**
* 自定义数组工具类
* @Title Arrays
* @author LinkedBear
*/
public class Arrays {
/**
* 有选择排序法对数组进行升序排列的功能
* @author LinkedBear
* @param arr 要排序的数组
* @return
*/
public static int[] sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int tempIndex = i; // 先令第i个位置的数为最小的
//从第i + 1个元素开始比较,如果发现更小的,则临时指针值的数值和下标都要更新
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[tempIndex]) {
tempIndex = j;
}
}
//循环完毕,进行交换
int temp = arr[i];
arr[i] = arr[tempIndex];
arr[tempIndex] = temp;
}
return arr;
}
/**
* 查找某个值在数组中是否存在的功能
* @author LinkedBear
* @param arr 要查找的数组
* @param value 要查找的值
* @return
*/
public static boolean contains(int[] arr, int value) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == value) {
return true;
}
}
return false;
}
/**
* 遍历数组并输出的方法
* @author LinkedBear
* @param arr
*/
public static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
}
/**
* 定位数组中最大值的方法(返回最大值所在数组的下标)
* @author LinkedBear
* @Time 2018年1月29日 下午7:20:24
* @param arr
* @return 最大值所在数组的下标
*/
public static int maxValueIndex(int[] arr) {
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > arr[index]) {
index = i;
}
}
return index;
}
}