static关键字的使用

208 阅读2分钟

static关键字的使用

变量按照位置分:属性(成员变量) VS 局部变量

属性(成员变量):实例变量 VS 类变量(static修饰的属性)

static可以修饰:属性,方法,代码块,内部类

static修饰属性(类变量):

1、同一个类创建的多个对象,每个对象单独拥有一份实例变量,共同拥有一份类变量。

2、同一个对象的多个类中,当某个对象对类变量进行修改后其他的对象看到的是修改后的值。

3、类变量是随着类的加载而加载的(类加载只加载一次)。实例变量是随着对象的创建而加载的。

4、调用类变量的方式:类名.类变量名 对象.类变量

static修饰方法(静态方法):

1.静态方法是随着类的加载而加载的

2.静态方法中不能调用实例变量和非静态方法,否则会报错(原因:因为加载时机不同, 类加载的时候对象还没有呢)

3.非静态方法中可以调用类变量和静态方法

4.静态方法中不能使用this和super关键字

 static使用场景:
 static修饰属性:1.多个对象共同拥有时那么使用static修饰
                 2.常量:public static final double
                     PI=3.14159265358979323846;
 static修饰方法:
                1.工具类中的方法都是静态方法
                2.有时为了调用类变量方法也会定义成静态方法
class Person{
String name;
//实例变量
int age;
static String country;//类变量
//非静态方法:非静态方法中可以调用类变量和静态方法
public void info(){
    System.out.println("name="+name+""+"age="+age+""+"country="+country);
}

/* 静态方法:
 *  1.静态方法中不能调用实例变量和非静态方法,否则会报错(原因:因为加载时机不同,
 *  类加载的时候对象还没有呢)
 */

public static void show(){
    System.out.println("static show");
  }   
}

public class StaticTest {
public static void main(String[] args) {
    Person.country="中国";
    Person p1=new Person();
    p1.name="强东";
    p1.age=46;
  //p1.country="中国";

    Person p2=new Person();
    p2.name="马云";
    p2.age=48;
 // p2.country="中国";

    Person p3=new Person();
    p3.name="华腾";
    p3.age=40;
 // p3.country="中国";

    p1.info();
    p2.info();
    p3.info();

    System.out.println("-------------------------------");
    //类名.静态方法名
    Person.show();
  }
}