目录
1. static基础
先来讲讲static的内存原理,
在jdk8之前静态变量存放在方法区,之后被优化到堆内存中,当调用静态变量时,会在堆中创建静态存储区存放所有静态变量(但它与new关键字不同,即静态变量是随着类的加载而加载的,优先于对象出现。)
总结如下:
无论是调用被static修饰的成员变量还是,成员方法,我们都有两种调用方式:类名 . 调用 ; 对象名 . 调用 ,但我们一般用类名调用。
public class Student {
//属性
private String name;
// 该变量由static修饰,叫做类变量
private static String teacherName;
}
public class StuedntTest{
public static void main(String []args){
// 可直接使用类名调用,此时赋值的内容会被所有Student对象共享!
Student.teacherName="teacher static"
}
}
2. 下面是static的内存图:
3. static修饰成员方法时的应用场景
static修饰成员方法时,不常用在javabean和测试类中,而是常用在工具类。
JavaBean,测试类,工具类的解释如下:
3.1. 创建一个工具类的具体要求:
1.类名要 见名知意 体现出该工具的作用。
2.构造方法要私有化。(不让外界创造他的对象)
3.方法由静态修饰(为方便调用)
3.2. 工具类的实例
public class ArrayUtil{
//私有化构造方法--不让外界创造他的对象
private ArrayUtil(){}
// 静态成员方法---方便调用
public static String printArr(int[]arr){
StringBuilder sb=new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1){
sb.append(arr[i]);
}else{
sb.append(arr[i]+", ");
}
}
sb.append("]");
return sb.toString();
}
public static double getAverage(double[]arr){
double sum=0;
for (int i = 0; i < arr.length; i++) {
sum=sum+arr[i];
}
return sum/arr.length;
}
public class TestDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// 类名.静态方法
String s = ArrayUtil.printArr(arr);
System.out.println(s);
double [] arr2 = {1.2, 2.3, 3.1, 4.6, 5.8};
double average = ArrayUtil.getAverage(arr2);
System.out.println(average);
}
}
4. static应用注意事项
4.1. 静态变量定义的位置:
类级别上: