static关键字(静态的)
static调用属性
- 我们编写类时,只是描述了属性和方法,只有再new时才会创建出一个新的对象,而有时我们希望新的对象只有一个,所有的实例共享这个对象
- static可以修饰属性,方法,代码块,内部类
- 使用static修饰属性:静态变量
- 静态变量:多个对象共享一个静态变量,当改变其中一个静态变量时,会导致其他变量也被修改
- 实例变量:每个变量都有一个非静态属性,属性之间互不影响
- 静态变量随着类的加载而加载,可以通过类.静态属性方式调用
- 静态属性加载早于对象创建
- 由于类只加载一次,所以静态变量也只加载一次:存在方法区静态域区
- 实例:
public class StaticTest {
public static void main(String[] args) {
China.nation="中国";
China c1=new China();
c1.name="张三";
c1.nation="四川";
China c2=new China();
c2.name="李四";
System.out.println(c2.nation);
}
}
class China{
String name;
int age;
static String nation;
}
static调用方法
- 随着类的加载而加载,通过类.静态方法进行调用
- 静态方法中只能调用静态方法或属性,而非静态方法中既可以调用静态方法或属性也可以调用非静态方法或属性
- static中不能使用this关键字,super关键字
- 实例:
public class StaticTest1 {
public static void main(String[] args) {
Chinese.age="20";
Chinese c1=new Chinese();
c1.cook();
}
}
class Chinese{
String name;
static String age;
public static void cook(){
System.out.println("做饭");
eat2();
System.out.println(Chinese.age);
}
public void eat(){
System.out.println("吃饭");
}
public static void eat2(){
System.out.println("大口吃饭");
}
}
static关键字使用场景
- 属性可以被多个对象所共享,不会随对象的不同而不同
- 类中的常量也常常声明为static
- 操作静态属性的方法,通常设置为static
- 工具类中的方法,习惯声明为static,如:Math,Arrays,Collections…