持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
1、static的用法
static可以修饰类,那就是静态类,可以修饰方法,被修饰的方法就叫静态方法,也可以修饰变量,那就是静态变量
- 静态类与普通类的区别
- 1、静态类不需要依赖于外部对象,也就是我们要实例A对象不需要依赖于外部Main这个对象,可以直接new出来。但是实例非静态类B的话就需要先实例化Main这个外部对象,然后在new B对象
- 2、静态内部类可以有静态变量和静态方法,但是普通内部类不能,本质上还是因为静态内部类不需要依赖于外部类,但是普通内部类存在的前提是外部类要存在
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new Main().new B();
}
// 静态内部类 A
public static class A{
}
// 普通类 B
public class B{}
}
- 静态方法与普通方法的区别 普通方法可以直接调用普通方法或者静态方法,但是静态方法只能直接调用静态方法,不能直接调用普通方法
-
静态变量与非静态变量的区别
-
1、非静态方法可以直接访问静态变量和非静态变量,但是静态方法可以直接访问静态变量,无法直接访问非静态变量
-
2、静态变量在类初次被加载的时候就会被初始化好,但是普通变量只有该对象被初始化的时候才会被加载
-
public static void c() {
System.out.println(name);
// 先初始化Main这个对象,然后再访问这个普通变量
Main main = new Main();
System.out.println(main.address);
}
2、static原理
java中的对象一般都是放在堆区的,对象中的属性是跟着对象走的,所以属性也会在堆中,但是静态变量不是,静态变量有一个专门的地方存放,那就是 方法区 ,静态变量的生命周期是随着类的加载一直到类被卸载。
静态变量是共享的,在内存中独一份。但是普通变量不是,这个对象有几个,那么这个属性就会有几个,多个属性之间不会影响,普通变量会随着这个对象被GC回收而一起回收掉,但是静态变量不会,除非你把这个类给回收了,记住这里是类不是对象
3、static的作用
- 1、特定情况下初始化资源
比如在一个对象被初始化之后就需要初始化一些数据,这时候可以使用静态代码块来实现
public class Main {
private static List<Integer> list = new ArrayList<Integer>();
static {
list.add(1);
list.add(2);
}
}
- 2、提升性能
比如有些只需要初始化一次的资源,比如要判断某个数字是否在1~9之间,这时候每次来判断都需要初始化 start end二个对象,使用之后还要回收这二个对象,但是我们发现吗,其实这二个对象只需要初始化一次就可以了,不需要每次来检验都初始化一遍
public static boolean isBelong(Integer num) {
Integer start = new Integer(1);
Integer end = new Integer(9);
return num >= start && num <= end;
}
修改后
public class MyUtil {
private static Integer start,end;
static {
start = new Integer(1);
end = new Integer(9);
}
public static boolean isBelong(Integer num) {
return num >= start && num <= end;
}
}