1.声明static属性
在类中被static修饰的成员变量叫做静态成员变量,也可以称为类变量,也就是类中的属性,它的生命周期和类同样。
普通变量和静态变量的区别:
- 普通变量是被对象拥有的,所以必须初始化对象才能调用
- 静态变量是被所有对象共享的,在类被加载的时候才会初始化
接下里上代码
public class Cat {
public static String name1 = "小黄";
public String name2 = "大黄";
}
class Test{
public static void main(String[] args) {
System.out.println(Cat.name1); //静态变量 小黄
Cat cat = new Cat();
System.out.println(cat.name2); //普通变量 大黄
}
}
通过上面代码可以发现静态变量是用类名.变量,而普通变量则需要初始化对象。
这里要说一下,因为当jvm加载类的时候静态变量已经储存在内存中了,而普通变量则需要通过初始化对象,开辟内存空间才能存储,一般来说静态变量的内存不会被GC当成垃圾给释放。
2.声明static方法
在类中被static修饰的方法叫做静态方法,静态方法和静态变量一样在程序执行的时候会加载一遍。
普通方法和静态方法的区别:
- 普通方法可以调用静态成员和普通成员,通过对象调用
- 静态方法只能调用静态成员,通过类名调用
老规矩上代码
public class Cat {
public static String name1 = "小黄";
public String name2 = "大黄";
public void show1(){
System.out.println(name1);
System.out.println(name2);
show2();
}
public static void show2(){
System.out.println(name1);
System.out.println(name2); //编译失败
show1(); //编译失败
}
}
根据上面代码可以看出来,当静态方法调用普通成员会导致编译报错
因为在编译期没有产生对象并不知道普通成员的存在,编译器也不知道普通方法是否被调用。
如果想在不创建对象的情况下调用某个方法,就加上static。
3.总结
- static修饰的变量和方法属于类
- 普通变量和方法属于对象
- static修饰的方法不能调用普通变量和方法
被static修饰过的变量或方法就不用再依赖对象来调用,只要类被加载了,就可以通过类名去调用了
当有被多个不同类引用的变量或方法可以用static修饰,就不用每个类去new对象了。一个字,方便。