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();
}
}