static能用来修饰什么:
属性,方法,代码块,内部类
static修饰属性 (成员属性): 静态变量或者类变量
使用static 和 不使用static修饰属性时的区别:
1.不使用static修饰时:当我们创建了类的多个对象时,每一个类都有一套属于自己的非静态属性。当修改其中的非静态属性时,不会导致其他对象中同样的属性值进行修改
2.使用static修饰时:当我们创建了类的多个对象时,多个对象共享同一个static修饰的变量。当我们改变了某一个对象中的static修饰的属性时,会导致其他对象的static属性也会修改。
public class StaticTest {
public static void main(String[] args) {
Person p1=new Person();
p1.name="zs";
p1.age=23;
p1.nation="china";
Person p2=new Person();
p2.name="ls";
p2.age=24;
System.out.println(p2.nation); // 打印结果为china
}
}
class Person{
String name;
int age;
static String nation;
}
3.静态变量随着类的加载而加载,实例变量是随着类的实例而加载的(静态变量可以通过类.静态变量进行赋值)
4.静态变量的加载早于对象的创建,实例变量的加载是在对象创建之后
由于类只加载一次,则静态变量也只加载一次,加载的静态变量只会存储一份,存在方法区的静态域中
static修饰方法:
1.静态方法中只能调用静态的方法或者属性,非静态方法中即可以调用静态的方法或者属性也可以调用非静态的方法或者属性
2.在static中不能使用this 和 super关键字(因为该方法创建早于对象的创建,所以说此时this和super不存在)
static修饰代码块:格式static{ }
1.随着类的加载而执行(这里指的是执行,而不是加载)
2.静态代码块只执行一次
3.可以定义多个静态代码块(如果一个类中定义了多个静态代码块,执行的顺序要看静态代码块在程序当中声明的顺序,先声明的先执行。)
4.静态代码块的执行,优先于非静态代码块的执行
5.静态代码块只能调用静态的属性或者方法,无法调用非静态的属性方法
6.作用:初始化类的信息
注意点 :
在项目中什么时候需要声明为static
1.属性可以被多个对象所共享的,不会随着对象的改变而改变的。
2.操作静态属性的方法,通常设置为static
3.工具类中的方法一般设置为static,这样就没必要在创建对象,直接可以用类名调用工具类里面的方法